0

当我在 iPhone 4 上运行片段着色器时,它会导致严重滞后。我试图评论部分计算,但是即使我几乎没有在片段着色器中进行任何计算,仍然存在一些抖动。

// Fragment Shader Code
uniform sampler2D texture;
varying lowp vec2 fragmentTexCoords;
uniform lowp float passAlpha;
uniform lowp vec2 inPosition;
uniform lowp float varUniform;
void main()
{
    gl_FragColor = texture2D(texture, fragmentTexCoords);
    lowp float disY = gl_FragCoord.y - inPosition.y;
    lowp float disMax = 250.0;
    lowp float coeff = 1.0 - varUniform;
    gl_FragColor.rgb *= coeff;
}

//My render function is:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glFlush();

我仍然不确定可能是什么问题,我确信 iPhone 可以处理更复杂的计算......有什么想法吗?

提前致谢。

4

2 回答 2

0

您确定卡顿是由您的片段着色器引起的吗?您可以通过从片段着色器中删除大多数操作来验证这一点吗?我问是因为你真的没有在你的着色器代码中做任何太昂贵的事情,而且导致任何性能问题都会很奇怪。你确定你没有在更新循环中做任何其他事情,比如上传纹理吗?xcode 分析工具对您的性能有何评价?

于 2013-09-11T05:44:28.007 回答
0

我会尝试这个,它可以避免由于声明变量的方式而以更高的精度进行计算的几种情况......如果这可以提高你的性能,我可以进一步解释它为什么起作用。

// Fragment Shader Code
uniform lowp sampler2D texture;
varying lowp vec2      fragmentTexCoords;
uniform lowp float     passAlpha;
uniform lowp vec2      inPosition;
uniform lowp float     varUniform;

void main ()
{
    lowp vec4  color  = texture2D (texture, fragmentTexCoords);
    lowp float disY   = gl_FragCoord.y - inPosition.y;
    lowp float disMax = 250.0;
    lowp float coeff  = 1.0 - varUniform;
    color.rgb        *= coeff;
    gl_FragColor      = color;
}
于 2013-09-10T16:44:43.387 回答