hel*_*922 4 opengl shader opengl-3
在OpenGL中我经常看到这个代码遵循这种模式:
glUseProgram(prog_id);
// ... do some stuff
glUseProgram(0);
Run Code Online (Sandbox Code Playgroud)
我明白glUseProgram(0)取消选择任何着色器程序.现在我的问题是取消选择着色器程序是什么意思?
例如,为什么我应该或不应该在渲染循环中做这样的事情?
while(render_loop_condition)
{
glUseProgram(prog_id);
// do some stuff
}
// various cleanup code
glUseProgram(0);
Run Code Online (Sandbox Code Playgroud)
在使用多个着色器程序的渲染循环中,我可以这样做:
while(render_loop_condition)
{
glUseProgram(prog_id1);
// do some stuff
glUseProgram(prog_id2);
// do some other stuff
}
// various cleanup code
glUseProgram(0);
Run Code Online (Sandbox Code Playgroud)
它用于避免任何意外的副作用.在方法中的程序之间切换,但0在方法结束时选择默认程序()是完全正确的(在我看来,更可取).这样,在调用该方法后,您不会遇到任何奇怪的副作用.
我可以想到没有很多副作用,但我想如果你用固定功能的方式绘制一些东西,你会不小心用你绑定的最后一个程序绘制.
只需注意,使用您发布的第二个代码块,您可以glUseProgram在while循环之外移动第一个调用,以防止多次绑定同一个程序.