【问题标题】:EXC_BAD_ACCESS when capturing a GPU frame捕获 GPU 帧时的 EXC_BAD_ACCESS
【发布时间】:2014-11-24 19:31:11
【问题描述】:

我试图调试为什么我没有看到正在渲染的新对象(四边形),因此我使用了 Xcode 的“捕获 GPU 帧”功能。它通常工作正常,但现在它在 glDrawElements 期间的另一个渲染调用中给了我 EXC_BAD_ACCESS

请注意,它似乎类似于我见过的错误,与 VBO 的混合使用有关,而不是。但是,我肯定会在使用后取消绑定 VBO,并禁用顶点属性数组:

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

glDisableVertexAttribArray(posAttr);
glDisableVertexAttribArray(texCoordAttr);

(另外,请记住,我只是在使用“捕获 GPU 帧”时才会崩溃,而不是一直)

我可能做错了什么?或者这可能是 Xcode 中的错误...?

【问题讨论】:

  • 另外,glGetError() 没有收到任何信息。
  • 请注意,我已经消除了 VBO 作为一个问题:我将绘制代码转换为绝对不使用 VBO。
  • 我还修复了我的原始四边形没有被渲染的原因(我的大小参数为零,所有顶点都在同一个地方)。但是,这并没有解决崩溃问题。最好还是追踪它!
  • 这很可能是尝试访问超出 VBO 范围的数据的结果。如果您使用发布方案而不是调试,您可能会遇到同样的崩溃。无论如何,这信息太少,无法确定任何事情,但我会开始查看您的缓冲区数据和绘图调用的完整性。也有可能通过使用多个上下文或多线程而失去作用域。

标签: ios xcode opengl-es crash vbo


【解决方案1】:

这确实是由于遗留了一些 GL 状态,特别是 glVertexAttribPointer。我没有抓住它的原因是因为它是直接在 3d 引擎本身内部的操作顺序问题:在清除某些状态之前,子对象正在被迭代(和渲染)。

(抱歉,这是一个乏味的项目特定问题)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    相关资源
    最近更新 更多