初學者在 Visual Studio 撰寫 Shader 常面臨:編譯無錯誤但執行失敗無錯誤訊息、調試困難、矩陣參數設定繁瑣。FX Composer 2.5 (NVIDIA) 提供:
下載:https://developer.download.nvidia.com/tools/Shader_Debugger/FX_Composer2_Shader_Debugger_Bundle_2.51.0827.1525.exe
安裝時選擇 No Commercial Use 免序號授權。
.fx 原始碼。float4x4 WorldViewProj : WorldViewProjection;
float4 mainVS(float3 pos : POSITION) : POSITION {
return mul(float4(pos.xyz, 1.0), WorldViewProj);
}
float4 mainPS() : COLOR {
return float4(1.0, 1.0, 1.0, 1.0); // 純白
}
technique technique0 {
pass p0 {
CullMode = None;
VertexShader = compile vs_1_1 mainVS();
PixelShader = compile ps_1_1 mainPS();
}
}
VS 專案載入 FX 檔時,必須 提供 ID3DXBuffer* error_buffer 參數捕獲編譯/語意錯誤:
ID3DXBuffer* error_buffer = nullptr;
HRESULT hr = D3DXCreateEffectFromFile(
g_pd3dDevice, "simple.fx", nullptr, nullptr,
dwShaderFlags, nullptr, &g_pEffect, &error_buffer);
if (error_buffer) {
MessageBoxA(nullptr, (char*)error_buffer->GetBufferPointer(), "FX Error", MB_OK);
error_buffer->Release();
}
if (FAILED(hr)) { /* 處理建立失敗 */ }
原文作者即因缺此步驟,遭遇 ps_1_1 不支援 的執行期靜默失敗。FX Composer 直接在編輯器底部顯示此類錯誤,極大降低除錯門檻。