android-噪声算法在三星Galaxy SIII(GLES)中失败

我正在努力让下一个简单算法在Samsung Galaxy SIII中工作

float rand(vec2 co)
{
    return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}

....
vec3 color = texture2D(u_texture, v_texcoord);
gl_FragColor.rgb = color + vec3(rand(gl_FragCoord.xy + time / 1000.0));
....

该代码完美地在三星Galaxy S1和Google Nexus S中产生了预期的噪声.但是,在使用ARM的Mali-400 / MP4的新型智能手机中,该代码完全失败.

任何人都可以发现此算法有什么问题吗?或者也许理解为什么它会失败?

最佳答案
您的问题可能来自承担大量罪恶.其结果取决于sin的确切实现方式,这是不可用的.显然,Mali芯片使用的sin函数具有比其他函数更可预测的结果.

在我看来,您应该使用an actual noise function,而不是这个东西.至少它将在整个硬件上产生可预测的结果.

转载注明原文:android-噪声算法在三星Galaxy SIII(GLES)中失败 - 代码日志