Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory management OpenGL未释放显示列表内存_Memory Management_Opengl_Memory Leaks - Fatal编程技术网

Memory management 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

我有一个显示静态场景的OpenGL应用程序。此场景由大约150k个多边形组成。因为有这么多多边形,而且它是一个静态场景,所以我决定使用一个显示列表来存储所有多边形。可以在应用程序仍在运行时“重新生成”场景

我的问题是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为列表分配的所有内存,对吗?据我所知,它不是。当我生成场景时,我的内存使用量增加了大约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);