2012-03-13 63 views
1

假设我有一个具有统一属性“diffuseColor”的OpenGL程序。我已经设置它如下:如何将OpenGL程序的统一属性值重置为默认值?

GLint location = glGetUniformLocation(handle, "diffuseColor"); 
glUniform3f(location, 1, 0, 0); 

现在我想将它返回到默认值,它是在着色器代码编码。我没有访问源代码,但我可以在编译的程序上调用OpenGL API函数。有没有办法读取默认值并将其设置为glUniform3f?或者更好,有没有像glResetUniform3f(GLint loc)

回答

3

链接程序时会应用统一初始值设定项。然后可以使用glGetUniformfv/glGetUniformiv来读取该值。在更改统一值后,无法读取统一的初始值。

无法将单一制服重置为其初始值,但重新链接程序将重置其中的所有制服。链接一个程序是一个代价高昂的操作,应该在两帧之间避免。

+0

很酷。我可以将值存储在CPU上,并在需要时使用glUniformXY进行设置。谢谢。 – 2012-03-14 23:03:11