我正在使用DirectX9和着色器,我正在使用以下代码:
D3DXCreateEffectFromFile(DirectX::device, "shader.fx", 0, 0, D3DXSHADER_DEBUG, 0, &effect, &errors);
if(errors){
MessageBox(0, (char*)errors->GetBufferPointer(), 0, 0);
}
问题是,我知道我的着色器中存在错误/错误,但它没有弹出错误框,告诉错误是什么......有人能告诉我我做错了吗?
答案 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