정적 장면을 표시하는 OpenGL 앱이 있습니다. 이 장면은 약 150k 다각형으로 구성됩니다. 폴리곤이 너무 많고 정적 인 장면이므로 모든 폴리곤을 저장하기 위해 디스플레이 목록을 사용하기로 결정했습니다. 앱이 실행되는 동안 장면을 '재생성'할 수 있습니다.OpenGL에서 디스플레이 목록 메모리를 할당 해제하지 않습니다.
제 문제는 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();
을 나는 장면을 다시 생성 할 때, 나는이 전화 : 모든 메모리는 OpenGL의주의를 기울여야한다
glDeleteLists(m_displayList, 1);
목록에 대해 할당 된, 맞습니까? 내가 말할 수있는 한, 그것은 아닙니다. 장면을 생성 할 때 메모리 사용량은 약 600Mb 씩 증가하고 다시 재생하면 약 600Mb를 떨어 뜨리기 전에 약 30Mb 만 떨어 뜨립니다. 아마도 OpenGL은 삭제하는 게으른 게 아니라고 생각했지만 스왑을 치기 전까지는 장면을 생성 할 수 있으며 아무 것도 해제되지 않습니다.
내 응용 프로그램의 나머지 부분은 많이 사용하지 않는다는 것을 알고 있습니다. "생성기"클래스는 약 30Mb 만 사용합니다 (장면을 재생성 할 때 할당이 해제됩니다).
어쨌든 내가 뭘 잘못하고 있는지 전혀 모르겠다.
+1. Valgrind는 어느 할당이 해제되지 않았는지 확인하는 데 도움이 될 수 있습니다. – neodelphi