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?