当前位置:  开发笔记 > 后端 > 正文

在OpenGL中管理大量行的最有效方法是什么?

如何解决《在OpenGL中管理大量行的最有效方法是什么?》经验,为你挑选了2个好方法。

我正在开发一个简单的CAD程序,它使用OpenGL来处理屏幕渲染.屏幕上绘制的每个形状完全由简单的线段构成,因此即使是简单的绘图也最终会处理数千条单独的线条.

在我的应用程序和OpenGL之间传递此行集合中的更改的最佳方法是什么?有没有办法只更新OpenGL缓冲区中某些行的子集?

我在这里寻找一个概念性的答案.无需深入了解实际的源代码,只需要了解有关数据结构和通信的一些建议.



1> grepsedawk..:

您可以使用一种简单的方法,例如使用显示列表(glNewList/glEndList)

另一个稍微复杂的选项是使用顶点缓冲对象(VBO - GL_ARB_vertex_buffer_object).它们的优点是可以动态更改它们,而显示列表则不能.

这些基本上批量处理所有数据/转换并在GPU上执行(假设您正在使用硬件加速),从而提高性能.



2> Branan..:

顶点缓冲区对象可能就是您想要的.加载原始数据集后,可以使用以下方法修改现有块glBufferSubData().

如果你添加额外的线段并溢出缓冲区的大小,你当然必须创建一个新的缓冲区,但这与在某些东西增长时必须在C中分配一个新的,更大的内存块没什么不同.

编辑:显示列表上的几个注释,以及为什么不使用它们:

    在OpenGL 3.0中,不推荐使用显示列表,因此使用它们不能在3.0之前向前兼容(当然,2.1实现将会存​​在一段时间,因此根据您的目标受众,这可能不是问题)

    无论何时更改任何内容,都必须重建整个显示列表,如果事情经常更改,则会使显示列表的整个目的失效.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有