glGetTexImage lee demasiados datos con formato de textura GL_ALPHA

Estoy tratando de recuperar la información de píxeles para una textura solo alfa a través de glGetTexImage.

El problema es que la llamada glGetTexImage-Call parece leer más datos de lo que debería, lo que lleva a la corrupción de la memoria y un bloqueo en la eliminación [] - Call. Aquí está mi 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;

glGetError no informa errores, y sin glGetTexImage-Call no se bloquea.

'target' es GL_TEXTURE_2D (La textura es válida y enlazada antes del código mostrado), 'w' es 19, 'h' es 24, 'level' es 0.

Si aumento el tamaño de la matriz a (w * h * 100) tampoco se bloquea. Sé con certeza que GL_UNSIGNED_BYTE tiene el mismo tamaño que un carácter sin firmar en mi sistema, por lo que no entiendo lo que está sucediendo aquí.

¿De dónde provienen los datos adicionales y cómo puedo asegurarme de que mi matriz sea lo suficientemente grande?

Respuestas a la pregunta(1)

Su respuesta a la pregunta