【问题标题】:Direct3D11 shaders compile flags problemsDirect3D11 着色器编译标志问题
【发布时间】:2021-02-21 15:46:26
【问题描述】:

我正在阅读 Frank Luna 的一本书,使用 DirectX 11 进行 3D 游戏编程。

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

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

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

【问题讨论】:

    标签: c++ visual-studio shader directx-11


    【解决方案1】:

    您应该尝试的第一件事是直接使用D3DCompiler API,而不是使用已弃用的 D3DX11 'wrapper'。目前,您正在使用 HLSL 编译器的“#43”2010 年 6 月版本,并且从那以后有许多错误修复。 Windows 10 SDK 提供了“#47”版本的 HLSL 编译器。

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

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

    Frank 的书非常好,但它是在 DirectX SDK 被弃用之前出版的。相关说明见this blog post

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多