2013-10-25 63 views
6

在:C++ \ Win32应用程序(不是全屏)\ DX9DirectX9的调整窗口在运行时无设备重置

我如何重绘窗口的内容中调整速度不够快和好?调整大小==用户拖动窗口边框。

不同的方法:在每个WM_SIZE \ WM_PAINT

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

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

回答

4

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

+0

是的,很好的解决方案。我会试试看。但是,多显示器配置和多重采样可能存在一些问题。 – mjollneer

+0

当然。但是,您始终可以通过处理WM_GETMINMAXINFO来自由指定窗口的最大大小。我还没有使用我的多抽样解决方案。 – cdoubleplusgood