基本上我做这样的事情:

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;


这样,我的记忆就得到了我所期望的完美管理。

谢谢

最佳答案

Man page of glDeleteBuffers

它并没有说应该立即释放内存。如果没有泄漏(这是驱动程序错误),那么我会说您所期望的没有发生。 GL实现可以随时随地自由进行真正的重新分配,特别是如果仍然使用资源时。请记住,由于CPU和GPU并行运行,因此GPU在执行其他操作时可能正在使用某些资源。

08-24 23:35