Ok, I have replaced the texture env mode from decal mode to modulate. So the transparency is not defined only by the image of the texture but also defined by the color of the quad just for testing purpose.
Here is my test code:
#include <iostream>
#include <vector>
#include <GL/glut.h>
void display(void);
void init(void);
void reshape(int w,int h);
GLuint texture_id;
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitWindowSize(512,512);
glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGBA);
glutCreateWindow("Transparency test");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
init();
glutMainLoop();
return(EXIT_SUCCESS);
}
/*---------------------------------------------------*/
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0.0,0.0,2.0,0.0,0.0,0.0,0.0,1.0,0.0);
glPushMatrix();
glDisable(GL_TEXTURE_2D);
glColor4f(1.0,1.0,1.0,1.0);
glTranslatef(-1.5,-1.5,-0.25);
glBegin(GL_TRIANGLE_STRIP);
glVertex3f(-5.0,-5.0,0.0);
glVertex3f(5.0,-5.0,0.0);
glVertex3f(-5.0,5.0,0.0);
glVertex3f(5.0,5.0,0.0);
glEnd();
glPopMatrix();
glPushMatrix();
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,texture_id);
glTexEnvf(GL_TEXTURE_2D,GL_TEXTURE_ENV_MODE,GL_MODULATE);
glDepthMask(GL_FALSE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glColor4f(1.0,1.0,1.0,0.5);//Replace this alpha for transparency
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0.0,0.0);
glVertex3f(-5.0,-5.0,0.0);
glTexCoord2f(1.0,0.0);
glVertex3f(5.0,-5.0,0.0);
glTexCoord2f(0.0,1.0);
glVertex3f(-5.0,5.0,0.0);
glTexCoord2f(1.0,1.0);
glVertex3f(5.0,5.0,0.0);
glEnd();
glDisable(GL_BLEND);
glDepthMask(GL_TRUE);
glPopMatrix();
glutSwapBuffers();
}
/*------------------------------------------------------*/
void init(void)
{
glEnable(GL_DEPTH_TEST);
std::vector<GLubyte> texel;
texel.push_back(255); texel.push_back(0); texel.push_back(0);texel.push_back(255);
texel.push_back(0); texel.push_back(255); texel.push_back(0);texel.push_back(255);
texel.push_back(0); texel.push_back(0);texel.push_back(255);texel.push_back(255);
texel.push_back(0); texel.push_back(255);texel.push_back(255);texel.push_back(255);
glEnable(GL_TEXTURE_2D);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glGenTextures(1,&texture_id);
glBindTexture(GL_TEXTURE_2D,texture_id);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,2,2,0,GL_RGBA,GL_UNSIGNED_BYTE,&texel[0]);
glDisable(GL_TEXTURE_2D);
}
/*-------------------------------------------------------*/
void reshape(int w,int h)
{
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-5.0,5.0,-5.0,5.0,1.0,100.0);
glMatrixMode(GL_MODELVIEW);
}
This code work for me. But if it does not work for you, can you post a screen shot to see what happen.