OpenGL为什么要取消选择着色器程序?

时间:2012-10-08 01:31:08

标签: opengl shader opengl-3

  

可能重复:
  Is glDisableClientState required?

在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);

1 个答案:

答案 0 :(得分:5)

它用于避免对之后绘制的内容产生任何意外的副作用。在方法中的程序之间切换,但在方法结束时选择默认程序(0)是完全正常的(在我看来,更可取)。这样,在调用该方法后,您不会遇到任何奇怪的副作用。

我没有太多可以想到的副作用,但我想如果你用固定功能的方式画出一些东西,你会不小心用你绑定的最后一个程序画画。

只需注意,在您发布的第二个代码块之外,您可以将第一个glUseProgram调用移到while循环之外,以防止多次绑定同一个程序。