【发布时间】:2013-06-16 05:30:16
【问题描述】:
我的应用处理 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 秒)的时间。
让我困惑的另一件事是:第一个慢调用是颜色选择调用;这意味着每个对象都以一种有助于识别它们的特定颜色显示在屏幕外。这也意味着这些对象已经在屏幕上可见(带有它们的纹理),所以我会假设顶点会被预加载;并且当对象显示在屏幕上时,此类问题在加载对象时会很明显,而不是在颜色选择期间...
你们中有人遇到过这种行为吗? 您是/将如何解决这个问题的?
干杯, -斯蒂芬
【问题讨论】:
标签: ios performance opengl-es-2.0