我看的是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);
它应该做的是将纹理混合到缓冲区中。
为什么需要
glTextEnvx
和glColor4x
通话?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为完全透明)时,可以从颜色基本体获得透明效果。