ios - 游戏在 iOS 4.3 上运行良好,但在 iOS 5 上的 glDrawArrays 上崩溃

标签 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 和模拟器上运行它。 ..它在第一次调用 glDrawArrays() 时崩溃。

所以我觉得这很奇怪,因为当我上次工作时它确实运行得很好。然后我尝试在 iOS 4.3 上运行,效果很好! 结果发现它在 iOS 上崩溃了。 5.0 及更高版本。我还尝试构建更高的目标操作系统版本,但这没有任何区别。

应用程序在由 glDrawArrays 执行的 gleRunVertexSubmitImmediate 调用(带有 EXC_BAD_ACCESS 消息,地址 0x0)处崩溃。它总是在第一个 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 模拟器中仍然运行良好。

最佳答案

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

glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);

如果启用但未设置 glDrawArrays 将崩溃

关于ios - 游戏在 iOS 4.3 上运行良好,但在 iOS 5 上的 glDrawArrays 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12466539/

相关文章:

ios - 分配用于在 Xcode 中添加代码模板的快捷键

ios - 如何使用 UIKit Dynamics 实现与 iOS 7 Reminders 应用程序相同的动画效果?

ios5 - GLPaint 保存功能(使用背景图像保存当前屏幕)

android - 如何旋转GLSurfaceView?

objective-c - SpriteKit中的EXC_BAD_ACCESS(代码= 1,地址= 0x0)

ios - 当对象最初按其中心旋转时,围绕点旋转对象

ios - 附加带有计算的纬度和经度的 Json 数组

javascript - 如何在 WebGL 中沿 x 轴移动纹理?

iphone - 不确定如何修复此 EXC_BAD_ACCESS 错误

ios - 滚动 UITableView 时出现 EXC_BAD_ACCESS 错误