OpenGL ES2.0 Programming Guide - chapter 5:OpenGL ES Shading Language

Chapter 5:OpenGL ES Shading Language

Variables and Variable Types

标量,向量,矩阵

Variable Constructors

类型转换,与c类似

变量赋值,注意:矩阵是以列优先的方式存储的

向量:

1. {x,y,z,w} or {r,g,b,a} or {s,t,r,q}

2. OpenGL ES2.0中,下标不允许是变量,因为动态下标对硬件来说是一个艰验证的操作。

Constants

与c类似

Structures

与c类似

Arrays

1. 不允许用变量作为索引下标
2. 没有初始化语法支持
3. 数组不能声明为const

Operators

向量与向量相乘,向量与标量相乘,矩阵与标量相乘

Functions

不可递归。与c类似,除了以下形参声明的关键字
1. in   : 以值传递,函数内不可改变【默认】
2. inout :以引用传递,函数内可改变
3. out  :变量的值不传递到函数内,但函数返回时会被赋值

Built-In Functions

如dot, pow等

Control Flow Statements

与c类似,除了以下限制:
1. 只能一个循环,即不能嵌套
2. 一个循环条件只能用简单的加减来改变
3. 循环结束判断条件只能是循环次数与常量的比较

Uniforms

对于硬件来说,Uniform变量存放在“cosntant store”,该区域是有限的,因此限制了可存放的Uniform变量的个数。
OpenGL ES2.0要求至少提供128个vertex向量uniform和16个fragment向量uniform。

Attributes

attribute仅用在vertex shader中,被用来描述vertex shader的顶点输入。attribute存储位置,纹理坐标,颜色及normals信息。
同uniforms,存放attribute的数量也被硬件受限。OpenGL ES2.0规定,最少要支持8个attribute变量的存放。

Varyings

作为vertex shader的输出、fragment shader的输入,因此他们必须必须同时在vertex shader和fragment shader中声明,并且声明要一样。
因硬件的限制,最大的varyings的数量可通过内置变量gl_MaxVaryingVectors获取,最小的数量为8。

Preprocessor and Directives

#error
#pragma
#version
#extension

Uniform and Varying Packing

打包,以充分利用GPU单元的内存。
打包动作,对应用开发者来说是透明的。

Precision Qualifiers

精度修饰符可以用来提示编译器用何种精度进行运算。低精度可以节省电量,但如果精度没用对的话会带来artifacts问题。

精度修饰符可以用来描述浮点型及基于整形的变量。对应关键字为:lowp, mediump, highp

可以在vertex shader或(和)fragment shader代码开头显式标明float和int精度修饰符。

如果没有在vertex shader开头标明精度修饰符,则默认是highp

如果没有在fragment shader开头标明精度修饰符,那么对于float类型来说没有默认精度之说,因此shader中的float类型都要显式标明精度,或者每个float变量都要标明精度修饰符。

OpenGL ES2.0并未要求一定要实现高精度的float。可通过宏GL_FRAGMENT_PRECISION_HIGH定义与否来判断是否支持highp float.

Invariance

因为编译器优化及指令重排序,同样的输入、同样的代码可能会产生不同的输出,特别在multipass shader effects中。

而invariance关键字则保证同样的输入、同样的代码产生同样的输出。这可以用于声明,也可以用于已声明过的变量中。

但invariance会限制优化,因此万不得已尽量少用。


















1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值