【问题标题】:Iphone: OpenGL ES 2.0 - Color picking method reacts slow the 1st timeIphone:OpenGL ES 2.0 - 颜色拾取方法第一次反应缓慢
【发布时间】: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


    【解决方案1】:

    问题不是来自颜色选择算法,即使计时器功能表明如此。

    在实现淡出/淡入屏幕功能时,我意识到颜色选择方法很快,因为屏幕淡出很快;但是下一个屏幕的淡入很慢。这是因为纹理,即使已加载(此处使用 Glktextureloader),在第一次渲染时实际上会花费一些时间。

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

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 2018-08-08
      相关资源
      最近更新 更多