我在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)返回一个不正确的值,就像它管理所有浮点值一样作为媒介。
有人能解释我为什么吗?
答案 0 :(得分:1)
Galaxy S3使用Mali 400 gpu。不幸的是,这些gpus上的片段着色器仅支持片段着色器中的lowp和mediump精度。虽然length(tc)
的预期结果小于mediump浮点数的最大值,但中间结果会更大。
也许你可以在找到它的长度之前缩放矢量:
if (length((1./720.)*tc) < 1.)
{
...