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

问题描述:

嗯,我在很多地方看过,我无法找到问题的解决方案,我想在多线程渲染环境中同时呈现每个对象,或者许多人称之为延迟渲染。如何使用延迟渲染呈现多个对象?

我目前的系统根本不工作,直到我试图实现多线程。

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

+0

延迟渲染与多线程单线程无关。它只是指定计算照明的时间和地点(不是在绘制对象时,而是在后处理步骤中)。 – 2015-04-05 17:55:56

+0

嗡嗡声,那是什么其他所有似乎说 – Anonixis 2015-04-05 20:24:28

+0

@NicoSchertler,你谈论“延期阴影”,是吗? – n0rd 2015-05-06 20:23:28

我会尝试,但我不知道你是否想要延期上下文或延期渲染。

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

你可以将它设置为outputmergerstage,Render stuff,释放它,然后将其设置为着色器阶段(通常为像素),以便进行后续处理或作为模型纹理使用。

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

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

你使用延迟的上下文,就像你会立即上下文,除非你完成你导出一个“命令列表”,并发送到你的immediateContext。除此之外,还有更多像这样的设计,因为它不会使用您在直接上下文中设置的内容,因此您希望将所有着色器对象设置在延迟上下文中。事实上,我认为它抹杀了所有环境的现实背景。

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

希望这有助于。