函數名:
glUniform
功能:
為當前程序對象指定Uniform變量的值。(譯者注:注意,由於OpenGL ES由C語言編寫,但是C語言不支持函數的重載,所以會有很多名字相同后綴不同的函數版本存在。其中函數名中包含數字(1、2、3、4)表示接受這個數字個用於更改uniform變量的值,i表示32位整形,f表示32位浮點型,ub表示8位無符號byte,ui表示32位無符號整形,v表示接受相應的指針類型。 )
函數原型:
void glUniform1f(GLint location, GLfloat v0); void glUniform2f(GLint location, GLfloat v0, GLfloat v1); void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); void glUniform1i(GLint location, GLint v0); void glUniform2i(GLint location, GLint v0, GLint v1); void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2); void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);
參數列表:
location:指明要更改的uniform變量的位置
v0,v1,v2,v3:指明在指定的uniform變量中要使用的新值
函數原型:
void glUniform1fv(GLint location, GLsizei count, const GLfloat *value); void glUniform2fv(GLint location, GLsizei count, const GLfloat *value); void glUniform3fv(GLint location, GLsizei count, const GLfloat *value); void glUniform4fv(GLint location, GLsizei count, const GLfloat *value); void glUniform1iv(GLint location, GLsizei count, const GLint *value); void glUniform2iv(GLint location, GLsizei count, const GLint *value); void glUniform3iv(GLint location, GLsizei count, const GLint *value); void glUniform4iv(GLint location, GLsizei count, const GLint *value);
參數列表:
location:指明要更改的uniform變量的位置
count:指明要更改的元素個數。如果目標uniform變量不是一個數組,那么這個值應該設為1;如果是數組,則應該設置為>=1。
vlaue:指定一個具有count個數值的數組指針,用來更新指定的uniform變量。
函數原型:
void glUniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
void glUniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
void glUniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);
參數列表:
location:指明要更改的uniform變量的位置
count:指明要更改的矩陣個數
transpose:指明是否要轉置矩陣,並將它作為uniform變量的值。必須為GL_FALSE。
value:指明一個指向count個元素的指針,用來更新指定的uniform變量。
描述:
glUniform更改一個uniform變量或數組的值。要更改的uniform變量的位置由location指定,location的值應該由glGetUniformLocation函數返回。通過調用glUseProgram,glUniform操作的程序對象將成為當前狀態的一部分。
glUniform{1|2|3|4}{f|i}使用傳進來的實參,修改通過location指定的uniform變量。
所有在程序對象中定義的活動uniform變量,在程序對象鏈接成功后都會被初始化為0.直到下一次程序對象鏈接成功再一次被初始化為0前,它們將保留通過調用glUniform賦給它們的值。
glUniform{1|2|3|4}{f|i}v可以用來更改單個uniform變量的值,或者一個uniform變量數組。
glUniformMatrix{2|3|4}fv用來更改一個矩陣或一個矩陣數組。
錯誤:
GL_INVALID_OPERATION 沒有當前程序對象;着色器中的uniform變量的尺寸和glUniform中指明的尺寸不一致;glUniform的整形變體加載float類型的uniform變量,或者float類型的變體加載整形的uniform變量;location不是當前程序對象的有效uniform位置,並且location的值不等於-1;count的值大於1,但是指明的uniform變量不是一個數組;如果采樣器不是調用glUniform1i 和glUniform1iv。
GL_INVALID_VALUE count小於0;transpose不是GL_FALSE。