美文网首页
关于GLSL的精度限定符解释

关于GLSL的精度限定符解释

作者: tp夕阳武士 | 来源:发表于2020-04-13 15:32 被阅读0次
    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类型的精度;

    相关文章

      网友评论

          本文标题:关于GLSL的精度限定符解释

          本文链接:https://www.haomeiwen.com/subject/vjggmhtx.html