我正在尝试为我的 C++ DirectX 11 项目编译项目预/离线/构建时中的 .hlsl 文件。Visual Studio 将 .hlsl 文件编译为 .cso 文件。我现在无法将 SM 5.0 的 .cso 文件读入我的程序以创建着色器。
这是我必须从预编译的 .cso 文件创建像素着色器的代码:
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);
像素着色器只是应该返回蓝色像素。通过在 Visual Studio 11 中更改其编译设置,它已被编译为 Shader Model 5.0。但是,在运行程序时,尽管没有构建或运行时错误消息,但我尝试渲染的三角形并未显示。
在运行时编译时使用:
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。