【发布时间】:2013-11-30 14:22:13
【问题描述】:
我有一个运行良好的无限生成世界。每次生成新块时,它的高度图都会在第二个线程中生成。但是创建显示列表是不可能的,因为除了主线程之外的任何线程中都没有“GLContext”。这意味着每次生成一个新块时,都会出现一个小的延迟峰值,当同时生成几个块时,它会变得很明显。
我要问的是是否有办法在另一个线程中创建显示列表或顶点缓冲区对象,然后在主线程中绑定它或其他东西?
我已经尝试过使用 VBO,但与显示列表相比它非常慢。
【问题讨论】:
-
是的,您需要使用多个渲染上下文来执行此操作,因为在任何给定时刻只有一个线程可以拥有上下文的所有权。此外,您需要启用多个上下文之间的资源共享。但是一旦你这样做了,某些类型的对象(比如缓冲区对象和显示列表)就可以在上下文之间共享。请注意,每个上下文都有自己独特的状态机,您真正共享的唯一内容是数据和缓冲区/显示列表名称。
标签: java multithreading opengl lwjgl