从另一个线程更新映射的OpenGL缓冲区

问题描述:

OpenGL函数只能从OpenGL上下文当前所在的线程调用。此限制是否适用于使用glMapBuffer/glMapBufferRange更新数据,即可以映射(缓冲区的一个区域),然后从另一个线程读取/写入该区域?当然,假设映射(和解映射)函数是从渲染线程调用的。从另一个线程更新映射的OpenGL缓冲区

回答的主要问题之前,让我们讨论一些误传:

我知道,你应该只调用OpenGL函数中创建OpenGL上下文的线程。

这是不正确的。您只能在上下文最新的线程上调用OpenGL函数。你可以在不同的线程中创建一个OpenGL上下文(这会自动使其在前一个线程中不是最新的,OpenGL上下文只能同时在一个线程中处于最新状态)。您可以创建多个共享对象的上下文。每个这样的上下文可以在不同的线程中当前。

现在到了这个问题。是的,你完全可以*地使用映射的指针,但是你希望从另一个线程。虽然如你所说,你必须使用适当的同步机制让原始线程知道你已经完成了。

+0

谢谢 - 我已经编辑了这个问题来掩盖^ H^H^H^H^H^H^H^H来更好地陈述我的假设 – jaymmer