调用glDeleteBuffersARB会导致段故障

Call to glDeleteBuffersARB results in segfault

本文关键字:故障 段故障 glDeleteBuffersARB 调用      更新时间:2023-10-16

我试图动态删除我的应用程序中的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上下文在删除时是活跃的。

我曾经调试过一个类似的纹理问题,这是由填充数据时缓冲区溢出引起的。在你的glBufferSubDataARB调用之前添加一个边界检查,以确保你不会溢出offset+size。看看GL_BUFFER_SIZE作为参数的glGetBufferParameteriv,以获得检查

的边界。