我的应用处理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
答案 0 :(得分:0)
即使计时器功能显示,问题也不是来自颜色选择算法。
在实现淡出/淡入屏幕功能的同时,我意识到随着屏幕快速消失,颜色选择方法很快;然而,下一个屏幕的淡入效果很慢。它来自于纹理,即使加载(这里使用Glktextureloader),实际上在第一次渲染时需要一些时间。
解决方法是在应用的初始化阶段在屏幕外显示这些纹理对象。