Jump to content
  • Advertisement
Sign in to follow this  
mc30900

OpenGL problem with drawing a png texture

This topic is 4352 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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]

Share this post


Link to post
Share on other sites
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???

Share this post


Link to post
Share on other sites
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).

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!