将读取预编译的着色器文件发送到 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' 参数设置为有效值,但这只是函数的一个参数,它在函数末尾超出范围,就像整数一样。
我在读取预编译的着色器文件时遇到了一些问题,这可能是我在这里犯的新手错误。
我有一个应该加载 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' 参数设置为有效值,但这只是函数的一个参数,它在函数末尾超出范围,就像整数一样。