2009-09-04 87 views
2

OpenGL ES 1.1喜欢在我的iPhone程序崩溃时发生任何错误。如何调试OpenGL ES崩溃?

通常它发生在glDrawArrays里的某个地方,在堆栈上有几个glDestroyContext调用。

通常我通过插入

{ 
    GLint iErr = glGetError(); 
    if (iErr != GL_NO_ERROR) 
    { 
    NSLog(@"GL error: %d (0x%x)", iErr, iErr); 
    } 
} 

到处都是平分的问题。

但是有时这还不够。有没有其他方法可以在碰撞原因上获得有用的诊断信息?

回答

0

在控制台输出中是否有任何错误消息?只是从描述中,我想知道你是否得到了一个例外的BAD_ACCESS。如果我的假设是正确的,那么您可能会将错误的数组传递给glVertexPointer,glColorPointer或其他相关函数之一。

我正确地认为它在glDrawArrays中死亡,永远不会回来吗?换句话说,glDrawArrays之后没有办法调用glGetError,因为程序已经崩溃了?

+0

没有额外的控制台消息(也就是说,除了崩溃类型 - 确实通常是不好的访问)。通常它可能是一些不好的输入数据,或者我忘记启用某些状态。但需要时间才能找到具体的问题。通常我不得不求助于二分查找。 :( – 2009-10-01 16:16:55

+0

我会检查以确保你没有试图绘制比你的缓冲区包含更多的三角形,这听起来像OpenGL进入它不应该的内存,这可能意味着你告诉它,你有更多的顶点你真的在缓冲区中。 – 2009-10-03 06:04:02