Memory management OpenGL未释放显示列表内存
我有一个显示静态场景的OpenGL应用程序。此场景由大约150k个多边形组成。因为有这么多多边形,而且它是一个静态场景,所以我决定使用一个显示列表来存储所有多边形。可以在应用程序仍在运行时“重新生成”场景 我的问题是OpenGL似乎没有释放它为列表分配的任何内存 这是我创建列表的地方:Memory management OpenGL未释放显示列表内存,memory-management,opengl,memory-leaks,Memory Management,Opengl,Memory Leaks,我有一个显示静态场景的OpenGL应用程序。此场景由大约150k个多边形组成。因为有这么多多边形,而且它是一个静态场景,所以我决定使用一个显示列表来存储所有多边形。可以在应用程序仍在运行时“重新生成”场景 我的问题是OpenGL似乎没有释放它为列表分配的任何内存 这是我创建列表的地方: m_displayList = glGenLists(1); m_polygons = m_generator->polygons(scene_name); glNewList(m_displayList
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为列表分配的所有内存,对吗?据我所知,它不是。当我生成场景时,我的内存使用量增加了大约600 Mb,而当我重新生成时,它只减少了大约30 Mb,然后又增加了600 Mb。我想也许OpenGL只是懒得删除它,但我可以生成场景,直到我点击交换,没有任何东西会被释放
我知道我的应用程序的其余部分没有太多使用。“generator”类只使用大约30MB(这是我重新生成场景时释放的内存)
无论如何,我不知道我做错了什么。这将释放OpenGL为列表分配的内存。但它不会释放您分配的任何内存
我不知道如何
m\u生成器->多边形(场景名称)代码>可以工作,但“生成器”可能会分配内存来保存生成的数据。因此,检查您是否应该释放它。这将释放OpenGL为列表分配的内存。但它不会释放您分配的任何内存
我不知道如何m\u生成器->多边形(场景名称)代码>可以工作,但“生成器”可能会分配内存来保存生成的数据。所以,请检查您是否应该释放该内存。600MB的内存听起来好像很大,只是猜测一下,但从我看到的情况来看,150k多边形应该只占用大约20MB的内存。当您为所有这些多边形创建显示列表时,必须将所有数据复制到显示列表中,以便至少再增加20 MB以及其他内容
查看您的分配情况,看看是否有任何分配过度,这可能是一个好主意。只是我的想法。600MB的内存听起来好像很大,只是猜测而已,但从我所看到的150k多边形应该只占用20MB的内存。当您为所有这些多边形创建显示列表时,必须将所有数据复制到显示列表中,以便至少再增加20 MB以及其他内容
查看您的分配情况,看看是否有任何分配过度,这可能是一个好主意。只是我的想法。+1。Valgrind可能会帮助您找出未释放的分配。+1。Valgrind可能会帮助您找出未释放的分配。
glDeleteLists(m_displayList, 1);