使用VBO时EXC_BAD_ACCESS

时间:2011-09-30 15:06:53

标签: c++ opengl opengl-es exc-bad-access vbo

我使用VBO进行了一些渲染。现在我想添加VBO以进行更复杂的渲染。我现在只是创建一个VBO,保持原有的渲染效果,现在我不用渲染VBO。这是代码:

GLuint bufId;
glGenBuffers(1, &bufId);
glBindBuffer(type, bufId);
glBufferData(type, size, 0, GL_STATIC_DRAW);
//size = 100000;

这是关于VBO的唯一代码。但是如果没有评论最后一个笔划,那么在绘制GL_TRIANGLE_STRIP时我会在旧渲染中得到EXC_BAD_ACCESS。我在此错误访问之前放了glGetError()并返回0.问题是什么?感谢

2 个答案:

答案 0 :(得分:2)

EXC_BAD_ACCESS表示您已尝试读取或写入尚未映射到您的进程的内存。

有很多方法可以实现,并且glGetError()无法知道它。

我写了这篇博客,试图帮助你调试它。它适用于iPhone,但其中的所有内容也适用于Mac应用程序。

http://loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

一个关键点是EXC_BAD_ACCESS不必在错误点发生 - 导致它的错误可能已经运行,并且响应中发生了错误的访问 - 崩溃点可能不相关一点都不我的博客通过一些调试技术来确定问题的确切位置。例如,它可能与GL无关。

在您的代码中,sizetype的价值是多少?它可能与此无关。

要在到目前为止的所有代码中检查一些事项。

  1. 双免费
  2. 数组上的读/写越界
  3. Bad casts

答案 1 :(得分:1)

我发现了问题。如果你想绘制它,你必须取消绑定VBO:

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

之后一切正常