2012-07-05 16 views
0

我試圖在Cad上的Cocos2D應用程序中插入OpenGL ES 3D視圖。我是比較新的這些框架,所以我基本上都添加在我CCLayer這些線路:Cocos2D應用程序中的OpenGL ES 3D視圖的緩衝區問題

CGRect rScreen; 
// some code to define the bounds and origin of my frame 
EAGL3DView * view3d = [[EAGL3DView alloc] initWithFrame:rScreen] ; 

[[[CCDirector sharedDirector] openGLView] addSubview: view3d]; 

[view3d startAnimation] 

我使用的3D部分的代碼是基於蘋果開發示例代碼:http://developer.apple.com/library/mac/#samplecode/GLEssentials/Introduction/Intro.html 唯一我做的更改是以編程方式創建我的視圖(沒有xib文件,initWithCoder - > initWithFrame ...),並且我還將EAGLView類&文件重命名爲EAGL3DView,以免干擾隨Cocos2D一起提供的EAGLView。

現在到我的問題:當我運行這些,我得到一個「OpenGL錯誤0x0502在 - [EAGLView swapBuffers]」,三維視圖正確顯示,但與完全粉紅色的屏幕,否則。

我走進在cocos2d EAGLView的swapBuffers功能,和原來的代碼是唯一重要的塊是這一個:

if(![context_ presentRenderbuffer:GL_RENDERBUFFER_OES]) 
    CCLOG(@"cocos2d: Failed to swap renderbuffer in %s\n", __FUNCTION__); 

其中順便說一句不進入「if」條件(presentRenderbuffer做不返回空值,但是不正確,儘管CHECK_GL_ERROR()事後給出了0x0502錯誤)。

所以我明白,我的3D視圖(因爲Cocos2d也使用OpenGL ES)導致Cocos2D視圖無法正常工作,導致OpenGL ES渲染緩衝區出現某種不正確的重寫。這是我迄今爲止得到的結果,我無法弄清楚爲了解決問題需要做些什麼。所以你怎麼看?

希望這只是一個新手的問​​題...

Pixelvore

+0

聽起來就像你試圖設置兩個單獨的OpenGL視圖。我不會推薦它,如果它完全可能在iOS上。 – LearnCocos2D 2012-07-05 19:53:47

回答

0

我認爲你正在做什麼是正確的做法:

  1. 創建自己的定製CCSprite/CCNode類;

  2. 將您正在使用的Apple樣本中的所有GL代碼放入該類中(即,覆蓋該類的drawvisit方法)。

如果您想嘗試,使兩國GL觀點很好地一起工作,你可以嘗試閱讀this post,這將解釋如何不同的緩衝器,以你的觀點聯繫起來。

至於第一種方法,看看這postthis one。爲了真實,第一種方法可能更復雜(取決於蘋果示例如何做開放式gl),但會使用更少的內存,並且會更好地優化第二種方法。

+0

我想我想保持這種結構(在CCDirector中創建一個子視圖),因爲我在應用程序中插入了一個PDF閱讀器和一個電影播放器​​,它工作得很好。在我看來,CCSprites只是一張可以在屏幕上顯示圖像的貼紙(SDL方式),但也許我錯了? [編輯]感謝您的鏈接雖然很多,它似乎正是我所需要的。我會研究它! – Pixelvore 2012-07-05 09:36:08

+0

事實上,OpenGL管道比其他已經設計用於插入其他視圖的視圖更加「微妙」。這就是爲什麼我給予的鏈接可以爲每個OpenGL視圖處理不同的緩衝區。當然,這在內存方面會有成本。另一方面,CCNode是您可以覆蓋由cocos2d完成的開放GL繪圖的地方。我會添加一些鏈接到我的答案。無論如何,我希望它有幫助。 – sergio 2012-07-05 10:29:46

+0

我已經研究了多個緩衝區解決方案,我仍然需要弄清楚如何使它工作:我確實有2個不同的緩衝區,但問題是我必須使用glBindRenderbuffer(「在相同的地方」)將它們綁定(GL_RENDERBUFFER ,...),我認爲這是導致問題發生的原因。似乎有些東西我在創建它們之後附加緩衝區時會被誤解。 我會研究CCNode解決方案,它確實看起來有些複雜,但看起來好像可以在任何情況下工作。 無論如何非常感謝您的幫助。 – Pixelvore 2012-07-05 10:46:54