Kann eine .bmp-Datei nicht laden? [ openGL / C++ ]
-
Hallo,
ich versuche mit openGL mit Hilfe einer funktionierenden Funktion ein Bitmap zu laden.
Am Beginn des Programms lade ich ein Bild:
mTexture::tex = loadTexture ( filename, &tex_w, &tex_h );
Hier wird ein Bild geladen, aber in lila.
Und etwas später lade ich noch ein Bitmap:
Ball::tex = loadTexture ( filename, &tex_w, &tex_h );
Hier wird garkein Bild geladen. Ball::tex hat also den Wert 0.
Wenn ich mit Ball::tex das Bild lade, dass ich mit mTexture::tex lade, funktioniert es ( aber auch in lila ).
Habe ich da meine .bmp Dateien falsch gespeichert?
Oder was ist das los??Das ist die Funktion, die die Textur lädt:
GLuint loadTexture ( std::string filename, int *width, int *height ) { GLuint texture; SDL_Surface *surface; GLenum texture_format = GL_RGB; GLint nOfColors; if ( surface = SDL_LoadBMP ( filename.c_str () ) ) { nOfColors = surface -> format -> BytesPerPixel; if ( nOfColors == 4) { if ( surface -> format -> Rmask == 0x000000ff ) texture_format = GL_RGBA; else texture_format = GL_BGRA; } else { if ( nOfColors == 3 ) { if ( surface->format->Rmask == 0x000000ff ) { texture_format = GL_RGB; } } } *width = surface -> w; *height = surface -> h; glGenTextures ( 1, &texture ); glBindTexture ( GL_TEXTURE_2D, texture ); glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexImage2D ( GL_TEXTURE_2D, 0, nOfColors, surface->w, surface->h, 0, texture_format, GL_UNSIGNED_BYTE, surface->pixels ); SDL_FreeSurface ( surface ); } else { return 0; } return texture; }
Ich hoffe es findet jemand den Fehler. Obwohl ich nicht glaube, dass der
Fehler in der loadTexture Funktion ist!Lg
SFandler
-
Ich nehme zum Texturen laden FreeImage (http://freeimage.sourceforge.net/). Ist deutlich besser und schneller als die SDL-Funktionen.
Davon abgesehem, wurde glEnable(GL_TEXTURE_2D) vorher aufgerufen?
-
Ja ich habe vorher glEnable ( GL_TEXTURE_2D ) aufgerufen und mein Problem bereits gelöst
Habe einen funktionierenden SDL_Surface zu Texture Converter gefunden.Lg
SFandler