精度限定符有三个:
- lowp
- mediump
- highp
从名称上可以知道它是用来限定数据类型精度的,比如:int, float
限定float的取值范围
- highp (-2^62, 2^62);
- mediump (-2^14, 2^14);
- lowp (-2,2);
限定int的取值范围
- highp (-2^16, 2^16);
- mediump (-2^10, 2^10);
- lowp (-2^8, 2^8);
注意:字符常量和布尔类型没有精度限定符.
用法
即可单独限定某一数据类型,也可放在Vertex和Fragment shader 源码开始处统一限定数据类型.
单独限定某一数据类型
highp vec4 position;
varying lowp vec4 color;
mediump float specularExp;
统一限定
precision precision-qualifier type;
precision-qualifier可以是lowp, mediump, 或者highp.
- type是float时,没有指明精度限定符的并且是float修饰的默认限定符是precision-qualifier(lowp, mediump, 或者highp),例如float修饰的标量,向量及矩阵.
- type是int时,没有指明精度限定符的并且是int修饰的默认限定符是precision-qualifier(lowp, mediump, 或者highp),例如int修饰的标量和向量.(不包括矩阵,矩阵是用float的)
默认的限定符
- 在Vertex Shader中,如果没有统一设定的精度限定符, 则float和int默认的精度限定符是highp;
precision highp float;
precision highp int;
precision lowp sampler2D;
precision lowp samplerCube;
- 在Fragment Shader中,如果没有统一设定的精度限定符, 则int默认的精度限定符是mediump,注意float没有默认的精度限定符,需要我们自己设定.
precision mediump int;
precision lowp sampler2D;
precision lowp samplerCube;