OpenGL之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。

来源:http://blog.csdn.net/wangyuchun_799/article/details/7742787

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值