我想爲我的C++ DirectX 11項目編譯我的項目中的.hlsl文件pre/offline/buildtime。 Visual Studio將.hlsl文件編譯爲.cso文件。我現在無法將SM 5.0的.cso文件讀入我的程序中以創建着色器。如何在Visual Studio 11中使用Shader Model 5.0編譯的着色器?
這裏是我不得不從預編譯.cso文件創建的Pixel Shader代碼:
ID3D11VertexShader* PS;
ID3DBlob* PS_Buffer;
D3DReadFileToBlob(L"PixelShader.cso", &PS_Buffer);
d3d11Device->CreatePixelShader(PS_Buffer->GetBufferPointer(), PS_Buffer->GetBufferSize(), NULL, &PS);
d3d11DevCon->PSSetShader(PS, 0, 0);
像素着色器僅僅是應該返回藍色像素。它已被編譯爲Shader Model 5.0,通過在Visual Studio 11中更改它的編譯設置。然而,在運行該程序時,儘管它們沒有編譯或運行時錯誤消息,但我試圖渲染的三角形不會顯示出來。
當在運行時使用編譯:
D3DCompileFromFile(L"PixelSHader.hlsl", 0, 0, "main", "ps_5_0", 0, 0, &PS_Buffer, 0);
代替D3DReadFileToBlob(..),但仍然沒有呈現三角形。
但是,當使用Shader Model 4.0時,無論是編譯時間還是運行時間,都會顯示一個藍色三角形來表示它的工作原理。
這是PixelShader.hlsl文件中的代碼。有沒有可能對Shader Model 5.0來說太過時了,是我問題的根源呢?
float4 main() : SV_TARGET
{
return float4(0.0f, 0.0f, 1.0f, 1.0f);
}
我使用Windows SDK庫而不是2010年6月的DirectX SDK。 我的顯卡是一款nVidia 8800 GTS。
8800GTS僅支持着色器模型4.400系列支持SM5。 –
謝謝你的回答。對於任何希望以任何方式在舊卡上測試SM 5.0的人,嘗試在創建設備和交換鏈時將D3D_DRIVER_TYPE設置爲D3D_DRIVER_TYPE_REFERENCE。但是它會非常慢: 'D3D11CreateDeviceAndSwapChain(NULL,D3D_DRIVER_TYPE_HARDWARE,NULL,NULL,D3D_FEATURE_LEVEL_11_1,1,D3D11_SDK_VERSION,&swapchaindesc,&swapchain_,&device_,NULL,&devicecontext _);'' – gundamb2