1. 程式人生 > >OpenGL ES之glUniform函式

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。