【发布时间】:2011-11-10 19:34:04
【问题描述】:
我试图在我的应用程序中动态删除 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 上下文在删除时处于活动状态。
【问题讨论】:
-
顺便说一句,你不需要删除一个VBO只是为了改变它的大小,用不同的大小调用
glBufferData就足够了。但也许您的实际应用程序更复杂。 -
你能像 valgrind 一样运行内存检查吗?
-
@ChristianRau 这实际上工作得很好,但我仍然对这个删除业务感到好奇。
-
@CoreyD 为此,我们肯定需要更多代码,因为提供的代码很好。
-
所有尝试删除 VBO 时都会发生这种情况吗?还是仅在一种情况下?您是否验证过 glDeleteBuffersARB 不是空函数指针?另外,你为什么使用 ARB 后缀函数而不是早已接受的标准 VBO 函数?