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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM