一年前我开发了一款 iPhone 游戏,并决定从我离开的地方继续。因此,我下载了在 Mac OS X 10.7.4 上运行的最新版本的 Xcode (4.4.1),并使用 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 模拟器中仍然运行良好。