我正在尝试在 iPad 上的 Cocos2D 应用程序中插入 OpenGL ES 3D 视图。我对这些框架比较陌生,所以我基本上在我的 CCLayer 中添加了这些行:
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 部分的代码基于来自 Apple Developer 的示例代码:http: //developer.apple.com/library/mac/#samplecode/GLEssentials/Introduction/Intro.html 我所做的唯一更改是以编程方式创建我的视图(没有 xib 文件,initWithCoder -> initWithFrame ...),并且我还将 EAGLView 类和文件重命名为 EAGL3DView,以免干扰 Cocos2D 附带的 EAGLView。
现在谈谈我的问题:当我运行这些时,我得到一个“-[EAGLView swapBuffers] 中的 OpenGL 错误 0x0502”,3D 视图被正确显示,但其他情况下是完全粉红色的屏幕。
我进入了 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 视图对 OpenGL ES 渲染缓冲区存在某种不正确的覆盖(因为 Cocos2d 也使用 OpenGL ES)导致 Cocos2D 视图无法正常工作。这是我到目前为止所得到的,我无法准确地弄清楚需要做什么才能修复它。所以你怎么看?
希望这只是一个新手问题……</p>
象素兽