【发布时间】:2012-07-05 09:04:20
【问题描述】:
我正在尝试在 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 视图(因为 Cocos2d 也使用 OpenGL ES)对 OpenGL ES 渲染缓冲区进行了某种不正确的覆盖,导致 Cocos2D 视图无法正常工作。这是我到目前为止所得到的,我无法准确地弄清楚需要做什么才能修复它。那你怎么看?
希望这只是一个新手问题……
像素兽
【问题讨论】:
-
听起来您正在尝试设置两个单独的 OpenGL 视图。如果在 iOS 上可行,我不会推荐它。
标签: opengl-es cocos2d-iphone buffer