Утечка памяти при тесселяции в OpenGL
Пишу программу, работающую с графикой. Добавил многоугольники (это кварталы) для которых применил тесселяцию. И вроде все нормально, но при прорисовке (зумирование, панарамирование) память бесследно исчезает, и поработав минут 10 чувствуются тормоза.
Исходник
Код:
// Объявление функций
#ifndef CALLBACK
#define CALLBACK
#endif
void CALLBACK beginCallback(GLenum which)
{
glBegin(which);
}
void CALLBACK endCallback(void)
{
glEnd();
}
void CALLBACK errorCallback(GLenum errorCode) {
const GLubyte *estring;
estring=gluErrorString(errorCode);
fprintf(stderr, "Tesselation error: %sn",estring);
exit(0);
}
////////////////////////////////////////////
//Рисование кварталов
void DrawKv(GLenum mode)
{
char tmp[30];
GLuint startList;
GLdouble rect[100][3];
GLUtesselator* tobj=gluNewTess();
tobj=gluNewTess();
//Прорисовка всех кварталов
for(int i=0;i<countKv;i++)
{
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glColor3f(masKv[i].Col[0],masKv[i].Col[1],masKv[i].Col[2]);
for(int j=0;j<masKv[i].countPer;j++)
{
rect[j][0]=masKv[i].X1[j];
rect[j][1]=masKv[i].Y1[j];
rect[j][2]=0.0;
}
startList=glGenLists(1);
gluTessCallback(tobj,GLU_TESS_VERTEX,(void(__stdcall*)(void))glVertex3dv);
gluTessCallback(tobj,GLU_TESS_BEGIN,(void(__stdcall*)(void))beginCallback);
gluTessCallback(tobj,GLU_TESS_END,(void(__stdcall*)(void))endCallback);
gluTessCallback(tobj,GLU_TESS_ERROR,(void(__stdcall*)(void))errorCallback);
glColor3f(masKv[i].Col[0],masKv[i].Col[1],masKv[i].Col[2]);
glNewList(startList,GL_COMPILE);
glShadeModel(GL_FLAT);
gluTessBeginPolygon(tobj,NULL);
gluTessBeginContour(tobj);
for(int j1=0;j1<masKv[i].countPer;j1++)
{
gluTessVertex(tobj,rect[j1],rect[j1]);
}
gluTessEndContour(tobj);
gluTessEndPolygon(tobj);
glEndList();
glCallList(startList);
}
gluDeleteTess(tobj);
}
#ifndef CALLBACK
#define CALLBACK
#endif
void CALLBACK beginCallback(GLenum which)
{
glBegin(which);
}
void CALLBACK endCallback(void)
{
glEnd();
}
void CALLBACK errorCallback(GLenum errorCode) {
const GLubyte *estring;
estring=gluErrorString(errorCode);
fprintf(stderr, "Tesselation error: %sn",estring);
exit(0);
}
////////////////////////////////////////////
//Рисование кварталов
void DrawKv(GLenum mode)
{
char tmp[30];
GLuint startList;
GLdouble rect[100][3];
GLUtesselator* tobj=gluNewTess();
tobj=gluNewTess();
//Прорисовка всех кварталов
for(int i=0;i<countKv;i++)
{
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glColor3f(masKv[i].Col[0],masKv[i].Col[1],masKv[i].Col[2]);
for(int j=0;j<masKv[i].countPer;j++)
{
rect[j][0]=masKv[i].X1[j];
rect[j][1]=masKv[i].Y1[j];
rect[j][2]=0.0;
}
startList=glGenLists(1);
gluTessCallback(tobj,GLU_TESS_VERTEX,(void(__stdcall*)(void))glVertex3dv);
gluTessCallback(tobj,GLU_TESS_BEGIN,(void(__stdcall*)(void))beginCallback);
gluTessCallback(tobj,GLU_TESS_END,(void(__stdcall*)(void))endCallback);
gluTessCallback(tobj,GLU_TESS_ERROR,(void(__stdcall*)(void))errorCallback);
glColor3f(masKv[i].Col[0],masKv[i].Col[1],masKv[i].Col[2]);
glNewList(startList,GL_COMPILE);
glShadeModel(GL_FLAT);
gluTessBeginPolygon(tobj,NULL);
gluTessBeginContour(tobj);
for(int j1=0;j1<masKv[i].countPer;j1++)
{
gluTessVertex(tobj,rect[j1],rect[j1]);
}
gluTessEndContour(tobj);
gluTessEndPolygon(tobj);
glEndList();
glCallList(startList);
}
gluDeleteTess(tobj);
}
Тесселяцию изучаю недавно.
Спасибо
glDeleteLists(startList,1); ///////// ВОТ УТЕЧКА!!!!!!!!!!!!!