GlBufferDataARB给了我内存问题

时间:2010-07-04 23:52:32

标签: c++ c windows opengl

基本上我做的是这样的事情:

GenerateLinePoly(Contour[i].DrawingPoints, Contour[i].Outline.OutlineWidth);
     Contour[i].Outline.OutlineSize = OutlineVec.size() / 2;

 glBindBufferARB(GL_ARRAY_BUFFER_ARB,Contour[i].Outline.OutlineVBO);
     glBufferDataARB(GL_ARRAY_BUFFER_ARB,sizeof(GLfloat) * OutlineVec.size(),
         &OutlineVec[0],GL_DYNAMIC_COPY_ARB);

在我的类构造函数中,我为所有这些做了GlGenBuffers,我保证在解构函数中使用GlDeleteBuffersARB。

系统内存使用量按预期增长。但是在销毁对象后,缓冲区占用的内存仍然存在。我不认为这是内存泄漏。我调用GlDeleteBuffers并没有清除它使用的所有内存。这是正常的行为吗?什么可能导致这种情况?

如果我只这样做:

GenerateLinePoly(Contour[i].DrawingPoints, Contour[i].Outline.OutlineWidth);
     Contour[i].Outline.OutlineSize = OutlineVec.size() / 2;

然后我的记忆完全按照我的预期进行管理。

由于

1 个答案:

答案 0 :(得分:1)

Man page of glDeleteBuffers

它没有说任何地方应该立即释放内存。如果它没有泄漏(这是一个驱动程序错误),那么我会说你期待的不会发生。 GL实现可以随时进行真正的释放,特别是在资源仍在使用的情况下。记住,由于CPU和GPU并行运行,GPU可能正在使用一些资源,而CPU正在做其他事情。