我正在尝试动态删除应用程序中的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上下文处于活动状态。
答案 0 :(得分:0)
我用纹理调试了一个类似的问题,它是在填充数据时由缓冲区溢出引起的。在glBufferSubDataARB调用之前添加一个边界检查,以确保不会使用offset + size溢出。看看glGetBufferParameteriv与GL_BUFFER_SIZE作为参数来获取要检查的界限