私のアプリは OpenGL ES 2.0 を扱っています。そして、カラーピッキングを使用して、タップ中にどのオブジェクトがタッチされたかを識別します。
オブジェクトを初めてタップするたびに、反応が非常に遅くなりますが、2回目は反応が非常に速くなります。たとえば、特定の画面での 1 回目のタップには 0.45 秒かかり、2 回目のタップには約 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秒もかかります。事前警告の後、2 回目 (0.01 秒) ほどかかることが予想されます。
私を困惑させるもう 1 つのこと: 最初のスロー コールはカラー ピッキング コールです。つまり、各オブジェクトが特定の色で画面外に表示され、識別に役立ちます。また、これらのオブジェクトが (テクスチャと共に) 画面に既に表示されていることも意味するため、頂点が事前に読み込まれると想定していました。このような問題は、色の選択時ではなく、画面に表示されるオブジェクトの読み込み時に顕著になります...
そのような行動に遭遇した人はいますか?どのように問題に対処しましたか?
乾杯 - ステファン