sin(x)仅为GLSL片段着色器Intel HD4000上的中等大输入返回4个不同的值

时间:2014-01-30 18:29:34

标签: opengl glsl intel sin

我有一个用GLSL编写的简单的OpenGL 3.3片段着色器。从本质上讲,我正在评估sin(x)中等大x(10,000到2,000,000之间),如下所示:

#version 330
out vec4 fColor;
void main() {
  fColor = vec4(sin(gl_FragCoord.x * gl_FragCoord.y));
}

它在我的NVidia显卡上工作正常,但在我的Intel HD4000上,正弦仅返回四个不同的值(+/- 1.0 和+/- 0.3 )高于10,000的投入。

系统:Windows 64位,(英特尔)驱动程序版本15.28.20.64.3347。

我的问题:这是一个错误吗?或者供应商是否可以自由地以这种方式实施正弦?

1 个答案:

答案 0 :(得分:6)

这是快速三角实现中相当常见的“错误” - 通常使用适用于范围(-π,π)范围内的值的近似值,但对于较大值则很差。

由于GLSL规范对这些函数不需要任何特定级别的准确度或精度,因此可以认为只要sin(x)中的误差远小于| x |没关系,但这种错误似乎过分了。