2013-07-26 2 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 : BTW : glutSwapBuffers는 목록 컴파일에서 의미가 없습니다. SwapBuffers는 OpenGL 작업이 아닙니다. – datenwolf

관련 문제