2012-03-05 78 views
2

我一直在試圖理解iPhone上的OpenGL ES 2.0很長一段時間,我已經能夠使它工作一些。但有一些我真的無法很好地理解。什麼是OpenGL上下文?或者它是爲了什麼?iphone上的OpenGL上下文。它做什麼/它是如何工作的?

我知道opengl不會創建一個工作。但我希望有人告訴我究竟是什麼。

因爲在做OpenGL時你甚至必須確保EAGL上下文是當前的。由於我沒有創造別人的必要性,所以我從來沒有注意確保它是現有的。

另外我是否只創建一個並傳遞它?

我是否必須銷燬它如果我要停止使用OpenGL?

爲什麼我可以使對象(如glkview)的上下文指針指向我創建的EAGL上下文?它是否具體對象?

我知道這可能是一個很奇怪的問題,但即使我試圖尋找在谷歌或在這裏的答案,我找不到一個簡潔的答案。

謝謝

回答

1

OpenGL上下文封裝了OpenGL實例的整個狀態。因此,創建上下文是初始化OpenGL的方式,設置上下文對於系統能夠理解稍後引用的紋理,幀緩衝區等名稱是必要的。因此,顯式使用多個上下文僅僅是封裝OpenGL狀態,而不是讓所有東西都變得隱含地全局化。

OpenGL是一種高度模態化的API,因此表面上看來不是不安全的線程。但是,上下文僅與單個線程相關聯,並且iOS允許共享組,這些上下文集合可以使用相同的命名資源(受一些小的手動同步)。到目前爲止,多種上下文最常見的用法是允許後臺準備昂貴的資源(例如加載大型紋理)而不中斷主線程上的用戶體驗。

如果您完成了上下文以允許將資源返回到系統,則應該銷燬上下文。 GLKView s在初始化時顯示上下文,並通過context屬性顯示其當前上下文以獲取和設置。

相關問題