一年前,我开发了一款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调用,它将运行正常(黑屏),直到我启动了应该是第二次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将崩溃