如何检测 WebGL 中的浮点精度?

Ite*_*tor 1 javascript opengl-es glsl webgl

lowpmediumphighp装置不每个设备上的相同的精度。如何检测它们的实际值(每个精度下浮点数的位长)?

我的意思是:

- lowp:   16bit float
- mediump 32bit float
- highp   64bit float (double)
Run Code Online (Sandbox Code Playgroud)

gma*_*man 5

你可以打电话 gl.getShaderPrecisionFormat(shaderType, precisionType)

shaderTypegl.VERTEX_SHADERgl.FRAGMENT_SHADER

precisionTypegl.LOW_FLOAT, gl.GL_MEDIUM_FLOAT, gl.HIGH_FLOAT, gl.LOW_INT, gl.MEDIUM_INT, 之一gl.GL_HIGH_INT

它返回一个看起来像这样的对象

{
    rangeMin,  // log 2 of the minimum representable magnitude
    rangeMax,  // log 2 of the maximum representable magnitude
    precision, // log 2 of the precision
};
Run Code Online (Sandbox Code Playgroud)

如果片段着色器不支持高精度浮点格式,则使用参数 gl.FRAGMENT_SHADER 和 gl.HIGH_FLOAT 调用 gl.getShaderPrecisionFormat 将返回 0 的范围和精度。

文档在这里链接到 OpenGL ES 2.0 文档在这里