2011-09-14 77 views
2

我正在創建一個遊戲循環,如果發現我落後於進程,我需要能夠調用onDrawFrame(從手動渲染器內部)以便「跳過幀」。Opengl-es手動調用onDrawFrame

目前我有一個調用

setRenderer(glSurfaceRenderer); 

有了這個GLSurfaceView類設置我的理解是onDrawFrame叫每個替。

我試圖把上面的調用方法裏面,這樣我可以從我的遊戲循環中調用它,但在遊戲圈的第二輪我的消息說

setRenderer has already been called for this instance 

崩潰是有辦法調用渲染手動每一幀

將剛剛調用

onDrawFrame 

法正常工作。或者是不是很好的做法,以這種方式控制渲染器時使用openGL

回答

4

我不明白如何調用setRenderer()也不手動調用onDrawFrame()在遊戲循環將解決任何事情。你應該重構你的渲染調用,以考慮它所需要的時間,也就是說基於時間的動畫。無論如何,在沒有調用eglMakeCurrent()的情況下,手動調用onDrawFrame()之前,任何繪圖調用都不起作用,因爲您同時具有渲染器和遊戲循環線程繪圖。

編輯:由於您使用的是GLSurfaceView,如果您覺得RENDERMODE_CONTINUOUSLY對您來說太慢,您可以從遊戲循環中調用requestRender()來觸發渲染。

+0

我已經做了一個基於時間的遊戲循環(對不起,我沒有說,應該有)我需要的是一種方法來確保渲染器繪製時,它的告訴。 – Jack

+0

如果渲染器速度很慢,那麼在沒有更多硬件投入的情況下,您無法做任何事情。 – Jasoneer

+0

那不是我的意思:/我正在使用的教程是[對糧食](obivam.net/index.php/the-android-game-loop)唯一的問題是,該教程使用畫布,而不是GL – Jack