Ich habe diesen Fehler noch nie zuvor gesehen und ich verwende glTexImage2D
an anderer Stelle im Projekt ohne Fehler. Nachstehend ist ein Screenshot von dem, was Visual Studio zeigt Fehler, und ein Blick auf die Demontage: "Frame nicht im Modul" bei der Verwendung von glTexImage2D
die Linie gegeben hat ptr
darin gehe ich davon ein Zeiger Fehler ist, aber ich weiß nicht, was ich tue falsch. Unten ist die Funktion, die ich von einer SDL_surface
in eine Textur konvertieren.
void surfaceToTexture(SDL_Surface *&surface, GLuint &texture) {
glEnable(GL_TEXTURE_2D);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, surface->w, surface->h, 0, GL_BGRA, GL_UNSIGNED_BYTE, surface->pixels);
glDisable(GL_TEXTURE_2D);
}
Diese Funktion erfolgreich an anderer Stelle im Programm, zum Beispiel beim Laden von Text:
SDL_Surface *surface;
surface = TTF_RenderText_Blended(tempFont, message.c_str(), color);
if (surface == NULL)
printf("Unable to generate text surface using font: %s! SDL_ttf Error: %s\n", font.c_str(), TTF_GetError());
else {
SDL_LockSurface(surface);
width = surface->w;
height = surface->h;
if (style != TTF_STYLE_NORMAL)
TTF_SetFontStyle(tempFont, TTF_STYLE_NORMAL);
surfaceToTexture(surface, texture);
SDL_UnlockSurface(surface);
}
SDL_FreeSurface(surface);
Aber nicht, wenn ein Bild geladen:
SDL_Surface* surface = IMG_Load(path.c_str());
if (surface == NULL)
printf("Unable to load image %s! SDL_image Error: %s\n", path.c_str(), IMG_GetError());
else{
SDL_LockSurface(surface);
width = (w==0)?surface->w:w;
height = (h==0)?surface->h/4:h;
surfaceToTexture(surface, texture);
SDL_UnlockSurface(surface);
}
SDL_FreeSurface(surface);
Beiden Beispiele aus einer Klasse extrahiert werden, wo texture
ist definiert. Der Pfad zum Bild ist korrekt. Ich weiß, es ist glTexImage2D
, dass das Problem verursacht, wie ich einen Breakpoint am Anfang von surfaceToTexture
hinzugefügt und durch die Funktion. Selbst wenn es nicht funktioniert, haben texture
und surface
scheinbar korrekte Werte/Eigenschaften.
Irgendwelche Ideen?
Sind Sie sicher, dass das Pixelformat Ihres Bildes BGRA ist (oder mindestens 4 Bytes pro Pixel?) – keltar
@keltar Guter Schrei Ich hatte das nicht überprüft, werde es tun, wenn ich wieder zu Hause bin. Ich erinnere mich daran, BGRA zu RGBA zu ändern, was zu einem anderen Fehler führte, einige pdb nicht geladen, Gedanken ?. – jaunt
BGRA/RGBA ist eine andere Reihenfolge, also wird es zu einer deformierten Farbe führen. Bytes pro Pixel ist das gleiche obwohl. Aber wenn Ihr Bild RGB/BGR ist, aber Sie GL gesagt haben, ist es BGRA - es ist eine ganz andere Sache; es wird entweder Mülldaten erhalten oder abstürzen. – keltar