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

mjo*_*eer 6 c++ directx winapi directx-9

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

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

不同的方法:

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

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

cdo*_*ood 4

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