OpenGL ES之glUniform函式
函式名:
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。