是否可以在非主线程中创建openGL VBO /显示列表

时间:2013-11-30 14:22:13

标签: java multithreading opengl lwjgl

我有一个无限生成的世界,工作得非常好。每次生成新块时,它的高度图都在第二个线程中生成。但是创建显示列表是不可能的,因为在任何线程中都存在“没有GLContext”而是主线程。这意味着每次生成一个新的块时,都会出现一个小的滞后尖峰,当一次生成一些时,就会变得明显。

我要问的是,是否有办法在另一个线程中创建显示列表或顶点缓冲区对象,然后将其绑定在主线程中?

我已经用VBO尝试了它,但与显示列表相比它非常慢。

1 个答案:

答案 0 :(得分:1)

一种可能更简单的方法是使用第二个线程在内存中生成VBO数据,然后使用异步数据传输到主线程中的GPU(使用现在无处不在的GL_ARB_pixel_buffer_object)。

现在,从VBO渲染数据应该相当快。请使用glDrawElementsglMultiDrawElementsglPrimitiveRestartIndex以及其他家庭成员,以尽量减少绘制调用的次数。然后根本不需要显示列表。