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


Log in to reply