OpenGL 在与渲染线程不同的线程中创建和加载 VBO 信息

OpenGL create and load VBO information in a different thread than the rendering thread

我会尽力解释,但这已经很复杂了。

给定 2 个线程主线程和从线程,我需要主线程不间断地渲染,从线程执行任何和所有 VBO 加载操作。换句话说,从线程创建 VAO,VBO,甚至纹理,并且是从线程调用 glBufferData() 将信息传递到 VRAM。

根据我的理解,必须创建 2 个共享数据的 OpenGL 上下文(每个线程一个)使每个线程都处于各自的线程中,现在应该可以在一个中加载数据并在另一个中渲染数据.

我尝试过实现这个但没有成功,而且我的应用程序对我来说似乎很大,只是显示代码并希望人们理解发生了什么。

如果可能的话,我希望有过类似经验的人向我逐步解释实现这种并行化的方法。

我的建议是从一个线程进行所有 OpenGL 调用。隐式 OpenGL 上下文是特定于线程的,试图解决这个问题将需要访问整个平台特定的扩展,并且可能存在错误。

话虽如此,没有什么可以阻止您将数据加载到 VAO 的 VBO 和纹理中,并将指向内存的指针传递给您的 openGL 线程,然后通过代理为您的从属线程调用 glBuffer 和 glTexture。