PDA

View Full Version : Create a new texture from two blended textures



grasshop
09-08-2012, 02:49 PM
Hi guys, I am trying to create a new texture from a background texture but with it's alpha values set from the colour gradient of another texture. Ie like this:

http://i.imgur.com/qkIIz.png

This is a framework of the C++ code I am using:



unsigned tex_aft(int tex, int copy_tex)
{
//tex is the texture to set the alpha to, copy_tex is the texture to take the colour gradients from for the alpha values
GLuint texture = tex, copy_texture = copy_tex;
glPushAttrib(GL_CURRENT_BIT | GL_COLOR_BUFFER_BIT | GL_ENABLE_BIT);
glColor4f(1,1,1,1);
glClear(GL_COLOR_BUFFER_BIT);
glDisable(GL_BLEND);
glBindTexture(GL_TEXTURE_2D, texture);
int w, h;
glGetTexLevelParameteriv(GL_TEXTURE_2D,0,GL_TEXTUR E_WIDTH, &w);
glGetTexLevelParameteriv(GL_TEXTURE_2D,0,GL_TEXTUR E_HEIGHT, &h);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_SRC_COLOR);
glBindTexture(GL_TEXTURE_2D, copy_texture);
char* bitmap = new char[(h<<(lgpp2(w)+2))|2]; //lgpp2() function is used to get powers of two
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, bitmap);
GLuint tex_new;
glGenTextures(1, &tex_new);
glBindTexture(GL_TEXTURE_2D, tex_new);
glTexImage2D(GL_TEXTURE_2D, 0, 4, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, void(bitmap));
delete[] bitmap;
glPopAttrib();
return tex_new;
}


But from what I know you can't use glBlendFunc to blend bound textures like this, all this code winds up doing is returning a straight replica of the copy_tex. So does anybody here please know what code I could use to blend the two textures like I have described and create a new texture from this?

Thanks for any help.