Opengl es WebGL着色器中的整数数学错误

Opengl es WebGL着色器中的整数数学错误,opengl-es,glsl,webgl,precision,Opengl Es,Glsl,Webgl,Precision,我正在使用WebGL和自定义着色器。在片段着色器中,为了索引平铺纹理,我需要进行一些精确的整数数学运算 然而,对于某些值,我似乎会遇到舍入误差,例如在iPad4上。整数运算是否以浮点形式实现 作为概念证明,我尝试了以下着色器: const int eleven = int(11.0); highp float f(const int nr11) { if (int(nr11 / nr11) != 1) return 1.0; return 0.0; } voi

我正在使用WebGL和自定义着色器。在片段着色器中,为了索引平铺纹理,我需要进行一些精确的整数数学运算

然而,对于某些值,我似乎会遇到舍入误差,例如在iPad4上。整数运算是否以浮点形式实现

作为概念证明,我尝试了以下着色器:

const int eleven = int(11.0);

highp float f(const int nr11)
{
    if (int(nr11 / nr11) != 1)
        return 1.0;
    return 0.0;
}

void main()
{
    gl_FragColor = vec4(f(eleven));
}
是一个可运行的链接

该着色器在我的桌面上生成一个黑色背景,但在我的IPad上生成一个白色背景。有人能解释一下发生了什么事吗


感谢这一点,webgl使用glsl 1.00着色器,实现实整数不需要glsl 1.00着色器

您可以在第19页上阅读:

您暂时无法保证在webgl中获得真正的整数支持。

此外,GLSL ES 3.0(提供整数支持)仅作为OpenGL ES 3.0的一部分提供,OpenGL ES 3.0需要硬件支持。因此,即使WebGL 2(基于GLES 3.x)问世,您也可能无法在不支持ES3的iPad 4等设备上使用新的着色器功能,如整数。(ES3的iOS设备支持与Metal相同:它至少需要A7 GPU。)