不同OpenGL上下文下glGenBuffers生成的对象名称是否全局唯一?
OpenGL上下文与缓冲区对象名称的常见疑问解答
glGenBuffers()生成的对象名称仅在各自上下文内唯一,并非全局唯一。每个OpenGL上下文都维护着独立的对象名称空间,不同上下文的名称空间完全隔离,彼此互不干扰。- 两个独立的OpenGL上下文完全可能生成相同的非0对象名称。因为每个上下文的名称分配逻辑是独立运行的,没有跨上下文的同步机制或全局约束,所以出现同名是很正常的情况。
- 即使两个上下文生成了相同的对象名称,也不代表它们共享这个对象。相同数值的名称在不同上下文中对应的是完全独立的缓冲区对象——各自拥有独立的内存空间、数据状态,彼此没有任何关联。
- 当其中一个上下文调用
glDeleteBuffers(1, &buffer_)时,只会释放该上下文内部与这个名称绑定的缓冲区对象,回收对应的资源。另一个上下文中同名的缓冲区对象不会受到任何影响,依然可以正常进行渲染操作。
内容的提问来源于stack exchange,提问作者MarsaPalas
相关产品推荐
相关产品推荐

