关于GLSL的精度限定符解释

2020-04-13  本文已影响0人  tp夕阳武士
1.修饰符解释
精度限定符号 解释
highp 满足顶点语言描述的最低要求,在片段语言中是可选的
mediump 满足片段的最低要求,精度范围必须大于或者等于lowp提供的范围和精度小于highpd 范围
lowp 􏴳􏴴􏲹􏴩􏳥􏲿􏳀􏳘􏲑􏴳􏴴􏲹􏴩􏳥􏲿􏳀􏳘􏲑范围和精度小于mediump,但仍用于表示任何颜色通道的所有颜色值
lowp float color;
varying mediump vec2 Coord; 
highp mat4 m;

2.精度范围

Floatting Point Range 浮点数的范围

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类型的精度;

上一篇下一篇

猜你喜欢

热点阅读