我编写了一个应用程序,可以在 OpenGL、DirectX 9 和 DirectX 11 之间切换进行渲染,而无需重新启动或重新创建窗口。在 OpenGL 和 DirectX 9 以及 DirectX 11 模式之间切换效果很好,但是在使用 DirectX 11 后,其他渲染模式不再有效。
\n\n释放所有 DirectX 11 接口后,窗口仍然显示最后渲染的帧,甚至在调整窗口大小时也会正确更新。可以创建 DirectX 9 设备并且 Present 调用成功,但是,我看到的只是 DirectX 11 绘制的最后一帧。
\n\nI\xe2\x80\x99ve 使用 IDXGIDebug::ReportLiveObjects 来确保所有 DirectX 11 接口实际上已发布。我\xe2\x80\x99ve也尝试了IDXGIFactory::MakeWindowAssociation,但它并没有\xe2\x80\x99解决问题。
\n\n为什么最后一帧要重画,是谁重画的?我如何摆脱它并恢复窗口的原始行为。
\n\n顺便说一句,创建一个新窗口是一种解决方法,但我想对 DirectX 9/11 和 OpenGL 使用相同的窗口。
\n问题的原因是DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL。http://msdn.microsoft.com/en-us/library/windows/desktop/hh706346(v=vs.85).aspx说
使用翻转模型时,只有翻转模型交换链中运行时传递给 DWM 的 Direct3D 内容可见。运行时会忽略所有其他 bitblt 模型 Direct3D 或 GDI 内容更新。
这就解释了为什么在翻转顺序模式下使用 DirectX 11 后,我无法使用 DirectX 9 获得任何输出。
| 归档时间: |
|
| 查看次数: |
1814 次 |
| 最近记录: |