调用glDeleteBuffersARB导致段错误

时间:2011-11-10 19:34:05

标签: c++ opengl vbo

我正在尝试动态删除应用程序中的VBO,以便创建不同大小的新VBO。但是,当我的程序尝试删除它时,它会因分段错误而崩溃。

以下是我分配VBO的代码:

glGenBuffersARB(1, &_vertexBufferID);
glBindBufferARB(GL_ARRAY_BUFFER, _vertexBufferID);
glBufferDataARB(GL_ARRAY_BUFFER,
                _pMetadata->vertexBufferSize(),
                NULL,
                GL_STATIC_DRAW)

在以下代码中定期将数据添加到VBO中:

glBindBufferARB(GL_ARRAY_BUFFER, _vertexBufferID);
glBufferSubDataARB(GL_ARRAY_BUFFER,
                   _pMetadata->vertexSubBufferOffset(),
                   _pMetadata->vertexSubBufferSize(),
                   &row[0]); // row is a vector<float>

在代码的其他地方我尝试删除VBO:

glDeleteBuffersARB(1, &_vertexBufferID)

在那条线上,我收到了分段错误。我确保在删除时正确的OpenGL上下文处于活动状态。

1 个答案:

答案 0 :(得分:0)

我用纹理调试了一个类似的问题,它是在填充数据时由缓冲区溢出引起的。在glBufferSubDataARB调用之前添加一个边界检查,以确保不会使用offset + size溢出。看看glGetBufferParameteriv与GL_BUFFER_SIZE作为参数来获取要检查的界限