Direct3D11 着色器编译标志问题

Direct3D11 shaders compile flags problems

我正在阅读 F运行k Luna 3D Game Programming with DirectX 11 一书。

我正在使用 D3DX11CompileFromFileW() 函数来编译带有标记 (D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION) 的着色器它在工作,但在新项目和一些更高级的程序中 虽然项目编译没有错误,但它不显示对象。

经过大量研究后,我意识到如果我使用标志 (D3D10_SHADER_DEBUG) 或只是 (D3D10_SHADER_SKIP_OPTIMIZATION) 它工作正常,但当我将它们组合在一起时不起作用 (即 D3D10_SHADER_DEBUG | D3D10_SHADER_SKIP_OPTIMIZATION )

我也试过 fxc 编译器,我 运行 遇到了同样的问题。 有没有什么解决方案可以一起使用这些标志,或者我可以只使用其中一个(我在很多项目中一起使用过它们,但最近没有。这本书也一起使用它们)。

您应该尝试的第一件事是直接使用 D3DCompiler API 而不是使用已弃用的 D3DX11 'wrapper'。目前您使用的是 2010 年 6 月发布的“#43”HLSL 编译器,此后有很多 bug-fixes。 Windows 10 SDK 提供“#47”版本的 HLSL 编译器。

请注意,对于 VS 2012 或更高版本,您需要使用一些特殊设置来确保您的 include/lib 路径正确,以便将旧版 DirectX SDK 与现代 Windows 10 SDK 混合使用许多更新的,重叠的 headers。参见 Microsoft Docs

有关 D3DCompile API 的更多信息,请参阅 this blog post

Frank's book is excellent, but it was published before the DirectX SDK was deprecated. See this blog post for relevant notes.