Текстура не удаляется в opengl - PullRequest
0 голосов
/ 22 декабря 2011

В моем приложении я использую от 7 до 8 текстур.Я также делаю несколько текстур.когда я удаляю все текстуры с помощью команды glDeleteTexture и проверяю с помощью команды glIsTexture, то получаю GL_True для некоторых текстур.Я хочу знать, при каких условиях функция glDeleteTexture () не может удалить текстуру?

РЕДАКТИРОВАТЬ: Хорошо, я отлаживаю свой код, и теперь я узнаю, что в основном есть две проблемы: на одном этапе в моем приложенииУ меня есть 3D-модель и на разных сенсорных вводах я меняю текстуры на нем.поэтому при каждом сенсорном вводе я вызываю следующий код

   glDeleteTextures(1, &tex1);
  switch(case)
  {
  case 1:
  tex1 = CreateTexture("xyz.pvr");
  break;
  case 2:
  tex1 = CreateTexture("abc.pvr");
  ...
  ...

, где CreateTexture указан ниже

    UploadImage(file);
    GLuint name;
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &name);
glBindTexture(GL_TEXTURE_2D, name);
glTexEnvf( GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_DECAL);
glTexParameterf(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);


GLfloat fLargest;
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &fLargest);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, fLargest);

glTexImage2D(GL_TEXTURE_2D, level, format, w, h, 0, format, type, data);
    UnloadImage();

Этот код дает мне некоторую утечку при каждом сенсорном вводе.Во-вторых, в конце я должен освободить все текстуры и загрузить разные данные. Так что я удаляю все текстуры, используя следующие команды

    glDeleteTextures(1, &tex1);
glDeleteTextures(1, &tex2);
    glDeleteTextures(1, &tex3);
glDeleteTextures(1, &tex4);
    glDeleteTextures(1, &tex5);
glDeleteTextures(1, &tex6)

, а затем проверяю их удаление или не используя

    glIsTexture(tex1);
    glIsTexture(tex2);
    glIsTexture(tex3);
    glIsTexture(tex4);
    glIsTexture(tex5);
    glIsTexture(tex6);

, но становится справедливым для некоторых текстур.

1 Ответ

1 голос
/ 22 декабря 2011

Вы должны исследовать это самостоятельно, добавив код для отслеживания возвращенной ошибки из OpenGL.Возможно, вы делаете удаление в плохом месте в вашем коде, пока текстура еще используется или что-то в этом роде.Позвоните glGetError() после звонков OpenGL, которые вы хотите исследовать, и зарегистрируйте результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...