DirectX 9 Shader не отображает ошибки

0

Я работаю над DirectX9 и шейдерами, и я использую следующий код:

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

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

Проблема в том, что я знаю, что в моем шейдере есть ошибка/ошибка, но она не выдает окно с ошибкой, сообщающее, что такое ошибка... Может ли кто-нибудь сказать мне, что я делаю неправильно?

  • 0
    Просто проверьте errors с перерывом отладки. Он расскажет вам его содержание. Если вы хотите узнать об успехе, проверьте код возврата D3DXCreateEffectFromFile .
  • 0
    извините, что вы имеете в виду под отладкой?
Показать ещё 2 комментария
Теги:
shader
directx-9

1 ответ

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 с первым параметром NULL не будет отображаться, если вы уже удалили первое созданное вами окно (например, всплывающее окно, которое вы освободили после завершения всей инициализации). Вместо вызова DestroyWindow во время выполнения просто DestroyWindow окно и отпустите его, когда программа выйдет. Код для скрытия окна: ShowWindow(splashWnd, WS_HIDE);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню