Sign in to follow this  

Create a new texture from two blended textures

This topic is 1957 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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:

[img]http://i.imgur.com/qkIIz.png[/img]

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

[CODE]
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_TEXTURE_WIDTH, &w);
glGetTexLevelParameteriv(GL_TEXTURE_2D,0,GL_TEXTURE_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;
}
[/CODE]

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. Edited by grasshop

Share this post


Link to post
Share on other sites
It depends a little on your requirements. If you only need to do it once, you may as well do it "off-line". That is, you can do it yourself without using OpenGL.

If you have real-time requirements, using OpenGL to do it seems like a good idea. The usual solution is to use a [url="http://www.opengl.org/wiki/Framebuffer_Object"]Frame Buffer Object[/url].

However, I think you should to abandon the deprecated [url="http://www.opengl.org/wiki/Legacy_OpenGL"]legacy opengl[/url]. With shaders, you get it exactly the way you want it.

Share this post


Link to post
Share on other sites
Thanks for the help, I did it manually a lot better. [img]http://public.gamedev.net//public/style_emoticons/default/smile.png[/img] Edited by grasshop

Share this post


Link to post
Share on other sites
Sign in to follow this