函数名:

glUniform

功能:

为当前程序对象指定Uniform变量的值。(译者注:注意,由于OpenGL ES由C语言编写,但是C语言不支持函数的重载,所以会有很多名字相同后缀不同的函数版本存在。其中函数名中包含数字(1、2、3、4)表示接受这个数字个用于更改uniform变量的值,i表示32位整形,f表示32位浮点型,ub表示8位无符号byte,ui表示32位无符号整形,v表示接受相应的指针类型。 )

函数原型:

  1. void glUniform1f(GLint location, GLfloat v0);
  2.  
  3. void glUniform2f(GLint location, GLfloat v0, GLfloat v1);
  4.  
  5. void glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);
  6.  
  7. void glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);
  8.  
  9. void glUniform1i(GLint location, GLint v0);
  10.  
  11. void glUniform2i(GLint location, GLint v0, GLint v1);
  12.  
  13. void glUniform3i(GLint location, GLint v0, GLint v1, GLint v2);
  14.  
  15. void glUniform4i(GLint location, GLint v0, GLint v1, GLint v2, GLint v3);  

参数列表:

location:指明要更改的uniform变量的位置

v0,v1,v2,v3:指明在指定的uniform变量中要使用的新值

函数原型:

  1. void glUniform1fv(GLint location, GLsizei count, const GLfloat *value);
  2.  
  3. void glUniform2fv(GLint location, GLsizei count, const GLfloat *value);
  4.  
  5. void glUniform3fv(GLint location, GLsizei count, const GLfloat *value);
  6.  
  7. void glUniform4fv(GLint location, GLsizei count, const GLfloat *value);
  8.  
  9. void glUniform1iv(GLint location, GLsizei count, const GLint *value);
  10.  
  11. void glUniform2iv(GLint location, GLsizei count, const GLint *value);
  12.  
  13. void glUniform3iv(GLint location, GLsizei count, const GLint *value);
  14.  
  15. 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。

OpenGL ES之glUniform函数的更多相关文章

  1. 利用JNI技术在Android中调用C++形式的OpenGL ES 2.0函数

    1.                 打开Eclipse,File-->New-->Project…-->Android-->AndroidApplication Projec ...

  2. OpenGL ES一些函数详解(一)

    glLoadIdentity和glMultMatrix   glLoadIdentity的作用是将当前模型视图矩阵转换为单位矩阵(行数和列数相同的矩阵,并且矩阵的左上角至右下角的连线上的元素都为1,其 ...

  3. 【OpenGL ES】关于VBO(Vertex Buffer Object)的一些坑——解析一些关于glBuffer的函数

    最近在写毕设的时候用到OpenGL ES中的VBO,由于对一些接口用到的变量不了解被坑得很惨,在此记录一下防止以后再被坑. 本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cn ...

  4. OpenGL ES Shader语言中的函数不支持递归

    An example function definition is given here for a simple function that computes basic diffuse light ...

  5. OpenGL ES 3.0之Uniform详解

    Uniform是变量类型的一种修饰符,是OpenGL ES  中被着色器中的常量值,使用存储各种着色器需要的数据,例如:转换矩阵.光照参数或者颜色. uniform 的空间被顶点着色器和片段着色器分享 ...

  6. iOS 中OpenGL ES 优化 笔记 1

    1,避免同步和Flushing操作 OpenGL ES的命令执行通常是在command buffer中积累一定量的命令后,再做批处理执行,这样效率会更高:但是一些OpenGL ES命令必须flush ...

  7. 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)

    0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...

  8. OpenGL ES 3.0: 图元重启(Primitive restart)

    [TOC] 背景概述 在OpenGL绘制图形时,可能需要绘制多个并不相连的图形.这样的情况下这几个图形没法被当做一个图形来处理.也就需要多次调用 DrawArrays 或 DrawElements. ...

  9. OpenGL ES无法获取贴图数据原因

    最近在做一个项目,要从贴图中获取图像数据,查了很多资料,也琢磨很久,获取到的数据都是0.终于在一次偶然的机会,发现了端倪,成功了. 不得不说这"一分灵感"真的很重要 以下是在获取贴 ...

随机推荐

  1. Implementing a builder: Zero and Yield

    原文地址:http://fsharpforfunandprofit.com/posts/computation-expressions-builder-part1/ 前面介绍了bind和continu ...

  2. agentX各个角色功能

    AgentX Roles  1.master An entity acting in a master agent role performs the following  functions: -  ...

  3. poj 2299 Ultra-QuickSort 逆序对模版题

    用树状数组求逆序数 唯一的坑点就是sum要用long long存 直接贴代码了 以后忘了还能直接看 2333…… PS:和hdu3743代码是一样的,因为两个都是逆序对模版题…… #include&l ...

  4. hitTest:withEvent:方法流程

    此方法可实现点击穿透.点击下层视图功能. 一. hitTest:withEvent:调用过程 iOS系统检测到手指触摸(Touch)操作时会将其放入当前活动Application的事件队列,UIApp ...

  5. 模拟SPI协议时序

    SPI是串行外设接口总线,摩托罗拉公司开发的一种全双工,同步通信总线,有四线制和三线制. 在单片机系统应用中,单片机常常是被用来当做主机(MASTER),外围器件被当做从机(SLAVE). 所以,在以 ...

  6. c# 获取命名空间 类名 方法名

    c# 获取命名空间 类名 方法名 转[http://blog.sina.com.cn/s/blog_3fc2dcc1010189th.html]   分类: Winform public static ...

  7. 2.3 DHC REST

    DHC REST也是Chrome浏览器的插件,可以在Chrome应用商店安装下载,主要用来模拟HTTP客户端发送测试数据到服务器.HTTP Get请求在开发中比较常用.

  8. 浅谈C/C++结构体内存分配问题

    .wiz-todo, .wiz-todo-img {width: 16px; height: 16px; cursor: default; padding: 0 10px 0 2px; vertica ...

  9. java类中为什么设置set和get方法操作属性

    java程序规范中会建议大家尽量将类中的属性私有化,即定义为private变量,通过设置set和get函数来对属性进行操作.一些人存在这样的疑问,为什么不直接将属性设置为public,以后调用属性时直 ...

  10. Hibernate中自带ID的generator的含义

    increment:代理主键,适合于所有数据库,由hibernate维护主键自增,和底层数据库无关,但是不适合于2个或以上hibernate进程. identity:代理主键,适合于Mysql或ms ...