I figured it out finally. If anyone else needs to work with bitmaps here is my code:
AUX_RGBImageRec* LoadBMP(const char* bmpFileName);
bool drawBMP( float x, float y, const char* fname, bool trans );
AUX_RGBImageRec* LoadBMP(const char* bmpFileName)
{
if (!bmpFileName)
{
return NULL;
}
FILE* inFile = fopen(bmpFileName,“rb”);
if (inFile)
{
fclose(inFile);
return auxDIBImageLoad(bmpFileName);
}
return NULL;
}
bool drawBMP( float x, float y, const char* fname, bool trans )
{
unsigned char * n;
unsigned char * r,*a;
int cnt;
AUX_RGBImageRec* img = LoadBMP( fname );
if (img)
{
/* TEST TRANSPARENCY CODE /
if( trans )
{
n = (unsigned char)malloc( img->sizeX * img->sizeY * 4 );
r = img->data;
a = n;
for( cnt=0;cnt<img->sizeX*img->sizeY;cnt++)
{
*a = *r;
*(a+1) = *(r+1);
*(a+2) = (r+2);
if( (a < 0x1) && ((a+1) < 0x1) && ((a+2) < 0x1) )
*(a+3) = 0x00;
else
(a+3) = 0xFF;
a+=4;
r+=3;
}
}
/ END OF TRANSPARENCY CODE */
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, .95f);
glRasterPos2f( x, y );
if( trans )
glDrawPixels( img->sizeX , img->sizeY, GL_RGBA, GL_UNSIGNED_BYTE, n );
else
glDrawPixels( img->sizeX , img->sizeY, GL_RGB, GL_UNSIGNED_BYTE, img->data );
free(img);
return( true );
}
return( false );
}
void display( void )
{
glClear(GL_COLOR_BUFFER_BIT);
drawBMP( 1,1,“bg.bmp”, false );
drawBMP( 1,1,“test.bmp”, true );
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB );
glutInitWindowSize( 200, 200 );
glutCreateWindow("test");
glOrtho( 0.0, 200, 0.0, 200, -1.0, 1.0 ); // Define co-ords
glClearColor(0.0, 0.0, 0.0, 0.0); // Back Ground Color
glutDisplayFunc(display);
glutMainLoop();
return 0;
}