在三星Galaxy S3上的GLSL错误中的length()

时间:2013-06-19 08:44:58

标签: android opengl-es glsles

我在GLSL中为一款安卓游戏制作了一个着色器。 在这个着色器中,我必须计算当前像素和FX中心之间的长度

此着色器包含以下行:

//compute distance between current pixel and the center of the fx
highp vec2 tc = MCPosition - center;
int dist = int(length(tc));

if (length(tc) < 720.)
{
    ...

MCPosition是一个highp vec2,它包含当前像素的坐标。 center是一个highp vec2,包含FX的中心

这个着色器适用于许多设备(Galaxy Nexus,kindle fire,......)但是在三星Galaxy S3上,当预期结果超过256时,length(tc)返回一个不正确的值,就像它管理所有浮点值一样作为媒介。

有人能解释我为什么吗?

1 个答案:

答案 0 :(得分:1)

Galaxy S3使用Mali 400 gpu。不幸的是,这些gpus上的片段着色器仅支持片段着色器中的lowp和mediump精度。虽然length(tc)的预期结果小于mediump浮点数的最大值,但中间结果会更大。

也许你可以在找到它的长度之前缩放矢量:

if (length((1./720.)*tc) < 1.)
{
  ...