繁体   English   中英

在OpenGL中创建环境堆栈

[英]Creating an Environment Stack in OpenGL

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

如我所见,只有两种方法可以做到这一点:

  1. 为每个环境设置函数创建我自己的“风味”,然后调用它。 它将依次更新当前的EnvStack数据结构并调用OpenGL环境函数。
  2. 更改OpenGL环境函数以指向我的环境函数,这将再次更新当前的EnvStack数据结构并调用原始OpenGL环境函数。

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

所以我的问题是,在这种情况下,如何更改OpenGL环境函数指向的函数?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM