开发者

Create new texture from multitexture

开发者 https://www.devze.com 2023-03-26 19:14 出处:网络
I\'m struggling trying to understand how to create a new texture (with a new GLHandle, if possible) after merging two other in the same concept of multitexturing. I\'m doing this because I\'m using ET

I'm struggling trying to understand how to create a new texture (with a new GLHandle, if possible) after merging two other in the same concept of multitexturing. I'm doing this because I'm using ETC1 compressed t开发者_如何学Goextures, witch doesn't support alpha channel's, so I wanted to load the pre-generated alpha channel from another file and "merge" both of them after uncompressing.

I know that multitexturing does this, but it implies to render the two textures (compressed + alpha) altogether, right?

Also, I'm doing this because I've seen a massive speedup in my rendering pipeline by using compressed textures. If I recreate it with the alpha channel it's supposed that the performance benefits will stick, right?


I think you can do it with OpenGL ES 1.1 using multitexturing and the GL_COMBINE environment. First we use whatever standard environment you want for the color texture:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, rgbTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);    //or maybe GL_REPLACE

Then for the alpha texture, which is bound to the second unit, we just take the color from the previous stage (the color texture) and only use the alpha of the texture.

glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, alphaTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTenEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);    //default
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE);    //or maybe GL_REPLACE
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA, GL_TEXTURE);     //default
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);  //default
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA, GL_PREVIOUS);    //default
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);  //default

If I misunderstood you and you don't want to use multitexturing (and neither fragment shaders), then you won't be able to combine these two textures during rendering. Perhaps with a multipass technique but I'm not sure if that would buy you anything performance-wise.


You just need fragment shader.

In which you will mix color and alpha value from those two textures. Thats all. (Color goes as ususally, and alpha value go directly to output).

0

精彩评论

暂无评论...
验证码 换一张
取 消