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 :
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
#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.


