好吧,我在很多地方都看过,但找不到问题的解决方案,我想在多线程渲染环境中同时渲染每个对象,或者像许多人所说的那样延迟渲染。
在我尝试实现多线程之前,我当前的系统根本无法工作。
延迟渲染的想法让我很困惑,我需要一个很好的解释来说明如何制作一个系统,以延迟的方式从具有指定纹理和着色器的数组中渲染对象,因为那里没有很好的解释,只有含义关键字...
好吧,我在很多地方都看过,但找不到问题的解决方案,我想在多线程渲染环境中同时渲染每个对象,或者像许多人所说的那样延迟渲染。
在我尝试实现多线程之前,我当前的系统根本无法工作。
延迟渲染的想法让我很困惑,我需要一个很好的解释来说明如何制作一个系统,以延迟的方式从具有指定纹理和着色器的数组中渲染对象,因为那里没有很好的解释,只有含义关键字...
我会尝试,但我不确定您是否想要延迟上下文或延迟渲染。
据我了解,延迟渲染是渲染到纹理。Texture2D BindFlags 设置为 D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET(使用 SharpDX 版本)。所以它同时是一个着色器资源和一个渲染目标。
您可以将其设置为 outputmergerstage ,渲染内容,释放它,然后将其设置为着色器阶段(通常是像素),以执行您喜欢的任何操作,例如后处理或用作模型上的纹理。
如果要多线程,则使用延迟上下文。这是 DeviceContext 类型。你从 Device.ImmediateContext 实例化它。
我对此不太熟悉,所以这是我的理解。
您可以像使用即时上下文一样使用延迟上下文,除非您完成后导出“命令列表”并将其发送到您的即时上下文。还有更多,就像您必须在延迟上下文上设置所有着色器对象一样,因为它不会使用您在即时上下文上设置的内容。事实上,我相信它会擦除所有设置的即时上下文。
还要检查您的视频卡规格。仅仅因为它支持 dx11 并不意味着它支持多线程。这意味着它将在幕后伪造延迟的上下文内容。(是的,我的卡有点旧)
希望这可以帮助。