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

C# 如何使用延迟渲染渲染多个对象?,c#,directx,sharpdx,deferred-rendering,C#,Directx,Sharpdx,Deferred Rendering,我看了很多地方,我找不到解决问题的方法,我想在多线程渲染环境中同时渲染每个对象,或者像很多人所说的延迟渲染 在我尝试实现多线程之前,我当前的系统根本无法工作 延迟渲染的想法让我很困惑,我需要一个很好的解释,说明如何创建一个系统,以延迟的方式渲染具有指定纹理和着色器的数组中的对象,因为没有很好的解释,只有关键字的含义…我会尝试,但我不确定您是想要延迟上下文还是延迟呈现 据我所知,延迟渲染是渲染到纹理。 Texture2D BindFlags设置为 D3D11_BIND_SHADER_RESOURC

我看了很多地方,我找不到解决问题的方法,我想在多线程渲染环境中同时渲染每个对象,或者像很多人所说的延迟渲染

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


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

我会尝试,但我不确定您是想要延迟上下文还是延迟呈现

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

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

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

我不太熟悉这一点,所以这就是我所理解的

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

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


希望这有帮助

延迟呈现根本与多订单单线程无关。它只是指定计算照明的时间和地点(不是在绘制对象时,而是在后处理步骤中)。哼,其他一切似乎都是这样say@NicoSchertler,你说的是“延迟着色”,不是吗?@n0rd是的,我说的是。延迟渲染和延迟着色是同义词。