将预编译的着色器文件读取到ID3DBlob

时间:2015-08-20 02:25:58

标签: c++ pointers directx

我在阅读预先编译的着色器文件时遇到了一些问题,这可能是我在这里做的非常新手的错误。

我有一个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。

我在这里做错了什么?

感谢。

1 个答案:

答案 0 :(得分:2)

ReadShaderFileToBLob的'fileData'参数应为ID3D11Blob *&。

D3DReadFileToBlob会将你的'fileData'参数设置为一个有效值,但这只是函数的一个参数,它以与整数相同的方式落在函数末尾的范围之外。