bool CompilePixelShader(const char *code, LPDIRECT3DPIXELSHADER9 *pShader, LPD3DXCONSTANTTABLE *pShaderTable, std::string &errorMessage) { ID3DXBuffer* pShaderCode = NULL; ID3DXBuffer* pErrorMsg = NULL; HRESULT hr = -1; // Compile pixel shader. hr = dyn_D3DXCompileShader(code, (UINT)strlen(code), NULL, NULL, "main", "ps_2_0", 0, &pShaderCode, &pErrorMsg, pShaderTable); if (pErrorMsg) { errorMessage = (CHAR *)pErrorMsg->GetBufferPointer(); pErrorMsg->Release(); } else { errorMessage = ""; } if (FAILED(hr)) { if (pShaderCode) pShaderCode->Release(); return false; } // Create pixel shader. pD3Ddevice->CreatePixelShader( (DWORD*)pShaderCode->GetBufferPointer(), pShader ); pShaderCode->Release(); return true; }
bool CompileVertexShader(const char *code, LPDIRECT3DVERTEXSHADER9 *pShader, LPD3DXCONSTANTTABLE *pShaderTable, std::string &errorMessage) { ID3DXBuffer *pShaderCode = nullptr; ID3DXBuffer *pErrorMsg = nullptr; // Compile pixel shader. HRESULT hr = dyn_D3DXCompileShader(code, (UINT)strlen(code), nullptr, nullptr, "main", "vs_2_0", 0, &pShaderCode, &pErrorMsg, pShaderTable); if (pErrorMsg) { errorMessage = (CHAR *)pErrorMsg->GetBufferPointer(); pErrorMsg->Release(); } else if (FAILED(hr)) { errorMessage = GetStringErrorMsg(hr); } else { errorMessage = ""; } if (FAILED(hr) || !pShaderCode) { if (pShaderCode) pShaderCode->Release(); return false; } // Create pixel shader. pD3Ddevice->CreateVertexShader( (DWORD*)pShaderCode->GetBufferPointer(), pShader ); pShaderCode->Release(); return true; }