2013-01-13 35 views
1

最近,我一直在努力學習如何使用OpenGL ES 2.0和GLKit來創建簡單的2D遊戲。我一直在關注this tutorial by Ray Wenderlich,到目前爲止它非常有幫助。然而,在分析我的項目(和他的)泄漏時,我發現GLKBaseEffectprepareToDraw:(特別是,GLKShaderBlockNodecopyWithZone)正在泄漏 - 順便說一下,我使用的是ARC。經過相當多的搜索,似乎這是GLKBaseEffect中的一個錯誤,我對此無能爲力。這是真的?我發現的唯一解決方案是完全取消GLKBaseEffect寫一個GLKBaseEffect Substitute

如果是這樣的話,我必須推出我自己的自定義頂點和片段着色器。不過,我不知道該怎麼做。我會很感激任何資源或幫助創建自定義着色器和適應上述教程中的代碼來使用它們。

非常感謝您的時間。 :)

+1

看起來像[這個答案](http://stackoverflow.com/a/11642818/1354100)可能是你在找什麼。 – Bejmax

+0

@Bejmax謝謝。如果我明天也可以找到關於OpenGL ES 2.0着色器的好教程,這可能會有所幫助。我發現很難通過源代碼獲得良好的理解。 :) – Metabble

回答

1

那麼,經過一段時間的拖延之後,我決定硬着頭皮來做。現在泄漏消失了,儘管它讓我花了一段時間纔得到它的工作。我通過OpenGL ES 2.0 for iPhone, Chapter 4閱讀並瞭解了頂點和片段着色器以及如何編譯它們並將它們鏈接起來。在瞭解它的工作原理之後,我將作者的GLProgram輔助類放入我的項目中,以處理所有的樣板問題並迅速開始工作。然後,我創建了兩個着色器,幾乎與發現的着色器here相同。

我按照他的指示獲取屬性和統一的位置並將它們存儲在一個結構中,並在初始化時將它們一次全部傳遞給我的精靈對象。然後,當我開始使用GLKBaseEffect時,我已經通過了所有關於屬性的信息;唯一的區別(除了手動將紋理綁定到紋理單元之外)是我必須在自己中傳遞modelviewMatrixprojectionMatrix制服,而不是設置GLKBaseEffect屬性。

1

對於初學者來說,在XCode中執行File-> New Project並選擇「OpenGL Game」。

運行它,如果你選擇,你會得到2個彼此相鄰的立方體。

看看shader.fsh和shader.vsh。在viewcontroller.m中,檢查compilerShader,linkProgram和validateProgram(這些編譯着色器)。

檢查該示例應用程序應該足以讓您瞭解如何讓着色器運行,並從這一點着手搜索某些OpenGL ES 2.0着色器教程或查看Apple的一些示例應用程序代碼庫。

注:從蘋果內置的簡單效果到着色器是一個相當寬的「峽谷」。

+0

+1。我較早看過他們,並不太明白。看起來有點複雜,因爲它們有兩個立方體,一個使用GLKit,一個使用自定義着色器。儘管這是一個漫長的一天。我會試着在明天更徹底地檢查Apple的模板。 – Metabble