Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在Visual Studio 11中使用Shader Model 5.0编译的着色器?_C++_Directx_Offline_Hlsl_Build Time - Fatal编程技术网

C++ 如何在Visual Studio 11中使用Shader Model 5.0编译的着色器?

C++ 如何在Visual Studio 11中使用Shader Model 5.0编译的着色器?,c++,directx,offline,hlsl,build-time,C++,Directx,Offline,Hlsl,Build Time,我试图在我的C++项目中使用.HLSL文件,为我的C++ DirectX 11项目编译。Visual Studio将.hlsl文件编译为.cso文件。我现在无法将SM 5.0的.cso文件读取到我的程序中以创建着色器 以下是我必须从预编译的.cso文件创建像素着色器的代码: ID3D11VertexShader* PS; ID3DBlob* PS_Buffer; D3DReadFileToBlob(L"PixelShader.cso", &PS_Buffer); d3d11Device

我试图在我的C++项目中使用.HLSL文件,为我的C++ DirectX 11项目编译。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中更改其编译设置,已将其编译为着色器模型5.0。但是,在运行程序时,我尝试渲染的三角形不会显示,尽管它们没有生成或运行时错误消息

在运行时使用以下命令进行编译:

D3DCompileFromFile(L"PixelSHader.hlsl", 0, 0, "main", "ps_5_0", 0, 0, &PS_Buffer, 0);
仍然没有渲染三角形,而不是D3FileToBlob(..)

然而,当使用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。

着色器型号5受GeForce 400系列和更新的nVidia卡支持,而Radeon 5000系列和更新的AMD卡支持。GeForce 8800仅支持着色器模型4,这就是着色器不运行的原因。为了解决这个问题,您可以使用参考设备(通过使用D3D\U驱动程序\U类型\U参考),但这将非常缓慢。此外,如果您有Windows 8预览版(增加了对D3D_FEATURE_LEVEL_11_0的WARP支持),则可以使用WARP设备,该设备的性能将优于参考设备,但在硬件设备上仍无法运行。

8800GTS仅支持着色器模型4。400系列支持SM5。谢谢,这就是答案。对于任何希望以任何方式在旧卡上测试SM 5.0的人,请在创建设备和交换链时尝试将D3D_DRIVER_TYPE设置为D3D_DRIVER_TYPE_引用。但是它会非常慢:
D3D11创建设备和交换链(NULL,D3D驱动程序类型硬件,NULL,NULL,D3D功能级别11,1,D3D11,SDK版本,&swapchaindesc,&swapchain,&device,NULL,&devicecontext)