为什么glColor3f导致内存泄漏

时间:2013-07-26 12:42:51

标签: opengl memory-leaks

我在一个循环中调用MEX文件(matlab)中的以下函数。它会导致glColor3f中的内存泄漏。记忆力继续增加。有什么想法可以解决吗?

static GLuint createDisplayListWithColor(double *fM, int fNum, double *vM, int vNum, GLfloat *ColorM, int colorNum)
{
    GLuint theShape;
    int i;
    double *fp;
    int vIndex, fNum2, vNum2;

    fNum2 = fNum * 2;
    vNum2 = vNum * 2;

    theShape = glGenLists (1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glNewList(theShape, GL_COMPILE);
    glBegin (GL_TRIANGLES);


        for (i = 1; i <= fNum; i++) {
            fp = fM + i-1;
            vIndex = (int)fp[0] - 1;
            glColor3f(ColorM[vIndex], ColorM[vIndex + vNum], ColorM[vIndex + vNum2]);
            glVertex3d(vM[vIndex], vM[vIndex + vNum], vM[vIndex + vNum2] );

            vIndex = (int)fp[fNum] - 1;
            glColor3f(ColorM[vIndex], ColorM[vIndex + vNum], ColorM[vIndex + vNum2]);
            glVertex3d(vM[vIndex], vM[vIndex + vNum], vM[vIndex + vNum2] );

            vIndex = (int)fp[fNum2] - 1;
            glColor3f(ColorM[vIndex], ColorM[vIndex + vNum], ColorM[vIndex + vNum2]);
            glVertex3d(vM[vIndex], vM[vIndex + vNum], vM[vIndex + vNum2] );
               }

    glEnd ();
    glutSwapBuffers();
    glEndList();
    return theShape;
}

1 个答案:

答案 0 :(得分:2)

嗯,考虑到它在显示列表中记录的每个几乎每个OpenGL命令的事实,在显示列表编译中的循环中调用OpenGL命令将消耗内存就不足为奇了。程序终止前使用glDeleteLists删除所有列表。

但老实说,为什么你首先使用显示列表?不推荐使用显示列表和立即模式。即使差不多10年前,随着OpenGL-2的推出,它被认为是删除它们,强烈建议不要在新代码中使用它们。