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

Issue reading pre-compiled shader file to ID3DBlob

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

我有一个应该加载 cso 文件的 ReadShaderFileToBLob 函数:

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指针,在class中是私有成员。在执行期间,

 hr = D3DReadFileToBlob(sw, &fileData); 

调用返回成功。 然而,在LoadVertexShader函数中,vertexShaderBytecode仍然是null。

我做错了什么?

谢谢。

ReadShaderFileToBLob 的 'fileData' 参数应该是 ID3D11Blob*&.

D3DReadFileToBlob 会将您的 'fileData' 参数设置为有效值,但这只是函数的一个参数,它在函数末尾超出范围,就像整数一样。