首页 > 解决方案 > 从多个线程渲染到同一个目标

问题描述

我正在 Windows 上处理一个旧的 C++ 项目,我正在升级应用程序的 DirectX 渲染引擎(使用 DX11)。我制作的新引擎目前与旧引擎共存,但它在不同的线程中运行,并且有自己的 DX 设备和上下文。到目前为止,我一直在使用两个单独的窗口来同时显示新旧渲染过程的结果,这使我能够验证新引擎是否正确地复制了旧引擎的行为。

现在我想合并这些窗口并在运行时在它们之间进行交换,即我会挂钩按钮按下或其他一些控件来暂停一个渲染线程并(重新)启动另一个。两者都会将它们的结果绘制到同一个窗口(即使用相同的 HWND 来创建渲染目标和交换链),但任何时候只有一个线程处于活动状态。一个很好的类比是一些重新制作的游戏,它们可以让你在新旧图形之间切换。

实现这一目标的最理想方法是什么?我正在考虑进行“热交换”,即让一个线程开始渲染,甚至无需等待另一个线程完成,因为我们知道它将在下一帧停止,我不需要它们一起工作。这会带来崩溃或任何其他问题的风险吗?如果在交换期间它会导致一些不正确的帧,那么我不介意。

标签: c++windowsmultithreadingdirectx-11

解决方案


我对其进行了测试,据我所知没有任何不良影响,除了如果两个线程碰巧同时尝试绘制会出现一些闪烁。


推荐阅读