OpenGL ES之glUniform函数

来源:互联网 发布:英雄连2美军潘兴数据 编辑:程序博客网 时间:2024/05/16 17:19


函数名:

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。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 液晶电视怎么办断屏坏还是逻辑板 门保险拧坏了怎么办 锁的保险坏了怎么办 鞋子里面长霉了怎么办 塑料瓶盖滑丝了怎么办? 塑料杯盖滑丝了怎么办 洗衣机上的订子很难扭出来怎么办 滚筒洗衣机坏了打不开门怎么办 海尔滚筒洗衣机打不开门怎么办 格兰仕滚筒洗衣机门打不开怎么办? lg洗衣机洗完衣服门打不开怎么办 lg洗衣机不能冼衣服怎么办 vivo账户密码忘记了怎么办 oppo账户密码忘记了怎么办 74160从1开始计数怎么办 微信录音声音小怎么办 word文档已停止工作怎么办 怀孕30天不想要怎么办 一楼墙体起碱怎么办 农村平房顶四墙面渗水怎么办 被蝎子精蛰了怎么办 小娃头摔包要怎么办抹个什么 老人死了银行钱存死期怎么办 飙酷车神2一进画面就闪退怎么办 电脑开机键盘鼠标没反应怎么办 玩gta4自由城卡怎么办 gta5游戏服务当前不可用怎么办 健身后胳膊变粗怎么办 健身后手臂变粗怎么办 家猫见到我就跑怎么办 走路多了小腿酸痛怎么办 脚有脚气很痒怎么办 地板精油喷多了怎么办 史莱姆泥变硬了怎么办 dnf剑帝命中率低怎么办 无意中讲话伤害了人怎么办 高中上不下去了怎么办 高三坚持不下去怎么办 word点了不保存怎么办 做了ppt没保存怎么办 中班安全教案迷眼了怎么办