您填充值的变量是否决定了您正在使用的精度,等号的右侧?
例如,这里的精度说明符是否有任何意义上的区别:
gl_FragColor = lowp vec4(1);
Run Code Online (Sandbox Code Playgroud)
这是另一个例子:
lowp float floaty = 1. * 2.;
floaty = lowp 1. * lowp 2.;
Run Code Online (Sandbox Code Playgroud)
如果你采用一些浮点数,并从它们创建一个向量或矩阵,那么该向量或矩阵是否会采用您填充它的值的精度,或者这些值是否会转换为另一个精度级别?
我认为优化这个最好能回答这个问题:
dot(gl_LightSource[0].position.xyz, gl_NormalMatrix * gl_Normal)
Run Code Online (Sandbox Code Playgroud)
我的意思是,它是否需要走这么远,如果你想尽可能快,或者它有些无用吗?
lowp dot(lowp gl_LightSource[0].position.xyz, lowp gl_NormalMatrix * lowp gl_Normal)
Run Code Online (Sandbox Code Playgroud)
我知道你可以定义float的默认精度,并且这可以用于之后的向量和矩阵.假设为了教育的目的,我们之前已经定义了这个:
precision highp float;
Run Code Online (Sandbox Code Playgroud) 我学习WebGL.下一个着色器工作正常:
// vertex.shader
// precision mediump float;
attribute vec4 a_Position;
attribute float a_PointSize;
void main(){
gl_Position = a_Position;
gl_PointSize = a_PointSize;
}
Run Code Online (Sandbox Code Playgroud)
和
// fragment.shader
precision mediump float;
uniform vec4 u_FragColor;
void main(){
gl_FragColor = u_FragColor;
}
Run Code Online (Sandbox Code Playgroud)
为什么有必要为片段着色器设置精确度?顶点着色器在没有这个的情况下工作,但片段着色器在没有此代码行的情况下不起作用(如我所见).为什么存在不同的行为?
我之前读过这篇文章,但它对我没有帮助.