我正在使用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上生成白色背景。有人可以解释一下我在做什么吗?
由于
答案 0 :(得分:1)
这是正确的,webgl使用glsl 1.00着色器,这不是实现实数整数所必需的。
您可以在第19页上阅读: https://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf
暂时无法保证webgl中的真正整数支持。