openGLES(三)
着色器语言基于c/c++语言,但是还是有区别的,它不是面向对象
数据类型概述
内建的数据类型:浮点型(float)、布尔型(bool)、整形(int),矩阵(matrix)以及向量(vec2,vec3),类型可以分为标量、向量、矩阵、采样器、结构体以及数组等几类
-
标量
标量成为无向量,只有大小,无方向
-
布尔类型bool
-
整形int 参数可以是十进制、八进制、十六进制
-
float类型
-
-
向量
有大小,有方向
分类也分为bool/int/float类型
-
vec2 vec3 vec4 浮点型的向量
-
ivec2 ivec3 ivec4 整形的向量
-
bvec2 bvec3 bvec4 布尔向量
变量赋值:
通过.进行赋值 ,也可以通过下标进行赋值
-
-
矩阵
mat2 mat3 mat4可以通过下标进行值的设置和获取
-
采样器
主要来执行纹理操作时的采样操作。一个采样器代表一个贴图
sampler2D 访问二维纹理
sampler3D 访问三维纹理
samplerCube 立 方贴图纹理
-
机构体
struct info{
vec3 color;
vec3 position;
}
info s;
-
数组
vec3 positon[20];
-
空类型
void main(){}
-
数据类型的基本操作
int a,b;
a=1; b=3;
int c = a+b;向量的书写
float a =12.3;
float b =11.3;
vec2 va = vec2(2.3,3.2);
-
限定符
-
attribute
attribute:属性限定符,接收渲染管传输的属性。用于传输顶点、纹理、颜色、法向量等。它的值通过java传进渲染管,管线进行基本处理之后在传递着色器。数据中有多少个顶点,就知心多小次着色器。,每次只传递一个参数就会调用一次,每次完成一个顶点的数据。
顶点着色器会一个点一个点的处理,那么如果点非常多的时候,这个操作是很浪费时间的,现在的GPU都不是使用一个着色器硬件,数量是很多的,所以速度会很大的提升。
-
uniform限定符
一致变量的限定符,就所有的都使用同一个量
传入值的时候,可以传入浮点、整数、矩阵
-
varying
需要加工顶点着色器中的参数传入到片段着色器就要使用varying,他会产生一个渐变的效果。
-
流程管理
if-else条件语句
while/do-while
for循环
-
函数
in:表示传入数据
out:传出数据
inout:具有输入和输出功能
-
片元着色器精度
lowp mediump highp
precision 精度 类型
-
内建变量:输出内建变量,输入内建变量,在着色器中的一般为输出变量
-