Advertisement Jump to content
Sign in to follow this  

How to load a Texture with an Alpha

This topic is 1660 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

Hi Everyone,



I'm trying to load a Quad with a Monster Image on it that will always face the Camera, a la Doom 2.


Now I don't know how to load an image with an Alpha part on it. 


In 2D using SDL I always used tga files.



Here is my LoadTexture functions.


Does anyone have an idea?


Thanks a lot.


AUX_RGBImageRec *LoadBMP(char *Filename)                // Loads A Bitmap Image
        FILE *File=NULL;                                // File Handle
        if (!Filename)                                  // Make Sure A Filename Was Given
                return NULL;                            // If Not Return NULL
        File=fopen(Filename,"r");                       // Check To See If The File Exists
        if (File)                                       // Does The File Exist?
                fclose(File);                           // Close The Handle
                return auxDIBImageLoad(Filename);       // Load The Bitmap And Return A Pointer
        return NULL;                                    // If Load Failed Return NULL
int LoadGLTextures()                                    // Load Bitmaps And Convert To Textures
        int Status=FALSE;                               // Status Indicator
        AUX_RGBImageRec* TextureImage[12];               // Create Storage Space For The Texture
        memset(TextureImage,0,sizeof(void *)*1);        // Set The Pointer To NULL
        // Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
        if (TextureImage[0]=LoadBMP("Data/Grass00.bmp"))
                Status=TRUE;                            // Set The Status To TRUE
                glGenTextures(1, &texture[0]);          // Create Textures
// Create Nearest Filtered Texture
glBindTexture(GL_TEXTURE_2D, texture[0]);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
        if (TextureImage[0])                            // If Texture Exists
                if (TextureImage[0]->data)              // If Texture Image Exists
                        free(TextureImage[0]->data);    // Free The Texture Image Memory
                free(TextureImage[0]);                  // Free The Image Structure



return TRUE;



Share this post

Link to post
Share on other sites



If you want to have texture with alpha in OpenGL, you have to modify glTexImage2D call you have inside your LoadGLTextures function. You just need to change its 3rd parameter to  4  and 7th parameter to GL_RGBA.   Texture In this case of course, in TextureImage[0]->data array every 4 bytes shoud correspond to a single pixel of image in RGBA format. Moreover, to get transparency based on alpha in OpenGL, you have to use color blending. In most cases it needs only setting blending function by calling glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) and enabling blending calculations by glEnable(GL_BLEND) call.


If it comes to loading image with alpha from a file, it seems to me that using auxDIBImageLoad function inside your LoadBMP is not a good idea, because it may not handle 32-bit bitmaps. I may be wrong here since I've never used auxDIBImageLoad function. Instead of, you might use Nehe 33 lesson of loading TGA files without GLAUX library.


By the way, you can test fast here your transparency stuff in OpenGL without loading image from a file. Simple use initialized array with 2x2 image of the form

unsigned char imagePixels[] = { 255,0,0,255,   255,255,255,128,  255,255,255,255,  255,0,0,10 };

and use it later to specify 2D texture in OpenGL by calling

glTexImage2D( GL_TEXTURE_2D, 0, 4, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, imagePixels);
Edited by Rootus

Share this post

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

  • Advertisement

Important Information

By using, you agree to our community Guidelines, Terms of Use, and Privacy Policy. is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!