天天看点

OpenGL ES 3.0编程指南学习笔记 第6章 顶点属性、顶点数组和缓冲区对象

1)vec2等为float型,也就是着色语言默认为float操作。float,vec2,vec3,vec4

2)矩阵以列优先顺序存储,也就是说矩阵可以看做是由几个列向量组成,例如;

mat3 myMat3 = mat3(1.0, 0.0, 0.0,//First column

0.0, 1.0, 0.0,//Second column

0.0, 1.0, 1.0//Third column

);

vec4 col0 = myMat4[0];

float m1_1 = myMat4[1][1];

3)支持const,结构体

4)支持数组,例如:

float a[4] = float[](1.0, 2.0, 3.0, 4.0);

float b[4] = float[4](1.0, 2.0, 3.0, 4.0);

vec2 c[2] = vec2[2](vec2(1.0), vec2(1.0));

5)向量加法,向量与矩阵乘法,矩阵与矩阵乘法满足线性代数特性;

向量与向量乘法不满足线性代数特性,只是各个分量单独相乘,类似卷积。

6)函数支持in/out/inout限定符,in表示参数按值传送,函数不能修改;

out表示该变量的值不能传入函数,但是在函数返回时修改;

inout表示变量按照引用传入函数,如果该值修改,它将在函数退出后变化。

默认为in,例如

vec4 myFunc(inuot float myFloat,

out vec4 myVec4,

mat4 myMat4);//in parameter(default)

另外,函数不支持递归。

7)uniform变量在全局作用域中可见,所以在顶点着色器和片段着色器中是共享的,因此顶点和片段中的声明必须一致。

8)attribute一般用于每个顶点不相同的两,例如顶点位置,颜色等。

而uniform用于对同一组顶点组成的单个3D物体中所有顶点都相同的量,例如当前光源位置。

9)精度限定符可指定着色器变量计算精度,可以声明为低、中、高精度(lowp,mediump,highp)。

在较低精度上,着色器运行可能更快或者电源效率更高。

例如highp vec4 position;

precision highp float;

precision mediump int;

10)invariant关键字来规定用于计算输出的相同计算的值必须相同,例如

invariant gl_Position;

invariant texCoord;

#pragma STDGL invariant(all)

编译器为保证不变形,可能限制它做的优化,所以可能导致性能下降。因此需只在必要时使用或者限制使用的范围。