鉴于纹理 A 和 B 是 RGB 图像,那么也许您可以将其中之一制作成 RGBA 图像,并在一张图像的 Alpha 通道中渲染蒙版。这使您在 iPhone 的两个纹理单元的限制内,允许您一次性完成此操作,而无需混合。
GLSL 伪代码:
vec4 a = texture2D(textureA, texcoord);
vec4 b = texture2D(textureB, texcoord);
gl_FragColor = vec4(a.rgb * a.a + b.rgb * (1-a.a), dont_care.a);
单元 0 的纹理环境:(对 RGB 图像 B 进行采样,并将其传递到下一阶段)
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureB);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
单元 1 的纹理环境:(图像 B 在Cp
和“Ap”源中可用。A 在“Cs”中可用。蒙版在“As”中可用。参见 GL 规范中的表 3.15)。
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, textureA);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
阅读 OpenGL ES 1.1 规范中的第 3.7.12 节纹理环境和纹理函数以获取完整信息。
要将场景实际渲染到图像的 Alpha 通道中,使用 glColorMask() 可能会有所帮助,以允许仅写入 Alpha 通道。您实际上如何将数据输入该通道实际上取决于您为生成该掩码而绘制的内容。