glDeleteTextures не удаляет текстуру - PullRequest
5 голосов
/ 23 февраля 2011

Я пытаюсь написать класс для создания фрагментированного шейдера с использованием объекта Frame Buffer для рендеринга в текстуру с помощью шейдера фрагмента, затем рендеринга этой текстуры в другую текстуру с помощью фрагментного шейдера и т. Д. И т. Д.

Я сейчас пытаюсь справиться с утечкой памяти, когда при изменении размера моего окна и удалении / перераспределении текстур, которые я использую, текстуры не удаляются должным образом.

Вот фрагмент кода:

//Allocate first texture
glGenTextures( 1, &texIds[0] );
glBindTexture( GL_TEXTURE_2D, texIds[0] );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, screenX, screenY, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL );

//Allocate second texture
glGenTextures( 1, &texIds[1] );
glBindTexture( GL_TEXTURE_2D, texIds[1] );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8, screenX, screenY, 0, GL_BGRA, GL_UNSIGNED_BYTE, NULL );

//Try to free first texture -- ALWAYS FAILS
glDeleteTextures( 1, &texIds[0] );
//Try to free second texture
glDeleteTextures( 1, &texIds[1] );

Когда я запускаю это с gDEBugger, он говорит мне: «Предупреждение: Отлаживаемая программа удаляет текстуру, которая не существует. Имя текстуры: 1», когда я пытаюсь удалить texIds [0].(Причина, по которой я их сейчас храню в массиве, заключается в том, что я использовал их для одновременного создания и освобождения, однако, когда вы освобождаете 2 текстуры одновременно, одна будет молча проваливаться на одной и переходит к другой).

Если я не создаю texIds [1], я могу освободить texIds [0], но как только я создаю вторую текстуру, я больше не могу освободить первую созданную мной текстуру.Есть идеи?

1 Ответ

1 голос
/ 30 мая 2011

Возможно, ошибка в массиве texIds. Это массив GLUint?

Вы можете ошибочно объявить его как массив слов, поэтому при генерации текстуры для элемента [1] указатель uint, взятый из элемента [0], не работает.

...