一个

有态度

的程序员

uniform

uniform是GLSL中变量类型的限定符,使用uniform限定的变量是只读值,在Shader中无法更改,只能通过应用程序传递给uniform。

uniform变量为全局共享变量,可以在所有的Shader中可以获取,uniform定义如下:

uniform float uTexPos;

uniform 变量通常是存储在GPU的”常量区”,这一区域的内存是有限的,因此uniform有个数限制,但比attribute要多很多,OpenGL 标准化组织规定OpenGL ES 2.0规定至少支持128个顶点uniform和16个片段(Fragment)uniform。

获取支持的顶点uniform最大个数代码如下:

    fun getMaxVertexUniformNum(): Int {var count = IntArray(1)GLES20.glGetIntegerv(GLES20.GL_MAX_VERTEX_UNIFORM_VECTORS, count, 0)return count[0]}

获取支持的片段uniform最大个数代码如下:

    fun getMaxFragmentUniformNum(): Int {var count = IntArray(1)GLES20.glGetIntegerv(GLES20.GL_MAX_FRAGMENT_UNIFORM_VECTORS, count, 0)return count[0]}

设置uniform变量值

获取uniform 属性的句柄代码如下:

GLES20.glGetUniformLocation(programHandle, uniformName)

programHandle代表program句柄,uniformName就是uniform属性的名称。

设置uniform值的方法在Android中比较多,代码如下:

GLES20.glUniform1f(location,x)
GLES20.glUniform2f(location,x,y)
GLES20.glUniform3f(location,x,y,z)
GLES20.glUniform4f(location,x,y,z,w)

设置float类型的数据,location表示uniform属性的句柄,后面x,y,z,w是值,参数中(x)/(x,y)/(x,y,z)/(x,y,z,w)分别对应vec2/vec3/vec4类型的uniform。

设置vec类型的变量也可以使用如下方法:

GLES20.glUniform2fv()

设置int类型数据使用如下方法:

GLES20.glUniform1i(location,x)

设置mat类型使用如下方法:

GLES20.glUniformMatrix2fv()

varying

varying是GLSL中限定符,varying限定的变量只能在shader之间传递,是Vertex Shader(顶点着色器)的输出,Fragment Shader(片段着色器)的输入,Shader中的声明和类型要保持一致。

varying定义格式如下:

varying float color;

在Vertex Shader中定义varying变量并设置为vec4(1,0,0,1),代码如下:

attribute vec4 vPosition;
varying vec4 color;
void main() {color= vec4(1,0,0,1);gl_Position = vPosition;
}

在Fragment Shader中获取color值并使用,代码如下:

precision mediump float;
varying vec4 color;
void main()
{gl_FragColor = color;
}

与attribute和uniform一样,varying也有数量限制,OpenGL ES 2.0至少支持8个,获取varying的最大个数,代码如下:

fun getMaxSupportNum(): Int {var count = IntArray(1)GLES20.glGetIntegerv(GLES20.GL_MAX_VARYING_VECTORS, count, 0)return count[0]}

varying不仅有个数的限制,还有大小的限制,varying变量最多可以传递32个float数据,或者8个vec4,或者2个mat4矩阵。

更多相关阅读:

  • OpenGL ES for Android

  • OpenGL ES 环境搭建

OpenGL ES 之uniform和varying相关推荐

  1. OpenGL ES 三种变量类型(uniform,attribute和varying)

    https://blog.csdn.net/jackers679/article/details/6848085 https://zhuanlan.zhihu.com/p/103687720 1.un ...

  2. OpenGL ES 3.0之Uniform详解

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

  3. All about OpenGL ES 2.x – (part 2/3)(转载)

    来源: http://db-in.com/blog/2011/02/all-about-opengl-es-2-x-part-23/ Very welcome back, my friends! No ...

  4. OpenGL ES着色器语言之变量和数据类型

    所有变量和函数在使用前必须声明.变量和函数名是标识符. 没有默认类型,所有变量和函数声明必须包含一个声明类型以及可选的修饰符.变量在声明的时候首先要标明类型,后边可以跟多个变量,之间用逗号隔开.很多情 ...

  5. OpenGL ES 3.0 基础知识

    首先要了解OpenGL的图形管线有哪些内容,再分别去了解其中的相关的关系: 管线分别包括了顶点缓冲区/数组对象,定点着色器,纹理,片段着色器,变换反馈,图元装配,光栅化,逐片段操作,帧缓冲区.其中顶点 ...

  6. OpenGL ES着色器语言之语句和结构体(官方文档第六章)内建变量(官方文档第七、八章)...

    OpenGL ES着色器语言之语句和结构体(官方文档第六章) OpenGL ES着色器语言的程序块基本构成如下: 语句和声明 函数定义 选择(if-else) 迭代(for, while, do-wh ...

  7. 在Android中使用OpenGL ES开发第(五)节:GLSL基础语法

    一.前期基础储备 笔者之前的四篇文综述了Android中使用OpenGL ES绘制基本图形和实现了简单的相机预览,初次接触OpenGL ES开发的读者可能对其中新的概念比较迷惑,尤其是其中的顶点着色器 ...

  8. 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)

    在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping) 视差贴图 最近一直在研究如何在我的 iPad 2(只支持 OpenGL ES 2.0, 不支持 3.0) 上实现 视 ...

  9. android 视频播放滤镜,用openGL ES+MediaPlayer 渲染播放视频+滤镜效果

    之前曾经写过用SurfaceView,TextureView+MediaPlayer 播放视频,和 ffmpeg avi解码后SurfaceView播放视频,今天再给大家来一篇openGL ES+Me ...

  10. 【Qt for Android】OpenGL ES 绘制彩色立方体

    Qt 内置对OpenGL ES的支持.选用Qt进行OpenGL ES的开发是很方便的,很多辅助类都已经具备.从Qt 5.0開始添加了一个QWindow类,该类既能够使用OpenGL绘制3D图形,也能够 ...

最新文章

  1. Latex使用简单总结
  2. UESTC 2015dp专题 E 菲波拉契数制 dp
  3. ssh mysql环境搭建_搭建一个MySQL高可用架构集群环境
  4. Gym - 101246D 博弈
  5. data.frame 转化为数值型_DataFrame(3):DataFrame的创建方式
  6. 调试js 试用火狐的firebug
  7. CVPR 2020丨微软亚洲研究院精选论文一览
  8. 好家伙!京东数科申请“测谎器”专利
  9. 找回 linux root密码的几种方法
  10. 用SQL Server 2017图形数据库替换数据仓库中的桥表
  11. 用Rstudio进行ARIMA模型预测(小白系列)
  12. 如何管理软件测试环境
  13. 你好,放大器——输入偏置电流(Input bias current,Iв)
  14. 猫怎么设置虚拟服务器,光纤猫设置虚拟服务器
  15. 使用PPT画图,取消自动选点(自动吸附点)解决方案
  16. java ini_Java读取ini文件 [org.dtools.javaini] | 学步园
  17. 树莓派做网络代理_树莓派使用Proxy代理
  18. 产品分析————拼多多
  19. android工具类
  20. C++中继承 —— 继承的概念及定义

热门文章

  1. 世界卫生组织健康标准
  2. 基于Linux的FTP文件传输项目(类似百度云)
  3. delphi学习笔记(1)-object pascal语言的数据类型 选择自 xmz2629 的 Blog
  4. 自然语言处理概述 NLP基本流程
  5. 【7集iCore3基础视频】7-5 iTool2驱动安装
  6. 一个555振荡电路及其解释
  7. python里的非_python中或与非
  8. 商汤AR开发之旅(1)-- 关于SenseAR SDK
  9. 【机器学习-白板推导系列】学习笔记---支持向量机和主成分分析法
  10. git报错 fatal: unsafe repository 解决方法 xxx is owned by someone else