显然,一个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...
}
在第二种情况下,我应该使用GL_TEXTURE1
还是GL_TEXTURE0
?
这个问题有没有文档说明呢?(我已经搜遍了opengl.org的手册和维基百科,但没找到任何关于这种情况的说明。例如,http://www.opengl.org/wiki/OpenGL_Context中提到纹理、缓冲区和程序对象是共享的,但没有提到纹理单元。)