Multitexturing with 3 Texture Units

Started by
1 comment, last by inTranceX 15 years, 5 months ago
Hello! Is it possible to blend 2 textures with an alpha-texture with a graphic card which has only 3 Texture Units? I would like to calculate: FinalColor = TexA*(AlphaTex) + TexB*(1-AlphaTex) Every solution I have ever seen used 4 Textures (2 normal textures and two alphas). Is there a way to do it with 3 textures? How do I have to configure the blending stages? Thanks for any advice!
Advertisement
Hi,

I really recommend to use shaders for solution to this. Although it can be done with several texture units ... look closer here:

Link

The best solution would probably be using GL_INTERPOLATE_EXT token for glTexEnvi (or glTexEnvf, ...) - it does this - Arg0 * (Arg2) + Arg1 * (1-Arg2), e.g. exactly what you want.
Dunno if this is correct, but it should be written like (not sure, please anybody correct me if this is wrong ... I hadn't time to test it):
// first setup first texture unitglActiveTexture(GL_TEXTURE0);glBindTexture(GL_TEXTURE_2D, TexA);glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);glActiveTexture(GL_TEXTURE1);glBindTexture(GL_TEXTURE_2D, TexB);glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT)glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT,  GL_INTERPOLATE_EXT);glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT,  GL_TEXTURE1);glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT,  GL_PREVIOUS_EXT);glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT,  GL_PRIMARY_COLOR_EXT);glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);glActiveTexture(GL_TEXTURE2);glBindTexture(GL_TEXTURE_2D, AlphaTex);glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT,  GL_INTERPOLATE_EXT);glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT,  GL_PREVIOUS_EXT);glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT,  GL_TEXTURE2);glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT,  GL_PRIMARY_COLOR_EXT);glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);

My current blog on programming, linux and stuff - http://gameprogrammerdiary.blogspot.com

Thanks for your answer - will try it later on!

Unfortunately, my graphic card has not only not more than 3 TU but also no support for Shaders :-) It's an old ATI Mobility Radeon.

This topic is closed to new replies.

Advertisement