2012-09-24 115 views
0

因此,我們需要實現的是一個包含多個節點(高達數百個)的樹形菜單。節點可以有孩子,然後可以展開/摺疊。還有一個鼠標懸停的背景閃電和鼠標選擇的背景閃電。 每個節點都有一個框,一個圖標和一個文字,可以非常大,佔據整個寬度屏幕。OpenGL:渲染樹形菜單的策略?

這是一個已經工作的解決方案的例子:

enter image description here

基本上我:

  • 渲染文本第一次,只是爲了得到一個可能的背景亮點的長度

  • 渲染框和圖標紋理(是的,我知道,它們現在是顛倒的)

  • 呈現文本的第二時間,首先大膽一個然後將所有正常的

此溶液實際上有一個相對可接受的性能的影響。

然後我們嘗試了另一種方式,即使用圖形java通過繪製樹形菜單並將其作爲bufferedImage返回,以在最後創建一個大紋理來渲染它。所有這些顯然都是在每個節點的collapse/expande和每次鼠標移動時完成的。

這表現好多了,但是 Java似乎有一些處理舊緩衝圖像的大麻煩。實際上ram消費量不斷增加,並迫使垃圾收集只會通過減緩內存的增加而略微提高,但仍然... 此外,由於垃圾收集器每次都被調用,並且看起來並不輕,所以性能下降。

那麼我要問你的是哪一個是我需要的最佳策略?

亦將也許可行上呈現不同的紋理(實際上有三個:一個正常,一個具有背景光爲鼠標和最後一個具有用於鼠標選擇一個正常的背景)的每個節點,然後在每一個顯示器( )只是將所有這些紋理與當前樹狀菜單狀態結合起來?

回答

1

對於Java方法:如果BufferedImage的大小(樹控件的寬度/高度)沒有改變,你不能重用它來避免垃圾回收?

對於GL方法,請確保最小化紋理開關。你如何呈現文字?您可以擁有一個包含所有常規字體和粗體字母的大型紋理,併爲每個字母使用不同的紋理座標。