GlBufferDataARB дает мне проблемы с памятью - PullRequest
0 голосов
/ 05 июля 2010

Обычно я делаю что-то вроде этого:

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 Ответ

1 голос
/ 05 июля 2010

Справочная страница glDeleteBuffers

Нигде не сказано, что память должна быть немедленно освобождена. Если это не утечка (что является ошибкой драйвера), то я бы сказал, что то, что вы ожидаете, не происходит. Реализация GL свободна выполнять реальное освобождение в любое время, особенно когда ресурсы все еще используются. Помните, что поскольку процессор и графический процессор работают параллельно, графический процессор может использовать какой-то ресурс, в то время как процессор выполняет другие действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...