Sorry. I changed a bmp from RGB to RGBA. If the red, green, and blue values were all zero I set the pixel’s alpha value to 0 otherwise I set it 255. I made it a texture and called glEnable(GL_ALPHA_TEST) and glAlphaFunc(GL_GREATER, 0.5f). It is a blue square on a white background. I then rendered the texture onto a quad and the white background remained. What can be the problem? Can anyone help?
bool init()
{
glClearColor(0.93f, 0.93f, 0.93f, 0.0f);
BMPClass bmp;
BMPLoad(fileName,bmp);
unsigned char* texels = new unsigned char[bmp.width*bmp.height*4];
unsigned char* outTexel = texels;
unsigned char* inTexel = bmp.bytes;
for( int y = 0; y < bmp.height; y++ )
{
for( int x = 0; x < bmp.width; x++, inTexel += 3, outTexel += 4 )
{
int r = inTexel[0];
int g = inTexel[1];
int b = inTexel[2];
int a;
if(r==0&&g==0&&b==0)
{
a = 0;
}
else
{
a=255;
}
outTexel[0] = r;
outTexel[1] = g;
outTexel[2] = b;
outTexel[3] = a;
}
}
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,bmp.width,bmp.height,0,GL_RGBA,GL_UNSIGNED_BYTE,texels);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glEnable(GL_TEXTURE_2D);
return true;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glEnable (GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER,.5f);
glBegin(GL_QUADS);
glTexCoord2d(0,0); glVertex3d(-1.33,-1,-2);
glTexCoord2d(0,1); glVertex3d(-1.33,1,-2);
glTexCoord2d(1,1); glVertex3d(-1,1,-3);
glTexCoord2d(1,0); glVertex3d(-1,-1,-3);
glEnd();
glutSwapBuffers();
}
Thanks