glGetTexImage liest zu viele Daten mit dem Texturformat GL_ALPHA

Ich versuche, die Pixelinformationen für eine Nur-Alpha-Textur über glGetTexImage abzurufen.

Das Problem ist, dass der glGetTexImage-Aufruf mehr Daten zu lesen scheint, als er sollte, was zu einer Speicherbeschädigung und einem Absturz beim delete [] - Aufruf führt. Hier ist mein Code:

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 meldet keine Fehler und stürzt ohne den glGetTexImage-Call nicht ab.

'target' ist GL_TEXTURE_2D (Die Textur ist gültig und vor dem angezeigten Code gebunden), 'w' ist 19, 'h' ist 24, 'level' ist 0.

Wenn ich das Array auf (B * H * 100) erhöhe, stürzt es ebenfalls nicht ab. Ich weiß, dass GL_UNSIGNED_BYTE die gleiche Größe wie ein nicht signiertes Zeichen in meinem System hat, daher verstehe ich nicht, was hier vor sich geht.

Woher kommen die zusätzlichen Daten und wie kann ich sicherstellen, dass mein Array groß genug ist?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage