我有一个使用用OpenGL ES 2.0编写的用户界面的iPad应用程序,默认情况下隐藏了一些用户界面元素,当我需要向他们展示时,在一个包含约20个其他内部控件的控件上,为300-500毫秒),使用Instruments.app我确定,当我渲染每个独特的对象时,渲染至少一次之后渲染第一次需要更长的时间,在渲染时间是巨大的。下面是我对渲染代码,该代码是通过仪器收集所有这些延迟所示:在iPad上第一次调用glDrawArrays的速度非常缓慢
- (void)render:(id <ESRenderer>)renderer
{
[shader useShader];
glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, _squareVertices);
glEnableVertexAttribArray(ATTRIB_TEXTCOORD);
glVertexAttribPointer(ATTRIB_TEXTCOORD, 2, GL_SHORT, 0, 0, coords);
float x1 = self.position.x;
float y1 = self.position.y;
glUniform1f(shader.ext_uniforms[UNIFORM_TRANSLATE_X], -x1+_squareVertices[0]);
glUniform1f(shader.ext_uniforms[UNIFORM_TRANSLATE_Y], -y1+_squareVertices[1]);
glUniform1f(shader.ext_uniforms[UNIFORM_ROTATE], self.rotation);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableVertexAttribArray(ATTRIB_VERTEX);
glDisableVertexAttribArray(ATTRIB_TEXTCOORD);
}
当至少调用一次它完美地快。 我的着色器也很简单:
vec4 col = texture2D(texture, coordVarying);
gl_FragColor = col;
谢谢!
数据量只有8个浮点数加上几个shorts作为texcoords,着色器也非常小,我加载,绑定变量并在应用加载时链接它。所以在我的[着色器useShader]调用如下: - (void)useShader { \t glUseProgram(_program); \t glBindTexture(GL_TEXTURE_2D,_texture); \t glUniform1i(uniforms [UNIFORM_TEXTURE],0); } – 2010-11-02 14:46:08
问题出在着色器加载中,有一些非常小的着色器在开始时被加载和链接,但正如您所说的实际上在第一次使用时启动的转移,我在加载时使用了着色器,并且没有滞后秒杀, 谢谢! – 2010-11-02 15:52:57