OpenGL ES - 获取当前的blendFunc

时间:2009-12-07 16:44:47

标签: opengl-es

我想做这样的事情:

currentBlendFunc = glGetCurrentBlendFunc();
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

// [...] do stuff

glBlendFunc(currentBlendFunc.src, currentBlendFunc.dest);

有没有办法获得当前的混合功能?

3 个答案:

答案 0 :(得分:4)

我刚遇到同样的情况。这是我保存先前混合状态并在完成后恢复的方法。

// save off current state of blend enabled
GLboolean blendEnabled;
glGetBooleanv(GL_BLEND, &blendEnabled);

// save off current state of src / dst blend functions
GLint blendSrc;
GLint blendDst;
glGetIntegerv(GL_BLEND_SRC_ALPHA, &blendSrc);
glGetIntegerv(GL_BLEND_DST_ALPHA, &blendDst);

//
// change blend state... do other stuff 
//

// restore saved state of blend enabled and blend functions
if (blendEnabled) {
    glEnable(GL_BLEND);
}
else {
    glDisable(GL_BLEND);
}

glBlendFunc(blendSrc, blendDst);

答案 1 :(得分:2)

根据documentation,您正在寻找的函数是glGet,其中包含GL_BLEND_SRC,GL_BLEND_DST。这是OpenGL的一个烦恼,就是get和sets不匹配(除其他外)。

答案 2 :(得分:2)

多年以后,我遇到了同样的问题,文档仍然不清楚或被窃听。

@ don在未完成/错误的解决方案中,您还需要恢复_RGB值:

GLint last_blend_src_rgb; glGetIntegerv(GL_BLEND_SRC_RGB, &last_blend_src_rgb);
GLint last_blend_dst_rgb; glGetIntegerv(GL_BLEND_DST_RGB, &last_blend_dst_rgb);
GLint last_blend_src_alpha; glGetIntegerv(GL_BLEND_SRC_ALPHA, &last_blend_src_alpha);
GLint last_blend_dst_alpha; glGetIntegerv(GL_BLEND_DST_ALPHA, &last_blend_dst_alpha);

...

glBlendFuncSeparate(last_blend_src_rgb, last_blend_dst_rgb, last_blend_src_alpha, last_blend_dst_alpha);