【问题标题】:Having trouble adding more Texture2D's as Pixel Shader resources in DirectX 11在 DirectX 11 中添加更多 Texture2D 作为像素着色器资源时遇到问题
【发布时间】:2017-02-25 01:43:08
【问题描述】:

我的应用程序是一个学校项目,我遇到了一个非常烦人的问题。我正在使用延迟渲染,并尝试将光的 pov 位置添加为新的 g 缓冲区纹理,并将深度缓冲区纹理添加为光通道中的着色器资源。我以完全相同的方式处理所有 g-buffer 纹理。

我的问题是这些新的着色器资源在 GPU 上无处可寻! 我正在使用 RenderDoc 来调试我的应用程序,在那里我可以看到所有内容都被写入这些新资源中,并且将它们绑定为着色器资源的调用看起来也不错,但我仍然只有 4 个资源和之前的一样。

我的代码一团糟,而且有很多(!)。因此,如果您想查看特定的内容以对我有所帮助,我可以将其发布。

如果我能得到一些关于如何调试此类问题的提示,我会非常高兴,如果有人知道问题所在,我会更高兴。

提前致谢!

【问题讨论】:

    标签: c++ directx directx-11 hlsl


    【解决方案1】:

    调试 DirectX 应用程序有两个基本的第一步:

    • 确保对于每个返回 HRESULT 的函数,您在运行时检查它。如果忽略返回是安全的,它将返回void。检查HRESULT 时不要使用== S_OK,而是使用FAILEDSUCCEEDED 宏。 “快速失败”错误的一个不错的选择是通过 ThrowIfFailed 使用 C++ 异常处理。

    • 启用 DirectX 调试设备并在调试输出窗口中查找错误、警告和其他消息。有关启用它的详细信息,请参阅Anatomy of Direct3D 11 Create DeviceDirect3D SDK Debug Layer Tricks

    这可能无法解决您的问题,但确实可以帮助避免一些愚蠢的错误,这些错误会花费您大量时间来追踪。

    如果您是 DirectX 开发新手,请查看DirectX Tool Kit tutorials

    对于调试 DirectX 11 应用程序,VS 2012 或更高版本中的 Visual Studio 图形诊断功能是一个不错的选择。您可能符合使用 VS 2013 或 VS 2015 Community edition 的许可证要求,它包含包括 VSGS 在内的所有功能。见MSDN

    【讨论】:

    • 感谢您的回复!正如您所描述的,我已经在几乎所有地方使用 HRESULT,但我会检查 SDK 调试层的东西。前一阵子尝试过,但要启动并运行它似乎需要做很多工作,但在这一点上,我愿意做任何事情。我尝试过使用visual studios图形调试(我猜这就是你的意思)但我不确定我应该如何从那里提取一些有用的信息。我会阅读如何正确使用它!再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多