iOS 7和Cocos2d,glDrawElements上的exc_bad_access完全随机

时间:2013-10-07 23:29:11

标签: opengl-es cocos2d-iphone ios7

我已经开始玩游戏,我已经使用之前版本的iOS进行了测试,玩过数百次,在安装了iOS7并更新了xcode之后,我甚至没有发现过一次崩溃刚试过我的应用程序......现在有时会崩溃。崩溃不会发生在特定时刻或行动中,它们只是完全随机,有时会立即崩溃,有时候在2-3场比赛后,我试图做同样的事情来检查它是否特别适合但似乎不是,或至少不是这种方式明显的东西。我在游戏场景中使用精灵和蝙蝠侠。

正好在CCTextureAtlas.m文件中的这行代码(大约522)中:

glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, (GLvoid*) (start*6*sizeof(_indices[0])) );

因为我没有对代码进行任何更改,所以我非常怀疑这可能是我所做的事情,可能是与iOS7中影响cocos2d的变化相关的东西?我甚至不熟悉opengl,所以我很难理解发生了什么......

显然在游戏中我正在进行一些动画......

其他信息:

  • 在记忆警告之后不会发生这种情况(我根本没有记忆警告)。

1 个答案:

答案 0 :(得分:4)

每次调用ccGLBindVAO(0);后添加glDeleteVertexArrays(1, &_VAOname);,都会停止崩溃。

此调用有三个文件:

 CCDrawNode:164
 CCTextureAtlas:142
 CCParticleSystemQuad:164
 CCParticleSystemQuad:229
 CCParticleSystemQuad:492

就像在CCTextureAtlas中那样:

#if CC_TEXTURE_ATLAS_USE_VAO
    glDeleteVertexArrays(1, &_VAOname);
    ccGLBindVAO(0);
#endif

我正在使用cocos2d-iphone classic 2.2。

代码在这里:https://github.com/jllust/cocos2d-x/commit/1f3c1145362c921bf5232c4ffbca4a5245042bae

我做了一个cocos2d-iphone-classic拉取请求:https://github.com/zeraien/cocos2d-iphone-classic/commit/817a9c14a3aa1d4c162071521e45e2fcce473d77