我有一个无限生成的世界,工作得非常好。每次生成新块时,它的高度图都在第二个线程中生成。但是创建显示列表是不可能的,因为在任何线程中都存在“没有GLContext”而是主线程。这意味着每次生成一个新的块时,都会出现一个小的滞后尖峰,当一次生成一些时,就会变得明显。
我要问的是,是否有办法在另一个线程中创建显示列表或顶点缓冲区对象,然后将其绑定在主线程中?
我已经用VBO尝试了它,但与显示列表相比它非常慢。
答案 0 :(得分:1)
一种可能更简单的方法是使用第二个线程在内存中生成VBO数据,然后使用异步数据传输到主线程中的GPU(使用现在无处不在的GL_ARB_pixel_buffer_object)。
现在,从VBO渲染数据应该相当快。请使用glDrawElements
,glMultiDrawElements
,glPrimitiveRestartIndex
以及其他家庭成员,以尽量减少绘制调用的次数。然后根本不需要显示列表。