GLSL 精度限定符

精度限定符有三个:

  • 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;

你可能感兴趣的:(GLSL 精度限定符)