2011-05-14 16 views
0

我想製作一個蒙皮引擎,可以繪製帶有alpha混合的自定義窗口。也就是說,它將使用分層窗口(UpdateLayeredWindow)。一個典型的窗口將在其背景中包含幾十個其他位圖,範圍從10×10到300×150像素。在最糟糕的情況下,這些元素中的大多數會以平滑動畫高達30 fps。所有東西都是alpha混合的,我將使用Direct2D進行此操作(是的,我知道較早的Windows版本不支持它)。一般來說,Winamp的現代皮膚引擎是最接近的例子。Windows中的蒙皮引擎:只能一次繪製「髒」區域或整個窗口?

考慮到這一切,並考慮到現代個人電腦的性能,我可以重新繪製整個窗口每一幀或我必須限制某種類型的剪輯矩形?需要

回答

0

我對此有一些經驗。

如果您需要支持Windows XP,則使用UpdateLayeredWindow是解決此問題的唯一選擇。這個調用的文檔說它每次調用時都將整個位圖複製到屏幕上,而這個瓶頸在我的基準測試中顯示爲真正的限制因素。如果您的窗口是300x300,則每次更新都會支付該價格,即使您只是謹慎修改幾個像素也是如此。如果沒有真正的好處,過度優化渲染方面會非常容易,所以實施一些簡單的措施,然後決定是否需要優化。

如果您可以放棄對Windows XP的支持,那麼您可以完全避免使用UpdateLayeredWindow,並使用DwmExtendFrameIntoClientArea創建與分層窗口相同的效果。您將編寫更少的代碼,避免UpdateLayeredWindow瓶頸,並且D2D將更易於使用。

1

D2D你WM_PAINT消息呈現 Honneslty,使用IAnimation接口,只是讓D2D和Windows擔心多久重新繪製,但我會讓你知道,Winamp的是用土坯空氣,並layerd窗口完成與d2d導致問題。 (有點以爲你必須使用DXGI渲染目標,但隨着窗口被分層,它需要一個DC才能返回到最終繪製通話,因此它可以更新它的alpha通道)

相關問題