smo*_*ris 4 opengl 3d macos graphics core-graphics
显然,OpenGL纹理单元的范围并不比单个进程宽 - 在同一系统上,每个进程可以有多个进程glActiveTexture?(GL_TEXTURE0); glBindTexture(...);,并且工作正常 - 纹理不会在进程之间混淆.
但是,在单个进程中的共享OpenGL上下文中,纹理单元是独立的还是共享的?
换句话说,我可以期待这个吗?
// Create a base context and bind one texture to GL_TEXTURE0
CGLContextObj baseContext = createGLContext(NULL);
{
CGLContextObj cgl_ctx = baseContext;
glActiveTexture?(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 1);
// ...render continuously...
}
// On a separate thread, create a context shared with baseContext and bind a _different_ texture to GL_TEXTURE0
{
CGLContextObj cgl_ctx = createGLContext(baseContext);
glActiveTexture?(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 2);
// ...render continuously...
}
Run Code Online (Sandbox Code Playgroud)
......或者,在第二种情况下,我应该使用GL_TEXTURE1吗?
这记录在哪里?(我已经浏览了opengl.org手册和wiki,但没有找到解释这个场景的任何内容.例如,http://www.opengl.org/wiki/OpenGL_Context说纹理,缓冲区和程序对象是分享,但没有说明纹理单位.)
有效地,上下文资源共享仅限于实际定义数据存储的对象,并且在大多数窗口系统实现中默认禁用.
每个上下文都维护着自己的状态机,在这个例子中你唯一分享的就是纹理对象本身.也就是说,您可以使用相同的纹理名称(GLuintID)来引用上下文之间的纹理,但纹理单元状态对于每个上下文都是完全唯一的.
如果从纹理A绑定到单元0的一个上下文发出绘制命令,则着色器将在纹理单元0中采样时使用纹理A.如果从纹理B绑定到单元0的上下文中发出相同的绘制命令,然后着色器将采样纹理B.
| 归档时间: |
|
| 查看次数: |
494 次 |
| 最近记录: |