C++ 在OpenGL中创建环境堆栈
我想在OpenGL中创建一个类似于矩阵堆栈的环境设置(混合、模板、深度等)的抽象。推到堆栈上,进行所需的任何更改,绘制对象,然后弹出堆栈并返回到先前的设置 例如,当前可能有如下图形代码:C++ 在OpenGL中创建环境堆栈,c++,c,opengl,abstraction,C++,C,Opengl,Abstraction,我想在OpenGL中创建一个类似于矩阵堆栈的环境设置(混合、模板、深度等)的抽象。推到堆栈上,进行所需的任何更改,绘制对象,然后弹出堆栈并返回到先前的设置 例如,当前可能有如下图形代码: glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_DEPTH_TEST); //Draw operations glEnable(GL_DEPTH_TEST); glDisable(GL_BLE
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
glPushEnv();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glPopEnv();
但如果使用环境堆栈,它将如下所示:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
glPushEnv();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glPopEnv();
在我看来,只有两种方法可以做到这一点:
因此,我的问题是,在这种情况下,如何更改OpenGL环境函数指向的函数?OpenGL已经包含此功能。您需要
glPushAttrib(GL\u所有属性位)代码>和glpopatrib()代码>。有关更多信息,请参阅。Wow。我从未遇到过这种情况。这似乎是一件非常有用的事情,他们必须有办法做到这一点。谢谢