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

时间:2018-01-13 02:15:56

标签: c++ multithreading opengl glfw

我将尝试尽我所能解释,但这已经非常复杂了。

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

根据我的理解,必须创建2个共享其数据的OpenGL上下文(每个线程一个)使每个当前线程中的每个当前线程,并且现在应该可以将数据加载到一个并将其呈现在另一个。

我已经尝试过没有成功实现这一点,我的应用程序对我来说似乎很重要,只需显示代码并期望人们了解正在发生的事情。

如果可能的话,我喜欢以前有过这样经历的人向我解释一步一步实现这种并行化的方法。

1 个答案:

答案 0 :(得分:2)

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

说过没有什么可以阻止你在VAO VBO中加载数据纹理并将指针传递给你的openGL线程,然后通过代理使glBuffer和glTexture调用你的从属线程。