可能是重复问题:
是否需要使用glDisableClientState?
在OpenGL中,我经常看到以下遵循这种模式的代码:
glUseProgram(prog_id);
// ... do some stuff
glUseProgram(0);
我知道
glUseProgram(0)
可以取消选择任何着色器程序。那么我的问题是取消选择着色器程序是什么意思?例如,在渲染循环中,为什么应该或不应该这样做?
while(render_loop_condition)
{
glUseProgram(prog_id);
// do some stuff
}
// various cleanup code
glUseProgram(0);
在使用多个着色器程序的渲染循环中,我能像这样做吗:
while(render_loop_condition)
{
glUseProgram(prog_id1);
// do some stuff
glUseProgram(prog_id2);
// do some other stuff
}
// various cleanup code
glUseProgram(0);
glUseProgram(0)
不会取消选择着色器程序。根据 OpenGL 规范,其结果是“未定义的”(http://www.opengl.org/sdk/docs/man/xhtml/glUseProgram.xml)。 - SystemParadox