【问题标题】:How to debug OpenGL ES crashes?如何调试 OpenGL ES 崩溃?
【发布时间】:2009-09-04 00:23:36
【问题描述】:

如果出现任何小问题,OpenGL ES 1.1 喜欢让我的 iPhone 程序崩溃。

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

通常我通过插入来平分问题

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

到处都是。

但有时这还不够。是否有其他方法可以获得有关崩溃原因的有用诊断信息?

【问题讨论】:

    标签: iphone debugging opengl-es crash


    【解决方案1】:

    您是否在控制台输出中收到任何错误消息?仅从描述中,我想知道您是否收到BAD_ACCESS 异常。如果我的假设是正确的,那么您可能将错误的数组传递给 glVertexPointerglColorPointer 或其他相关函数之一。

    我是否正确假设它在glDrawArrays 中死去并且永远不会回来?也就是说,在glDrawArrays之后无法调用glGetError,因为程序已经crash了?

    【讨论】:

    • 没有额外的控制台消息(也就是说,除了崩溃类型——这通常是错误的访问)。通常它要么是一些错误的输入数据,要么是我忘记启用某些状态。但是具体哪里出了问题需要时间。通常我不得不求助于二进制搜索。 :(
    • 我会检查以确保您没有尝试绘制比缓冲区包含的更多的三角形。听起来 OpenGL 正在进入它不应该进入的内存,这可能意味着你告诉它你的顶点比缓冲区中的实际顶点更多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多