【发布时间】:2010-09-26 20:59:52
【问题描述】:
我想在 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环境函数指向my环境函数,这将再次更新当前EnvStack数据结构并调用原始OpenGL环境函数。
所以选项 1 显然要简单得多。但是,如果我使用其他人的代码,我会遇到一个问题,因为我不一定知道它对环境做出了什么改变,因此我的数据结构会不同步。而且由于关键是要有一个简单的方法来确保环境设置正确,这并不酷。
所以我的问题是,在这种情况下,如何更改 OpenGL 环境函数指向的函数?
【问题讨论】:
标签: c++ c opengl abstraction