Skip to main content
GameDev.net gamedev.net
🔒 Locked

problem with drawing a png texture

Started by mc30900 Aug 16, 2006 at 4:33 PM 6 replies 1.6k views
Original Post
mc30900
mc30900
hello all. i loaded with SDL (i'm using sdl+opengl) a png texture (Rgba). the texture in photoshop has no background. but in my program it has white background. any idea why this is happening and how i can fix this? thanks in advance
Deception666
Deception666
In photoshop, the background is transparent and when it saves it out to a file, it is most likely just saving the transparent portions as white with the alpha value set to 0. You'll either want to use the alpha test or blending to remove the white portion.
mc30900
mc30900
thanks for your reply.
can u please show me an example of doing this?

thanks in advance
Deception666
Deception666
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.1f);

or

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Use blend for smooth edges. Use the alpha test to remove fragments faster during the raster process.
Solias
Solias
Older versions of photoshop don't support saving alpha data in png files through the save as command. Instead you need to use the save for web command.
mc30900
mc30900
i tried :
glEnable(GL_ALPHA_TEST);glAlphaFunc(GL_GREATER, 0.1f);

but it didnt help.
then i tried to save the png in photoshop with the "Save for web" option but then when i load the texture with rgba it looks very strange so i can only load it with rgb.

anyone has any idea what i need to do?
thanks in advance


p.s mybe i'm loading the png wrong? here is the code:
int LoadGLTextures( ){    /* Status indicator */    int Status = FALSE;    /* Create storage space for the texture */    SDL_Surface *TextureImage[6];     /* Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit */    if (		//( TextureImage[0] = IMG_Load( "data/tank.jpg" ) ) 		( TextureImage[0] = IMG_Load( "data/tank.bmp" ) ) 				&& ( TextureImage[1] = IMG_Load( "data/wall1.jpg" ) )		&& ( TextureImage[2] = IMG_Load( "data/a.png" ) )&& ( TextureImage[3] = IMG_Load( "data/wall3.jpg" ) )		&& ( TextureImage[4] = IMG_Load( "data/tankmenu.jpg" ) )		&& ( TextureImage[5] = IMG_Load( "data/rocket.jpg" ) )		)        {	    /* Set the status to true */	    Status = TRUE;	    /* Create The Texture */	    glGenTextures( 6, &texture[0] );for (int i=0;i<6;i++){	    /* Typical Texture Generation Using Data From The Bitmap */	    glBindTexture( GL_TEXTURE_2D, texture );			    /* Linear Filtering */	    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,			     GL_LINEAR_MIPMAP_NEAREST );	    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,			     GL_LINEAR );		glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);				       if (i==2)			       {                            gluBuild2DMipmaps( GL_TEXTURE_2D, 3, TextureImage->w,			       TextureImage->h, GL_RGBA,			       GL_UNSIGNED_BYTE, TextureImage->pixels );          }          else          {gluBuild2DMipmaps( GL_TEXTURE_2D, 3, TextureImage->w,			       TextureImage->h, GL_RGB,			       GL_UNSIGNED_BYTE, TextureImage->pixels );          }}        }    /* Free up any memory we may have used */	for (int z=0;z<6;z++)	{    if ( TextureImage[z] )	    SDL_FreeSurface( TextureImage[z] );	}    return Status;}


[Edited by - mc30900 on August 17, 2006 2:32:03 AM]
mc30900
mc30900
now i also saw that in nehe tutorial (32) his tga textures have a alpha channel in PHOTOSHOP and my png dont have that.... should i add that???
deavik
deavik
Quote:

gluBuild2DMipmaps( GL_TEXTURE_2D, 3, TextureImage->w,
TextureImage->h, GL_RGBA,
GL_UNSIGNED_BYTE, TextureImage->pixels );

I don't know exactly how the 'internal format' argument of gluBuild2DMipmaps works (are you allowed to use GL enumerants for sized internal formats?) but at any rate, 3 means that you are telling GL to keep 3 channels (RGB) of the image. It needs to be 4 (or GL_RGBA8 if allowed).

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.