3

私の理解では、GLSurfaceview を使用すると、eglSwapBuffers がフレームごとに自動的に呼び出されるので、次のようになります。

onDrawFrame()
{

//Your drawing code here

//system swaps buffers automatically

}

この動作を無効にして、各 onDrawFrame() の最後に自分自身/手動で eglSwapBuffers を呼び出すか、必要なときにそれを抑制する (つまり、実行したいときに実行させるが実行を停止する) 方法はありますか?必要なとき)。

可能であれば、RENDERMODE_CONTINUOUSLY と RENDERMODE_WHEN_DIRTY の両方を使用する場合に、これをどのように達成できるか (可能であれば) 誰かが説明してくれれば幸いです。

もちろん、私の理解が間違っているかもしれませんので、間違っている場合は訂正してください:-)

4

1 に答える 1

3

GLSurfaceView特に柔軟ではありません。onDrawFrame「do draw」ブール値が返されたらいいですね。そうすれば、ゲーム ループをどのように配置するかについて、もう少し柔軟性が得られます。 GLSurfaceViewただし、そのようには機能しないため、選択肢は限られています。

すべてのフレームをレンダリングしないようにする場合は、2 つの基本的な方法があります。

(1) を使用RENDERMODE_WHEN_DIRTYし、完了時にバッファをスワップすることがわかっている場合にのみレンダリングを要求しますonDrawFrame。これは、ゲーム ロジックがレンダリング スレッドで実行されず、60fps で実行しようとしていない場合に、とにかくやりたいことのほとんどです。

(2) のソースをダウンロードし、GLSurfaceViewそれをアプリにマージし、必要に応じて変更します。

于 2013-05-08T17:57:36.717 に答える