glGetTexImage lê muitos dados com o formato de textura GL_ALPHA

Estou tentando recuperar as informações de pixel para uma textura somente alfa via glGetTexImage.

O problema é que o glGetTexImage-Call parece ler mais dados do que deveria, causando corrupção de memória e falha na exclusão [] - Chamada. Aqui está o meu código:

int format;
glGetTexLevelParameteriv(target,0,GL_TEXTURE_INTERNAL_FORMAT,&format);
int w;
int h;
glGetTexLevelParameteriv(target,0,GL_TEXTURE_WIDTH,&w);
glGetTexLevelParameteriv(target,0,GL_TEXTURE_HEIGHT,&h);
if(w == 0 || h == 0)
    return false;
if(format != GL_ALPHA)
    return false;
unsigned int size = w *h *sizeof(unsigned char);
unsigned char *pixels = new unsigned char[size];
glGetTexImage(target,level,format,GL_UNSIGNED_BYTE,&pixels[0]);
delete[] pixels;

O glGetError não reporta erros e, sem o glGetTexImage-Call, ele não falha.

'target' é GL_TEXTURE_2D (a textura é válida e vinculada antes do código mostrado), 'w' é 19, 'h' é 24, 'level' é 0.

Se eu aumentar o tamanho da matriz para (w * h * 100), ele também não trava. Sei que GL_UNSIGNED_BYTE tem o mesmo tamanho de um caractere não assinado no meu sistema, por isso não entendo o que está acontecendo aqui.

De onde vêm os dados adicionais e como posso garantir que minha matriz seja grande o suficiente?

questionAnswers(1)

yourAnswerToTheQuestion