私はSDLとOpenGLでプロジェクトに取り組んでいます。このゲームは、Windows、Linux、OS X、iOSでうまく動作します。ただし、Android版は特に私の電話で問題を示しています。私は別のデバイスをテストしましたが、そこでもうまく機能します。
私が直面している問題は視覚的な不具合です。これはバーストで発生します。たとえば、90フレームは問題なく、40フレームはグリッチです。グリッチ自体は説明するのが難しいですが、私は試してみます。画面が部分的に正しく更新され(携帯電話の上部から約半分まで)、部分的にちらつきます。ちらつき効果は、ある種の前後のジャンプです。ダブルバッファリングに関係していると思います。画面に表示されるのは、フレームごとに前後にジャンプするためです。画面の半分が時間的に1フレーム、次のフレームが2フレーム遅れているようです。エヒタナハの行列のように、私はあなたが言うことができると思います。チャートを下っていくときに時間が経過するチャートにプロットすると、
left half | right half (phone is in landscape)
------------------------
time 1 | 1 1
time 2 | 2 2
time 3 | 3 1
time 4 | 4 4
time 5 | 5 3
time 6 | 6 6
time 7 | 7 5
time 8 | 8 8
time 9 | 9 7
したがって、右半分は時間の1フレームであり、次のフレームは前のフレームを示しています。これは、ダブルバッファリングに問題があるという私の理論を裏付けています。画面に表示される前にバックバッファを完全に更新することができないようです。
また、画面の正常とグリッチの分割はフレームごとに異なります。この点は、同期の問題であり、何が起こっているのかによって大きく異なることを証明していると思います。呼び出しのglFinish();
前に追加してSDL_GL_SwapWindow();
も効果はありません。
バージョン情報: SDLは、オンになっているvsyncを報告します。しかし、私はこれは引き裂かないと思います。私の電話はSamsung Galaxy S3 miniであり、Android 5.1.1(CM12)を実行しており、GPU(Mali-400)はOpenGL ES 2.0をサポートしています。他のゲームは私の電話で大丈夫です。