2011-03-28 59 views
0

現在,我的文本小部件是雙緩衝的(當事件發生時,它將文本繪製成位圖)。除了調整窗口小部件的大小以外,這個功能很好。當我調整大小時,我al_destroy_bitmap並創建一個新的尺寸這很慢。大多數雙緩衝guis如Windows和Mac OSX如何避免此問題?調整雙緩衝小工具的大小?

感謝

回答

2

我最近在Flash中爲了碰撞檢測的目的做了雙緩衝。它有一個類似的問題,創建位圖數據結構相對較慢(這本身是令人傷心的,因爲分配原始內存應該很快,對於Flash和您的情況)。

我所做的只是緩存備份位圖並在可能的情況下重新使用它們。所以如果有人調整到250x250,我可以重新使用280x260的位圖。每當一個小部件完成位圖時,它就會釋放它以備再次使用,或者它們縮小並可以使用較小的一個。我對可以使用的總內存有一個限制,如果超過,會修剪未使用的位圖。

但是,你不必如此極端。首先要確保以較大的增量調整大小。例如,即使用戶僅調整了2個像素的大小,也可以將內部位圖大小調整爲50.這樣,您可以繼續重用位圖,直到用戶達到新的大小限制。

如果用戶縮小尺寸,則不必執行任何操作,因爲現有的位圖足夠大以便執行繪圖。當您將其複製到屏幕時,只需複製它的左上角(實際使用的部分)。

4

由支持位圖(或使用OGL或DX渲染)大部分部件已經鎖定了邊界,不允許調整。

那些經常遇到由此引起的速度問題。

您可以觀察調整大小的開始和結束,只有在完成位圖更新時或者只收到發生調整大小的事件時,請注意幾次背靠背並禁用位圖調整大小,直到它們停止進入(之後,比如說第一個5秒,等到沒有調整大小的事件到達250ms)。