在OpenGL ES 2.0/GLSL中,哪里需要精度说明符?
在等号的右边,将值填充到其中的变量是否决定了使用的精度 例如,此处的精度说明符是否有意义上的差异:在OpenGL ES 2.0/GLSL中,哪里需要精度说明符?,glsl,opengl-es-2.0,Glsl,Opengl Es 2.0,在等号的右边,将值填充到其中的变量是否决定了使用的精度 例如,此处的精度说明符是否有意义上的差异: gl_FragColor = lowp vec4(1); 下面是另一个例子: lowp float floaty = 1. * 2.; floaty = lowp 1. * lowp 2.; 如果你用一些浮点数,然后用它们创建一个向量或矩阵,那么这个向量或矩阵的精度会达到你填充的值的精度,还是会转换成另一个精度级别 我认为优化这一点最能回答以下问题: dot(gl_LightSource[0]
gl_FragColor = lowp vec4(1);
下面是另一个例子:
lowp float floaty = 1. * 2.;
floaty = lowp 1. * lowp 2.;
如果你用一些浮点数,然后用它们创建一个向量或矩阵,那么这个向量或矩阵的精度会达到你填充的值的精度,还是会转换成另一个精度级别
我认为优化这一点最能回答以下问题:
dot(gl_LightSource[0].position.xyz, gl_NormalMatrix * gl_Normal)
我的意思是,如果你想尽快实现它,它需要走这么远吗?还是有些东西没用
lowp dot(lowp gl_LightSource[0].position.xyz, lowp gl_NormalMatrix * lowp gl_Normal)
我知道你可以为float定义默认的精度,这应该是用于向量和矩阵之后。为了教育的目的,假设我们之前定义过:
precision highp float;
4.5.3默认精度限定符
)
在片段着色器中,您可以获得:
precision mediump int;
precision lowp sampler2D;
precision lowp samplerCube;
这意味着如果在片段着色器中声明浮点,则必须说明它是lowp
还是mediump
。默认的float
/int
精度也扩展到矩阵/向量highp
仅在将GL\u FRAGMENT\u PRECISION\u HIGH
宏定义为1
的系统上受支持;在其他情况下,您将得到一个编译器错误。(4.5.4可用精度限定符
)lowp
(语法上不正确)。如果要将类型向下转换为较低的精度,唯一的方法是显式地将其指定给较低的精度这些答案都来自于Khronos GLSL规范,您可以在这里找到(相关章节为4.5.2和4.5.3):“此外,由于gl_FragColor的精度已经根据渲染目标的深度定义了”,您对该陈述的来源是什么?我在规范中没有看到任何关于这方面的信息。答案的这一部分是不正确的;这肯定很重要。我已经纠正了答案中的第一点。
precision mediump int;
precision lowp sampler2D;
precision lowp samplerCube;