I'm making a sprite system for opengl; I can load the bitmaps (plural bitmaps, because there's an alpha mask) ok. I can make the quad ok. Then I render it. What is not ok is what happens when I try to draw other things on the screen. Even with an "alpha" component of 255 (completly on) weird things happen. For example, when I display a brown 16x16 quad after drawing a white rectangle, the white quad turns brown too. Here's the important parts of my code (tell me if there's something else I should include as important):
This is in my initalization code:
W and H are the width and heigth of the screen, respectivly.Code:glOrtho(0,W-1,H-1,0,1,-1); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_TEXTURE_2D);
This is how I create the texture:
w and h are the width and heigth of the texture, final_bmp is a pointer to the color+alpha chanel. f->tex is the tex id thingy.Code:/*Make the texture*/ glGenTextures(1,&(f->tex)); glBindTexture(GL_TEXTURE_2D,f->tex); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,w,h,0,GL_RGBA,GL_UNSIGNED_BYTE,final_bmp);
Finally, I draw the texture like this:
x and y are the positions on the screen; they are representative of the upper left corner of the texture. f->h and f->w are the heigth and width of the texture, respectivly.Code:glBindTexture(GL_TEXTURE_2D,f->tex); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex2i(x,y+f->h); glTexCoord2f(1,0); glVertex2i(x+f->w,y+f->h); glTexCoord2f(1,1); glVertex2i(x+f->w,y); glTexCoord2f(0,1); glVertex2i(x,y); glEnd();
Please help me. I'm really lost right now.