1.修饰符解释
精度限定符号 | 解释 |
---|---|
highp | 满足顶点语言描述的最低要求,在片段语言中是可选的 |
mediump | 满足片段的最低要求,精度范围必须大于或者等于lowp提供的范围和精度小于highpd 范围 |
lowp | 范围和精度小于mediump,但仍用于表示任何颜色通道的所有颜色值 |
lowp float color;
varying mediump vec2 Coord;
highp mat4 m;
2.精度范围
Floatting Point Range 浮点数的范围
- highp: (-262 , 262);
- mediump (-214,214);
- lowp (-2,2);
Integer Range 整数范围
highp(-216,216);
mediump(-210,210);
lowp(-28,28);
对于高精度和中级精度,整型范围必须可以准去的转化为响应的相同精度修饰符表示的float型.
例如:highp int 可以被转化为highp float , mediump int 可以转化为mediump float ,但是lowp int 不能转化为lowp float ;
字符常量和布尔型没有精度修饰符的,当浮点数和整数构造器,不含带有精度修饰符的参数时,也不需要精度修饰符.
3.指定变量精度(放在数据类型之前)
highp vec4 position;
varying lowp vec4 color;
mediump float specularExp;
4. 指定默认精度(放在vertex 和fragment shader 源码开始处)
precision precision-qualifier type;
// precision 可以用来确认默认精度修饰符
// precision-qualifier 可以是lowp / mediump / highp,
// 任何其他的修饰类型都会引起错误
// 如果type 是float类型,那么精度(precision - qualifier)将使用所有无精度修饰符的浮点数声明(标量,向量,矩阵);
// 如果type 是int类型,那么该精度(precision - qualifier),将适用于所有无精度修饰符的整型数声明(标量,向量);
// 包括全局变量声明,函数返回值声明,函数参数声明,和本地变量声明,没有声明精度的的变量,将使用最近的precision语句中的修饰符.
precision lowp float ;
precision mediump int;
在顶点着色器中(vertex shader),如果没有设定默认精度,那么float 和 int 都是高进度的(highp);
在片元着色器(fragment shader),float 没有系统默认进度,所有必须在float类型的前面指定一个精度标准;
5.预定义精度
在顶点语言中,有如下预定义的全局精度:
precision highp float;
precision highp int;
precision lowp sampler2D;
precision lowp samplerCube;
在片元着色器语言中,预定义了如下全局默认精度语句:
precision mediump int;
precision lowp sampler2D;
precision lowp samplerCube;
因为在片元语言中,没有默认的浮点精度,因此对于浮点数,浮点向量,矩阵变量的声明,要么申明必须包含一个进度修饰符,要么提前人为设定一个默认的float类型的精度;
网友评论