Iphone:OpenGL ES 2.0 - 颜色选择方法第一次反应缓慢

时间:2013-06-07 20:57:04

标签: ios performance opengl-es-2.0

我的应用处理OpenGL ES 2.0;并且我使用颜色选择来识别在点击期间触摸了哪个对象。

每当我第一次点击某个物体时,它的反应非常缓慢,但第二次反应很快。例如,在特定屏幕上第一次点击需要0.45秒,第二次需要大约0.01秒。

调试时我已经发现麻烦的代码如下:

    [effectTmp prepareToDraw];
    glEnableVertexAttribArray(GLKVertexAttribPosition);
    glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(MaterialVertexData3D), &vertexDataMaterial[0].vertex);
    glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, sizeof(MaterialVertexData3D), &vertexDataMaterial[0].normal);
    glDrawArrays(GL_TRIANGLES, 0, [drawObjectTmp getSizeFromVertexIndicesArray]);
    glDisableVertexAttribArray(GLKVertexAttribPosition);

我已经阅读过对象的屏幕预加载会有所帮助。从日志中,我可以看到这些物体的预加载需要与第一次相同,即0.45秒。但是,当我第一次点击时,它也需要0.45秒。在预警之后,预期将是第二次(0.01秒)所需的时间。

让我感到困惑的另一件事是:第一个慢速通话是一个颜色拣选电话;意味着每个对象都在屏幕外显示特定的颜色,有助于识别它们。这也意味着这些对象已经在屏幕上可见(带有纹理),所以我假设顶点会被预加载;当这些物体在屏幕上显示时,这种问题在加载时是显而易见的,而不是在采摘颜色时......

你们有没有遇到过这样的行为? 你是如何解决这个问题的?

欢呼声, -Stéphane

1 个答案:

答案 0 :(得分:0)

即使计时器功能显示,问题也不是来自颜色选择算法。

在实现淡出/淡入屏幕功能的同时,我意识到随着屏幕快速消失,颜色选择方法很快;然而,下一个屏幕的淡入效果很慢。它来自于纹理,即使加载(这里使用Glktextureloader),实际上在第一次渲染时需要一些时间。

解决方法是在应用的初始化阶段在屏幕外显示这些纹理对象。