OpenGL函数只能从OpenGL上下文是最新的线程中调用。此限制是否适用于使用glMapBuffer
/ glMapBufferRange
更新数据,即我可以映射(区域)缓冲区然后在另一个线程中读取/写入该区域吗?当然,假设从渲染线程调用映射(和取消映射)函数。
答案 0 :(得分:3)
在回答主要问题之前,让我们介绍一些错误信息:
我知道您应该只在创建OpenGL上下文的线程中调用OpenGL函数。
事实并非如此。您必须仅在上下文为当前的线程上调用OpenGL函数。您可以在不同的线程中使OpenGL上下文处于当前状态(这将自动使其在前一个线程中不是最新的.OpenGL上下文只能同时在一个线程中是当前的)。您可以创建共享对象的多个上下文。每个这样的上下文可以在不同的线程中是最新的。
现在问题。是的,您可以完全自由地使用映射指针,但是您希望从另一个线程使用。但是,正如您所说,您必须使用适当的同步机制让原始线程知道您已完成。