在: C++\Win32 application (not in fullscreen)\DX9
如何在调整大小时快速且足够好地重绘窗口内容? Resize == user drag window border.
不同的方法:
- 在每个 WM_SIZE\WM_PAINT 上重置设备。足够的分辨率,但黑色条纹出现在快速高档。
- 在 WM_EXITSIZEMOVE 上重置设备并在 WM_ENTERSIZEMOVE 上暂停渲染。速度最快,但在调整大小时出现丑陋的黑色条纹。
- 在这种情况下找不到如何使用 dx9 的交换链
- 在调整大小时保持渲染和交换缓冲区;在 WM_EXITSIZEMOVE 上重置。正是 2010 SDK 的官方演示中发生的情况。看起来很快并且可以接受很好。但是 [突然] 在慢速计算机上再次出现黑色条纹。薄而稀有,但真实。实际上,那很奇怪:乍一看,每个 WM_SIZE 和/或 WM_PAINT 上的同步渲染和
Present(,,,)
排除了这一点。在第二个。也许我不明白一些重要的事情?
所以,当最后一个方法失败时,我决定在这里问。是否有可能以某种方式使 dx9 表面牢固地粘在窗口边框上。没有黑色条纹。更喜欢降低比例速度,但以某种方式与 DX 同步。
最佳答案
我为窗口的最大客户端大小分配了一个足够大的后备缓冲区,并在 WM_SIZE 上设置了一个与当前窗口客户端大小相匹配的视口(viewport)。然后我渲染以响应。仅从该视口(viewport)呈现。这样就不需要重置设备。
关于c++ - DirectX9 窗口在运行时调整大小而无需设备重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19596084/