2013-07-26 199 views
0

我在一個循環中的MEX文件(matlab)中調用了以下函數。它在glColor3f中導致內存泄漏。記憶力不斷增加。有什麼想法解決它嗎?爲什麼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; 
} 

回答

2

嘛,鑑於幾乎每一個它記錄在顯示列表中的每個OpenGL的命令,一點也不奇怪了主叫OpenGL的一個循環命令的顯示列表編輯中會消耗內存。程序終止前使用glDeleteLists刪除所有列表。

但是老實說,你爲什麼首先使用顯示列表?顯示列表和立即模式已棄用。即使在大約10年前,隨着OpenGL-2的推出,它被認爲將其刪除,強烈建議不要在新代碼中使用它們。

+0

它的工作原理。非常感謝你! – user2613981

+0

@ user2613981:順便說一句:glutSwapBuffers在列表編譯中沒有任何意義。 SwapBuffers不是OpenGL操作。 – datenwolf