2013-05-06 62 views
1

我的理解是,eglSwapBuffers被稱爲使用GLSurfaceview時自動每一幀,所以:Android eglSwapBuffers - 手動控制? (安卓)

onDrawFrame() 
{ 

//Your drawing code here 

//system swaps buffers automatically 

} 

有沒有什麼辦法可言,我可以在手動禁用此行爲,並呼籲eglSwapBuffers自己/每個onDrawFrame()結束或在我需要的時候壓縮它(例如,讓它在我需要時運行,但在需要時停止運行)。

如果可能的話,我會很感激,如果有人可以解釋如何能同時使用RENDERMODE_CONTINUOUSLY & RENDERMODE_WHEN_DIRTY

當然,我的理解可能有誤時可實現(如果可能的話),所以請糾正我,如果它是:-)

回答

2

GLSurfaceView不是特別靈活。如果返回「do draw」布爾值,那將會很好;那麼你在安排遊戲循環的過程中會有更多的靈活性。 GLSurfaceView不會這樣工作,但是,所以你的選擇是有限的。

你有兩種基本方法,如果你想避免渲染每一幀:

(1)使用RENDERMODE_WHEN_DIRTY,並且只要求當你知道你將要當交換緩衝完成渲染。如果你的遊戲邏輯沒有在渲染線程上運行,並且你不想以60fps運行,那麼這就是你想要做的事情。

(2)下載GLSurfaceView的源代碼,將它合併到您的應用程序中,然後修改它以執行所需操作。

+0

感謝@fadden此刻我只是在使用RENDERMODE_CONTINUOUSLY,雖然我喜歡修改GLSurfaceView的想法,這可能是我未來研究的內容。乾杯。 – Zippy 2014-08-29 20:02:47

+1

另外值得一看:https://source.android.com/devices/graphics/architecture.html#loops – fadden 2014-08-30 04:41:18

+0

有趣的是,Android遊戲循環中的一篇'官方'文章,從未見過之前,我將閱讀 - 很好找! – Zippy 2014-08-31 19:16:38