c++ - 从多个线程渲染到同一个目标
问题描述
我正在 Windows 上处理一个旧的 C++ 项目,我正在升级应用程序的 DirectX 渲染引擎(使用 DX11)。我制作的新引擎目前与旧引擎共存,但它在不同的线程中运行,并且有自己的 DX 设备和上下文。到目前为止,我一直在使用两个单独的窗口来同时显示新旧渲染过程的结果,这使我能够验证新引擎是否正确地复制了旧引擎的行为。
现在我想合并这些窗口并在运行时在它们之间进行交换,即我会挂钩按钮按下或其他一些控件来暂停一个渲染线程并(重新)启动另一个。两者都会将它们的结果绘制到同一个窗口(即使用相同的 HWND 来创建渲染目标和交换链),但任何时候只有一个线程处于活动状态。一个很好的类比是一些重新制作的游戏,它们可以让你在新旧图形之间切换。
实现这一目标的最理想方法是什么?我正在考虑进行“热交换”,即让一个线程开始渲染,甚至无需等待另一个线程完成,因为我们知道它将在下一帧停止,我不需要它们一起工作。这会带来崩溃或任何其他问题的风险吗?如果在交换期间它会导致一些不正确的帧,那么我不介意。
解决方案
我对其进行了测试,据我所知没有任何不良影响,除了如果两个线程碰巧同时尝试绘制会出现一些闪烁。
推荐阅读
- python - 如何计算细胞核量?
- javascript - v-for 在 IE11 上产生错误
- python - 尝试遍历多个 PDF 文件并在两个搜索条件之间提取文本
- sql-server - 在 SQL Server 中使用 T-SQL 操作登录注销数据
- android - 如何清理不需要的 imgly 覆盖
- excel - 随着用户剪切/粘贴行,不断地重新排序范围的 ID 序列
- c# - 使用 Interop.Excel 从 Open XMl Excel 中导出 Excel 图表作为图像
- python - ValueError:检查输入时出错:预期 dropout_5_input 有 2 维,但得到了形状为 () 的数组
- javascript - 在 React Native 中为函数设置顺序
- android - app:layout_goneMarginLeft="" 对约束布局中的视图有什么作用?