Intro :
Quand on compile un effet shader .fx, on a besoin de savoir où se situe l’erreur de compilation lorsque la compilation a échouée.
Explications :
Voici comment procéder avec le bout de code suivant :
#define ShowMessageBoxDXError(hr) char buf[2048]; \
sprintf(buf, "Error: %s error description: %s\n", DXGetErrorStringA(hr), \
DXGetErrorDescriptionA(hr)); \
MessageBoxA(nullptr, buf, "Erreur", MB_ICONHAND | MB_OK);
DWORD dwShaderFlags = D3D10_SHADER_ENABLE_STRICTNESS;
#if defined( DEBUG ) || defined( _DEBUG )
// Permet d'afficher les éventuelles erreurs de la compilation d'un shader
dwShaderFlags |= D3D10_SHADER_DEBUG;
#endif
#define SAFE_RELEASE(x) if (x != nullptr) { x->Release(); x = nullptr; }
ID3D10Blob* pBlob = nullptr;
// Pour la création du shader, on le compile
HRESULT hr = D3DX10CreateEffectFromFile(L"Effet.fx", NULL, NULL, "fx_4_0", dwShaderFlags, 0,
D3D10_RENDERER->GetDevice(), NULL,
NULL, &m_pEffect, &pBlob, NULL);
if (FAILED(hr))
{
if (pBlob)
{
// Affiche l'erreur de compilation du shader
MessageBoxA(NULL, (PCSTR)pBlob->GetBufferPointer(), "Erreur dans le fichier shader", MB_ICONHAND | MB_OK);
}
else
{
ShowMessageBoxDXError(hr);
}
SAFE_RELEASE(pBlob);
return false;
}
SAFE_RELEASE(pBlob);
Résumé :
On a expliqué comment procéder pour savoir et afficher où se situe l’erreur de compilation d’un fichier shader .fx.

