0

我正在尝试在 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>

象素兽

4

1 回答 1

0

我认为您尝试做的正确方法是:

  1. 创建您自己的自定义 CCSprite/CCNode 类;

  2. 将您在 Apple 示例中使用的所有 GL 代码放入该类(即覆盖该类的draworvisit方法)。

如果您想尝试使两个 GL 视图很好地协同工作,您可以尝试阅读这篇文章,它将解释如何将不同的缓冲区与视图相关联。

至于第一种方法,看看这个帖子这个文章。

确实,第一种方法可能更复杂(取决于 Apple 示例如何进行 open gl),但会使用更少的内存并且会比第二种方法更优化。

于 2012-07-05T09:19:51.897 回答