当前位置:  开发笔记 > 编程语言 > 正文

在OpenGL中创建环境堆栈

如何解决《在OpenGL中创建环境堆栈》经验,为你挑选了1个好方法。

我想在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_BLEND); 

但是对于环境堆栈,它看起来像这样:

glPushEnv();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glPopEnv(); 

我认为只有两种方法可以做到这一点:

    创建我自己的每个环境设置功能的'味道'并调用它.它将依次更新当前的EnvStack数据结构并调用OpenGL环境函数.

    改变OpenGL环境函数指向我的环境函数,它将再次更新当前的EnvStack数据结构并调用原始的OpenGL环境函数.

所以选项1显然要简单得多.但是如果我使用其他人的代码,我会遇到一个问题,因为我不一定知道它对环境做了什么改变,因此我的数据结构会不同步.而且由于重点是确保环境设置正确的简单方法,这并不酷.

所以我的问题是,在这个上下文中,我如何更改OpenGL环境功能指向的功能?



1> Rune..:

OpenGL已经包含此功能.你想要glPushAttrib(GL_ALL_ATTRIB_BITS);glPopAttrib();.有关更多信息,请参见http://opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/pushattrib.html.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有