DirectX9窗口在运行时调整大小而不重置设备

时间:2013-10-25 17:32:39

标签: c++ winapi directx directx-9

In:C ++ \ Win32应用程序(不是全屏)\ DX9

如何在调整大小时快速重新绘制窗口内容并且足够好? 调整大小==用户拖动窗口边框。

不同的方法:

  • 在每个WM_SIZE \ WM_PAINT上重置设备。足够的分辨率,但快速高档时会出现黑色条纹。
  • 在WM_EXITSIZEMOVE上重置设备并在WM_ENTERSIZEMOVE上暂停渲染。最好的速度,但调整大小时的丑陋〜黑色条纹。
  • 在这种情况下无法找到如何使用dx9的交换链
  • 在调整大小期间保持渲染和交换缓冲区;在WM_EXITSIZEMOVE上重置。正是从2010 SDK官方演示中发生的事情。看起来快速,可接受的好。但[突然]慢慢的电脑黑条纹再次出现。薄而罕见,但真实。实际上,非常奇怪:每个WM_SIZE和\或WM_PAINT上的同步渲染和Present(,,,)乍一看都排除了这一点。在第二个。也许我不明白重要的事情?

所以,当最后一个方法失败时,我决定在这里问。是否有可能使dx9表面牢固地粘在窗口边框上。没有黑色条纹。喜欢减慢缩放速度,但以某种方式与DX同步。

1 个答案:

答案 0 :(得分:4)

我为窗口的最大客户端大小分配了一个足够大的后备缓冲区,并设置了一个与WM_SIZE上当前窗口客户端大小相匹配的视口。然后我渲染到resp。仅从该视口出现。这样就不需要重置设备了。