problem with drawing a png texture

Started by
6 comments, last by deavik 17 years, 8 months ago
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
Advertisement
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.
thanks for your reply.
can u please show me an example of doing this?

thanks in advance
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.
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.
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]
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???
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).

This topic is closed to new replies.

Advertisement