我在阅读预先编译的着色器文件时遇到了一些问题,这可能是我在这里做的非常新手的错误。
我有一个ReadShaderFileToBLob函数应该加载cso文件:
void cShader::ReadShaderFileToBLob(std::string File, ID3DBlob* fileData)
{
HRESULT hr = S_OK;
std::wstring stemp = std::wstring(File.begin(), File.end());
LPCWSTR sw = stemp.c_str();
hr = D3DReadFileToBlob(sw, &fileData);
}
我从LoadVertexShader函数调用该函数:
void cShader::LoadVertexShader(std::string vertexShaderFileName)
{
// class member that store file name
m_vertexShaderFile = vertexShaderFileName;
HRESULT hr = S_OK;
ReadShaderFileToBLob(m_vertexShaderFile, vertexShaderBytecode);
hr = wwRenderManager::Get().GetDirect3DDevice()->CreateVertexShader(
vertexShaderBytecode->GetBufferPointer(),
vertexShaderBytecode->GetBufferSize(),
nullptr,
&m_vertexShader);
if (FAILED(hr))
{
vertexShaderBytecode->Release();
wwASSERT(wwFALSE, "Failed to create vertex shader.");
}
}
vertexShaderBytecode是一个ID3DBlob指针,它是类中的私有成员。在执行期间,
hr = D3DReadFileToBlob(sw, &fileData);
电话正在恢复成功。 但是,在LoadVertexShader函数中,vertexShaderBytecode仍为null。
我在这里做错了什么?
感谢。
答案 0 :(得分:2)
ReadShaderFileToBLob的'fileData'参数应为ID3D11Blob *&。
D3DReadFileToBlob会将你的'fileData'参数设置为一个有效值,但这只是函数的一个参数,它以与整数相同的方式落在函数末尾的范围之外。