OpenGL:呈现树状菜单的策略是什么?

时间:2012-09-24 08:56:22

标签: opengl treeview bufferedimage

因此,我们需要实现的是具有多个节点(最多数百个)的树状菜单。节点可以有子节点,然后可以展开/折叠。通过鼠标选择,还有鼠标背景闪电和背景闪电。 每个节点都有一个框,一个图标和一个非常大的文本,占据整个宽度屏幕。

这是一个已经有效的解决方案的例子:

enter image description here

基本上我是:

  • 第一次渲染文本,只是为了获得可能的背景突出显示的长度

  • 渲染框和图标纹理(是的,我知道,目前它们是颠倒的)

  • 第二次渲染文本,首先是所有粗体文本,然后是所有正常文本

此解决方案实际上具有相对可接受的性能影响。

然后我们尝试了另一种方法,即使用 g 图形java,绘制树状菜单并将其作为bufferedImage返回,最后创建一个大纹理渲染它。所有这些显然都是在每个节点崩溃/扩展和每次鼠标移动时完成的。

这表现得更好,但是 Java似乎在处理旧的bufferedImages时遇到了一些麻烦。事实上,ram消耗不断增加,并且强制垃圾收集只会通过放慢速度来改善内存增加,但仍然...... 此外,性能下降,因为垃圾收集器每次都被调用,而且看起来根本不亮。

所以我要问你的是:哪个是我最需要的策略?

将每个节点渲染到不同的纹理上也是可行的(实际上是三个:一个正常,一个用于鼠标悬停的浅色背景,另一个用于鼠标选择的正常背景)然后在每个显示()只需将所有这些纹理与当前树状菜单状态结合起来吗?

1 个答案:

答案 0 :(得分:1)

对于Java方法:如果BufferedImage的大小没有改变(树控件的宽度/高度),你不能重用它来避免垃圾回收吗?

对于GL方法,请确保最小化纹理切换。你如何渲染文字?您可以使用包含所有普通和粗体字母的单个大纹理,并为每个字母使用不同的纹理坐标。