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

时间:2015-07-20 15:49:58

标签: opengl-es glsl webgl precision

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

然而,我似乎得到了舍入错误,对于某些值,例如在Ipad 4上。整数运算是按浮点数实现的吗?

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

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));
}

Here是一个可运行的链接。

着色器在我的桌面上生成黑色背景,但在我的iPad上生成白色背景。有人可以解释一下我在做什么吗?

由于

1 个答案:

答案 0 :(得分:1)

这是正确的,webgl使用glsl 1.00着色器,这不是实现实数整数所必需的。

您可以在第19页上阅读: https://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf

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