У меня есть приложение OpenGL, которое отображает статическую сцену. Эта сцена состоит из около 150 тысяч полигонов. Поскольку полигонов так много, и поскольку это статическая сцена, я решил использовать список отображения для хранения всех полигонов. Можно «регенерировать» сцену, пока приложение еще работает.
Моя проблема в том, что OpenGL, похоже, не освобождает память, выделенную для списка.
Здесь я создаю список:
m_displayList = glGenLists(1);
m_polygons = m_generator->polygons(scene_name);
glNewList(m_displayList, GL_COMPILE);
for(int i = 0; i < m_polygons.size(); i++)
{
glBegin(GL_POLYGON);
glNormal3fv(m_polygons[i]->get_normal());
for(int j = 0; j < 4; j++)
{
glColor3fv(m_polygons[i]->get_colors()[j]);
glVertex3fv(m_polygons[i]->get_vertices()[j]);
}
glEnd();
}
glEndList();
Позже, когда я хочу восстановить сцену, я называю это:
glDeleteLists(m_displayList, 1);
Что должно позаботиться обо всей памяти OpenGL, выделенной для списка, верно? Насколько я могу сказать, это не так. Когда я генерирую сцену, мое использование памяти увеличивается примерно на 600 МБ, а когда я регенерирую, оно падает только примерно на 30 МБ, а затем увеличивается до 600 МБ. Я подумал, что, возможно, OpenGL просто ленился удалить его, но я могу генерировать сцены, пока не доберусь до свопа, и ничто так и не освободится.
Я знаю, что остальная часть моего приложения не использует много. Класс «генератора» использует только около 30 Мб (это то, что освобождается, когда я восстанавливаю сцену).
Во всяком случае, я понятия не имею, что я делаю неправильно.