当我在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可以处理更复杂的计算......有什么想法吗?
提前致谢。
答案 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分析工具对您的表现有何评价?