Opengles 混合 VBO 和非 VBO 渲染给出 EXC_BAD_ACCESS
Posted
技术标签:
【中文标题】Opengles 混合 VBO 和非 VBO 渲染给出 EXC_BAD_ACCESS【英文标题】:Opengles mixing VBO and non VBO renders gives EXC_BAD_ACCESS 【发布时间】:2011-09-03 11:11:38 【问题描述】:大家好。我试图呈现如下所示的两种方法。 RenderA() 正在使用 VBO,而 RenderB() 不是。当它到达 RenderB() 中的 glDrawArrays() 时,我得到一个 EXC_BAD_ACCESS 错误。
如果我不创建和使用任何 VBO,即当我注释掉 CreateVBOs() 和 RenderA() 时,RenderB() 工作正常。
-
那么这是否意味着一旦开始使用 VBO,所有渲染都必须使用 VBO?
或者我在这里做错了什么?
编辑(已解决)
想通了。显然,如果之前绑定了缓冲区,您必须确保取消绑定缓冲区,以便在没有 vbo 的情况下进行渲染。
我的 CreateVBOs() 函数已绑定但没有取消绑定缓冲区,因此当 RenderB() 尝试使用 glDrawArrays 时,这就是造成错误访问的原因。解除绑定缓冲区只是将其绑定到 0,如下所示:
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
【问题讨论】:
【参考方案1】:在进行非 VBO 绘图调用之前,尝试将 GL_ELEMENT_ARRAY_BUFFER 和 GL_ARRAY_BUFFER 绑定为零。
将以下代码行添加到 VBO 绘制调用 (RenderA) 的末尾:
glBindBuffer(GL_ElEMENT_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
【讨论】:
以上是关于Opengles 混合 VBO 和非 VBO 渲染给出 EXC_BAD_ACCESS的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 中使用带有 OpenGL ES 的 VBO 性能不佳