6

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

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

不同的方法:

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

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

4

1 回答 1

4

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

于 2013-10-30T08:50:23.090 回答