0

我在循环中的 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;
}
4

1 回答 1

2

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

但老实说,你为什么首先使用显示列表?不推荐使用显示列表和立即模式。即使在将近 10 年前引入 OpenGL-2 时,也曾考虑将其删除,并且强烈建议不要在新代码中使用它们。

于 2013-07-26T16:27:23.987 回答