函数名:

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。

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. mysql解决中文乱码问题

    安装文件 my.ini default-character-set=gbk 安装文件 db.opt default-character-set=gbkdefault-collation=gbk_chi ...

  2. 应用 Valgrind 发现 Linux 程序的内存问题(转)

    Valgrind 概述 体系结构 Valgrind 是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成.内核类似于一个 ...

  3. .Net Core 中使用AutoMapper

    1.新建一个类 using AutoMapper; using YourModels; using YourViewModels; namespace YourNamespace { public c ...

  4. 网页 HTML表单

    今天,我首先先学习了图片热点和在原来页面嵌入其他页面. 图片热点:<img src="" usemap="#ditu"/> <map name ...

  5. 将数组写入plist文件

    data 加载plist [NSBundle mainBundle] [arr writeToURL:<#(NSURL *)#> atomically:<#(BOOL)#>]

  6. Zend Studio配合Xdebug调试

    以下配置均在windows环境下. 1.下载xdebug 使用phpinfo()查看当前php的版本信息: 到xdebug下载页面下载对应的xdebug版本:   将解压出的php_xdebug-2. ...

  7. 小飞淙在博客上的第一天——NOIP201505转圈游戏

    原本我是在word文档上写这种东西的,在杨老师的“强迫”下,我开始写了博客. 这是我在博客上的第一天,就先来个简单的,下面请看题: 试题描述  有n个小伙伴(编号从0到n-1)围坐一圈玩游戏.按照顺时 ...

  8. POJ 3417 Network

    每条额外的边加入到图中,会导致树上一条路径成环,假设没有其余边,那么要将新图分成两部分,如果想删一条成环路径上的边,那么必须把这条额外边也删除. 因此每条额外边加入时,只需将环上的边+1.最后看看每条 ...

  9. bash color

    紫色:300A24 黄色:C4A000 Tango 紫色: 200213

  10. hdu_2224_The shortest path(dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2224 题意:双调欧几里德旅行商经典问题,找一条最短回路使得该路经过所有的点 题解:dp[i][j]=d ...