Create new texture from multitexture

喜夏-厌秋 提交于 2019-12-11 07:13:09

问题


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 textures, 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?


回答1:


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.




回答2:


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).



来源:https://stackoverflow.com/questions/6997774/create-new-texture-from-multitexture

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!