Opengl es glPushMatrix()/glPopMatrix()不';不影响混合状态。为什么会这样?

Opengl es glPushMatrix()/glPopMatrix()不';不影响混合状态。为什么会这样?,opengl-es,Opengl Es,我一直在尝试让OpenGL ES做一些大致如下的事情,看看是否可以使用glPushMatrix()和glPopMatrix()将诸如混合状态之类的事情恢复到调用glPushMatrix()之前的状态 它适用于旋转/平移的东西-为什么它不适用于其他一些东西,比如混合状态 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); //<-first blend mode glPushMatrix(); glBlendFunc(GL_DST_COLOR, GL

我一直在尝试让OpenGL ES做一些大致如下的事情,看看是否可以使用glPushMatrix()和glPopMatrix()将诸如混合状态之类的事情恢复到调用glPushMatrix()之前的状态

它适用于旋转/平移的东西-为什么它不适用于其他一些东西,比如混合状态

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); //<-first blend mode

glPushMatrix();

glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA); //<-second blend mode

//...drawing and stuff here...

glPopMatrix(); 

//at this point it appears the second blend mode is still in effect - why?

glBlendFunc(GL_ONE,GL_ONE减去SRC_ALPHA)// 正如您所知,OpenGL是一个状态机,各种glPush和glPop函数控制堆栈。现在,有多个堆栈。矩阵堆栈仅包含坐标变换。还有另一个堆栈,称为属性堆栈,它包含混合函数设置。签出。

对于OpenGL ES,属性堆栈不存在,抱歉

如果你真的愿意,你可以自己写一本。所有属性都是可获取的,所以任何堆栈数据结构都可以


更好的方法是定义一手有用的混合预设,并有一个小小的状态机,允许您使用对OpenGL ES的最少调用从一种混合模式切换到另一种混合模式。毕竟-您真正需要多少种不同的混合模式?

您可以使用它来获得所有混合选项。然后您可以使用它们来恢复混合状态。

OpenGL ES中没有glPushAttrib():(是的。我希望有某种方法可以一次性重置混合模式、颜色,所有这些。看来我可能运气不好。