我正在制作一个程序,它为不同的不同基元使用两个不同的着色器。我的问题是,如果我绑定一个程序,发送它统一变量,然后使用另一个着色器程序并回到第一个,传递的统一值是否仍然存在?这是一些伪代码:
glUseProgram(shader1);
glUniform(shader1,...);
//stuff
for(elements in a list) {
if(element.type = 1) {
glUseProgram(shader2);
element.draw();
} else {
glUseProgram(shader1); //Here, do the uniforms from above remain, if shader2 was bound before?
element.draw();
}
}
答案 0 :(得分:27)
是的,制服是特定于程序的,如果您解除绑定并重新绑定,它将是持久的。
此外,如果您愿意,可以使用glGetUniform轻松验证该样本。
2.11.7统一变量
......制服是程序对象特定的状态。它们在加载后保留其值,只要程序对象未重新链接,只要程序对象被使用,它们的值就会恢复。 ...