我看的是surfaceflinger,也就是在android中进行组合的代码,我很难理解opengl es 1.0调用,因为我只编写了es 2.0代码。
下面是我感兴趣的代码:

glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glColor4x(0x10000, 0x10000, 0x10000, 0x10000);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

它应该做的是将纹理混合到缓冲区中。
为什么需要glTextEnvxglColor4x通话?glBlendFunc是否足以实现混合?
我知道我的问题很幼稚,但即使在阅读了docs之后,我仍然不明白什么是glTexEnvx

最佳答案

glTexEnv()设置纹理环境模式。GL_REPLACE告诉渲染器跳过当前颜色(例如,从glColor4()开始),而是告诉渲染器对每个对应的像素使用纹理的颜色。如果您使用GL_REPLACE,而不是GL_MODULATE,则当渲染器设置像素颜色时,您的glColor4()调用将与纹理的颜色一起包含。
您的glColor4()调用不应该执行在对象上可以看到的任何操作(当使用GL_REPLACE时)。
关于你的glBlendFunc()论点:
GL_ONE使用来自传入原语的当前颜色,我们称之为source。GL_ONE_MINUS_SRC_ALPHA将目标(当前存储在帧缓冲区中的像素)乘以(1-源alpha值)。
通常,当不使用纹理时,当glColor4()包含alpha值(其中1等于完全不透明,0为完全透明)时,可以从颜色基本体获得透明效果。

10-08 17:56