从multitexture创建新纹理

时间:2011-08-09 14:27:42

标签: opengl-es

在使用相同的多纹理概念合并另外两个纹理之后,我正在努力了解如何创建新纹理(如果可能的话,使用新的GLHandle)。我这样做是因为我使用的是ETC1压缩纹理,因为我不支持alpha通道,所以我想从另一个文件中加载预先生成的alpha通道,并在解压缩后“合并”它们。

我知道多重纹理会这样做,但它意味着完全渲染两个纹理(压缩+ alpha),对吗?

另外,我这样做是因为我通过使用压缩纹理在渲染管道中看到了大量的加速。如果我用alpha通道重新创建它,那么它应该会保持性能优势,对吗?

2 个答案:

答案 0 :(得分:1)

我认为你可以使用多纹理和GL_COMBINE环境来使用OpenGL ES 1.1。首先,我们使用您想要的任何标准环境来获得颜色纹理:

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

然后对于绑定到第二个单位的alpha纹理,我们只采用前一个阶段的颜色(颜色纹理)并仅使用纹理的alpha。

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

如果我误解了您并且您不想使用多重纹理(并且既不使用片段着色器),那么在渲染过程中您将无法组合这两个纹理。也许采用多通道技术,但我不确定这是否会在性能方面为您带来任何好处。

答案 1 :(得分:0)

您只需要片段着色器。

您将在其中混合来自这两个纹理的颜色和Alpha值。就这样。 (颜色与通常一样,alpha值直接输出)。