2011-09-30 94 views
1

我用VBO做了一些渲染。现在我想添加更复杂的渲染VBO。我现在只是创建一个VBO,保持原来的渲染状态,而现在我不向VBO渲染任何内容。这里是代码:使用VBO时EXC_BAD_ACCESS

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.问题是什么?谢谢

回答

1

我发现这个问题。你必须取消绑定VBO,如果你想用出它来绘制:在那之后一切工作

+0

我有同样的崩溃,在我的情况下,解决了它与'glBindVertexArray(0)'解绑定VAO' –

2

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

有很多方法可能发生,并且glGetError()无法知道它。

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

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

的一个关键点是,EXC_BAD_ACCESS没有在错误的点发生 - 导致它可能已经运行的bug,和坏的接入响应发生的事情 - 在碰撞点可能根本不相关。我的博客通过一些调试技巧来找出问题的真相。例如,它可能与GL无关。

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

有些事情要检查所有代码已经运行到这一点。

  1. 的双自由
  2. 出界外读/阵列上写
  3. 坏蒙上
+0

感谢你回答

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

。 size = 100000. type = GL_ARRAY_BUFFER – Andrew

+0

顺便说一句:如果使用GL_ELEMENT_ARRAY_BUFFER – Andrew

+0

没有问题glBufferData的文档说大小是32的倍数。(可能不是问题,但可能导致另一个) –