游戏在iOS 4.3上正常运行,但在glDrawArrays上的iOS 5上崩溃

时间:2012-09-17 20:21:10

标签: ios opengl-es exc-bad-access

我一年前开发了一款iPhone游戏,并决定选择我离开的地方。 所以我下载了最新版本的Xcode(4.4.1),我在Mac OS X 10.7.4上运行,我使用iOS 5.1 SDK(iOS 4.0构建)构建我的游戏,并在iOS 5.1和iOS上的模拟器中运行。 ..它在第一次glDrawArrays()调用时崩溃了。

所以我认为这很奇怪,因为当我上次工作时它确实运行得非常好。然后我尝试在iOS 4.3上运行,它工作正常! 原来它从iOS崩溃了。 5.0及以上。我也尝试构建更高目标操作系统版本,但这没有任何区别。

应用程序在gleRunVertexSubmitImmediate调用(带有EXC_BAD_ACCESS消息,地址0x0)时崩溃,该调用由glDrawArrays执行。在第一次glDrawArrays调用时总是出错,因为如果我评论第一个,它运行正常(黑屏),直到我发起本应该是第二次glDrawArrays调用并且它再次崩溃。

对加载的数组(纹理图,顶点,gl上下文)进行了一些检查,但是我找不到任何空引用。 在启用僵尸的情况下运行并不能为我提供更多信息。

我想知道是否有人遇到过同样的问题,或者知道是什么原因引起的。

编辑:代码示例是请求。它发生在Apple发布的GLTexture.m(v1.7)中,因为这是调用glDrawArrays的代码中的第一个点。

- (void) drawInRect:(CGRect)rect
{
    CLogGL();
    GLfloat  coordinates[] = {  0,      _maxT,
                                _maxS,  _maxT,
                                0,      0,
                                _maxS,  0  };
    GLfloat vertices[] = {  rect.origin.x,                          rect.origin.y,                          0.0,
                            rect.origin.x + rect.size.width,        rect.origin.y,                          0.0,
                            rect.origin.x,                          rect.origin.y + rect.size.height,       0.0,
                            rect.origin.x + rect.size.width,        rect.origin.y + rect.size.height,       0.0 };

    glBindTexture(GL_TEXTURE_2D, _name);
    glVertexPointer(3, GL_FLOAT, 0, vertices);
    glTexCoordPointer(2, GL_FLOAT, 0, coordinates);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);  // Crash happens here
}

编辑:堆栈跟踪的屏幕截图: stacktrace1.jpg stacktrace2.jpg stacktrace3.jpg

编辑:似乎它在4.2.2上崩溃了(在我的iPod touch上),但在4.3模拟器中运行良好。

1 个答案:

答案 0 :(得分:2)

也许你的normal_array或color_array在某处被启用了。尝试禁用它们:

glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);

如果它们已启用但未设置,则glDrawArrays将崩溃