严重滞后的OpenGL片段着色器

时间:2013-09-10 16:27:13

标签: ios optimization opengl-es lag fragment-shader

当我在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可以处理更复杂的计算......有什么想法吗?

提前致谢。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

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