OpenGL ES--glUniform函數

原博客:http://blog.csdn.net/wangyuchun_799/article/details/7742787


函數名:

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。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章