DirectX 9 Shader不显示错误

时间:2014-01-02 13:02:24

标签: c++ shader directx-9

我正在使用DirectX9和着色器,我正在使用以下代码:

D3DXCreateEffectFromFile(DirectX::device, "shader.fx", 0, 0, D3DXSHADER_DEBUG, 0, &effect, &errors);

if(errors){
    MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0);
}

问题是,我知道我的着色器中存在错误/错误,但它没有弹出错误框,告诉错误是什么......有人能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:2)

我最近升级到DirectX 11,这就是我现在正在做的事情。它应该在DX9中保留。

char *compileErrors;
unsigned long bufferSize, i;
std::ofstream fout;


//get a pointer to the error message text buffer
compileErrors = (char*)(errorMessage->GetBufferPointer());

//get the length of the message
bufferSize = errorMessage->GetBufferSize();

//open a file to write the error message to
fout.open("shader-error.txt");

//write out the error message
for(i=0; i<bufferSize; i++)
{
    fout << compileErrors[i];
}

//close the file
fout.close();

//release the error message
errorMessage->Release();
errorMessage = nullptr; //or NULL, depending on your compiler

//pop a message up on the screen to notify the user to check the text file for compile errors
MessageBox(hwnd, "Error compiling shader.  Check shader-error.txt for message.", (LPCSTR)shaderFilename, MB_OK);
//shaderFilename and hwnd not defined in this code.  pass as a function parameter or something

此外,如果您已经删除了您创建的第一个窗口,则第一个参数为MessageBox的{​​{1}}将不会显示(例如,一旦您删除了所有内容的启动窗口)完成初始化)。不要在运行时调用NULL,只需隐藏窗口并在程序退出时释放它。隐藏窗口的代码:DestroyWindow