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

3

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

1个回答

4
在回答主要问题之前,让我们先澄清一些错误信息:

我知道你只能在创建了OpenGL上下文的线程中调用OpenGL函数。

这不是真的。您必须只在上下文当前所在的线程中调用OpenGL函数。您可以在不同的线程中使OpenGL上下文成为当前上下文(这将自动使其在以前的线程中不是当前上下文。OpenGL上下文在同一时间只能在一个线程中为当前上下文)。而且,您可以创建共享对象的多个上下文。每个这样的上下文可以在不同的线程中为当前上下文。
现在来看这个问题。是的,您完全可以在另一个线程中随意使用映射指针。但是,正如您所说,您必须使用适当的同步机制让原始线程知道您已经完成了。

谢谢 - 我已经编辑了问题,以更好地表达我的假设。 - jaymmer - Reinstate Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接