1

好吧,我在很多地方都看过,但找不到问题的解决方案,我想在多线程渲染环境中同时渲染每个对象,或者像许多人所说的那样延迟渲染。

在我尝试实现多线程之前,我当前的系统根本无法工作。

延迟渲染的想法让我很困惑,我需要一个很好的解释来说明如何制作一个系统,以延迟的方式从具有指定纹理和着色器的数组中渲染对象,因为那里没有很好的解释,只有含义关键字...

4

1 回答 1

0

我会尝试,但我不确定您是否想要延迟上下文或延迟渲染。

据我了解,延迟渲染是渲染到纹理。Texture2D BindFlags 设置为 D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET(使用 SharpDX 版本)。所以它同时是一个着色器资源和一个渲染目标。

您可以将其设置为 outputmergerstage ,渲染内容,释放它,然后将其设置为着色器阶段(通常是像素),以执行您喜欢的任何操作,例如后处理或用作模型上的纹理。

如果要多线程,则使用延迟上下文。这是 DeviceContext 类型。你从 Device.ImmediateContext 实例化它。

我对此不太熟悉,所以这是我的理解。

您可以像使用即时上下文一样使用延迟上下文,除非您完成后导出“命令列表”并将其发送到您的即时上下文。还有更多,就像您必须在延迟上下文上设置所有着色器对象一样,因为它不会使用您在即时上下文上设置的内容。事实上,我相信它会擦除所有设置的即时上下文。

还要检查您的视频卡规格。仅仅因为它支持 dx11 并不意味着它支持多线程。这意味着它将在幕后伪造延迟的上下文内容。(是的,我的卡有点旧)

希望这可以帮助。

于 2015-05-06T20:16:45.097 回答