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