0

我在 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) 返回不正确的值,就像它将所有浮点值管理为 mediump 一样。

有人可以解释一下为什么吗?

4

1 回答 1

1

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

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

if (length((1./720.)*tc) < 1.)
{
  ...
于 2013-06-19T15:53:10.393 回答