2013-10-25 31 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