Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Утечка памяти при тесселяции в OpenGL

289
18 ноября 2013 года
Jeyson
207 / / 20.04.2000
Здравствуйте.
Пишу программу, работающую с графикой. Добавил многоугольники (это кварталы) для которых применил тесселяцию. И вроде все нормально, но при прорисовке (зумирование, панарамирование) память бесследно исчезает, и поработав минут 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);

}
Эта функция DrawKv вызывается каждый раз при прорисовке. Есть множество других функций, но утечка только здесь.
Тесселяцию изучаю недавно.
Спасибо
289
18 ноября 2013 года
Jeyson
207 / / 20.04.2000
Решил. Список надо было удалить
glDeleteLists(startList,1); ///////// ВОТ УТЕЧКА!!!!!!!!!!!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог