使用DirectX 11后重置窗口

时间:2013-12-18 00:18:49

标签: directx-11 dxgi

我编写了一个可以在OpenGL,DirectX 9和DirectX 11之间切换的应用程序,无需重新启动或重新创建窗口即可进行渲染。在OpenGL和DirectX 9以及DirectX 11模式之间切换效果很好,但是,在使用DirectX 11之后,其他任何渲染模式都不再有效。

释放所有DirectX 11界面后,窗口仍显示最后渲染的帧,甚至在调整窗口大小时也会正确更新。可以创建DirectX 9设备并且Present调用成功,但是,我看到的只是DirectX 11绘制的最后一帧。

我使用了IDXGIDebug :: ReportLiveObjects来确保所有DirectX 11接口都已实际发布。我也尝试过IDXGIFactory :: MakeWindowAssociation,但它没有解决问题。

为什么最后一帧被重新粉刷,谁重新粉刷它?如何摆脱它并恢复窗口的原始行为。

顺便说一句,创建一个新窗口将是一种解决方法,但我想对DirectX 9/11和OpenGL使用相同的窗口。

1 个答案:

答案 0 :(得分:2)

问题的原因是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获得任何输出。