2012-01-11 154 views
1

我有一個簡單的directx應用程序,它顯示一些預先轉換的幾何圖形,並且我希望窗口在調整大小時不閃爍,還希望圖形不能隨窗口大小拉伸。如何調整directx窗口的大小而不閃爍?

我注意到拉伸問題,如果我在WM_SIZING中重置設備,那麼繪圖的實際大小將保留。但是,每次調整窗口大小時重置設備似乎都是一項昂貴的操作。實際上我想用directx創建一些簡單的GUI,但調整窗口大小似乎可以擦除前端緩衝區數據,從而輕彈。我看到許多使用opengl的自定義gui應用程序允許調整大小,也允許調整WPF應用程序的大小。我怎麼做?

另外我想知道,如果我沒有辦法實現實時調整大小而不閃爍和重新定位繪製元素的效果,那麼WPF應用程序如何設法做到這一點?

另外我想問一下,如果您要使用directx設計GUI(非遊戲)系統,並且希望實施調整大小支持,就像任何其他應用程序一樣,您會選擇什麼?

回答

3

我想,當我調整其大小

不要處理WM_ERASEBACKGROUND和類似的消息窗口不閃爍。將所有繪畫留給DirectX,並且不會閃爍。任何閃爍基本上都是你(或你的控件)首先繪製的東西,然後DirectX將它繪製在它上面。

並且我還希望圖形不能隨窗口大小拉伸。

不可能(至少沒有黑客)。假設您使用DirectX 9,則必須重新初始化設備以更改其分辨率,而且速度很慢。

例如,我可以考慮一些解決方法來嘗試更改投影矩陣,以便在視口分辨率保持不變(無reinit)時,通過視口看到的內容反映窗口大小。

換句話說,您將視口初始化爲640x480並保留在此處,但如果用戶將窗口大小調整爲1024x768,則可將1024x768數量的東西包裝到640x480視口中,然後將其拉伸以填充1024x768窗口。

這應該給人以「調整」視口的印象,但由於實際上它會縮放,所以圖片質量會下降。這就是爲什麼在用戶完成窗口大小調整之後,您可能最終要重新審視視口。這樣,您可以先快速調整大小,然後再調整圖片質量。