如何使用延迟渲染渲染多个对象?

时间:2015-04-05 00:50:27

标签: c# directx sharpdx deferred-rendering

我已经查看了很多地方,我无法找到问题的解决方案,我想在多线程渲染环境中同时渲染每个对象,或者像许多人所说的那样延迟渲染。

在我尝试实现多线程之前,我的当前系统根本不起作用。

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

1 个答案:

答案 0 :(得分:0)

我会尝试,但我不确定您是否需要延迟上下文或延迟呈现。

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

你可以将它设置为outputmergerstage,渲染东西,释放它,然后将它设置为着色器阶段(通常是像素),以便做任何你喜欢的事情,例如后期处理或用作模型上的纹理。

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

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

你使用延迟上下文就像你将立即上下文一样,除非你完成了导出“命令列表”并将其发送到你的immediateContext。还有更多这样的东西,你可以在延迟上下文中设置所有着色器对象,因为它不会使用你在immediatecontext上设置的内容。事实上,我相信它会消除所有设置的即时背景。

还要检查您的显卡规格。仅仅因为它支持dx11并不意味着它支持多线程。这意味着它将伪装幕后的延迟上下文。 (是的,我的卡有点老了)

希望这会有所帮助。