glGetTexImage считывает слишком много данных в формате текстур GL_ALPHA

Я пытаюсь получить информацию о пикселях для альфа-текстуры только через glGetTexImage.

Проблема в том, что glGetTexImage-Call, кажется, считывает больше данных, чем должно, что приводит к повреждению памяти и сбою при удалении [] - Call. Вот мой код:

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 не сообщает об ошибках, и без glGetTexImage-Call он не падает.

'target' - это GL_TEXTURE_2D (текстура действительна и ограничена перед показанным кодом), 'w' - 19, 'h' - 24, 'level' - 0.

Если я увеличу размер массива до (w * h * 100), он тоже не вылетит. Я точно знаю, что GL_UNSIGNED_BYTE имеет тот же размер, что и неподписанный символ в моей системе, поэтому я не понимаю, что здесь происходит.

Откуда поступают дополнительные данные и как я могу убедиться, что мой массив достаточно большой?