我有一個簡單的遊戲,它直接使用EAGLLayer。我必須設置runloop和所有OpenGL ES樣板。由於OpenGL背景問題,遊戲有時會崩潰。我聽說GLKit有一個強大的樣板OpenGL視圖,用於處理OpenGL初始化和暫停。如何用GLKit的OpenGL視圖替換OpenGL ES 1.1 EAGLLayer視圖?
是否有可能爲OpenGL 1.1設置此GLKit視圖,我將從哪裏開始?
我有一個簡單的遊戲,它直接使用EAGLLayer。我必須設置runloop和所有OpenGL ES樣板。由於OpenGL背景問題,遊戲有時會崩潰。我聽說GLKit有一個強大的樣板OpenGL視圖,用於處理OpenGL初始化和暫停。如何用GLKit的OpenGL視圖替換OpenGL ES 1.1 EAGLLayer視圖?
是否有可能爲OpenGL 1.1設置此GLKit視圖,我將從哪裏開始?
這是一個相當開放的問題,所以最好先從GLKit獲取一些背景知識,然後在出現具體問題時提出更多問題。
看看使用「OpenGL遊戲」模板創建新的Xcode項目時得到的代碼 - 這會爲您設置一個GLKView
和GLKViewController
。還有一些關於這些類如何工作以及如何在Apple的OpenGL ES Programming Guide中使用它們的描述。
它的整體要點:GLKView
做所有的幀緩衝,渲染,和視口的設置和演示了基本的OpenGL ES繪圖(包括所有額外的幀緩衝雜耍的多重採樣,如果你想要的),這樣所有你需要做的是問題繪圖命令。 GLKViewController
擁有一個GLKView
,並運行一個調用您的繪圖代碼的動畫計時器 - 默認情況下,它確保在應用程序處於後臺時不調用您的繪圖代碼。
如果您使用的是GLKViewController
,並且僅使用GLKView
(子類或委託)繪圖方法進行OpenGL ES調用,則不必擔心由於GPU在後臺使用而導致崩潰。如果看到這樣的崩潰(在堆棧跟蹤中有gpus_ReturnNotPermittedKillClient
),它可以幫助強制GL在去後臺之前完成處理 - 在applicationWillResignActive:
中調用glFinish()
。
您是否設法在GLKit上運行OpenGLES 1.1?如果可以,請在這裏發佈解決方案? – Dorald