2

OpenGLglut图书馆学习。问题是当程序增长时,要处理的事情太多global variables了。正如很多人所说,在程序中使用太多是不可取global variables的。但是,我global variables不能通过将用户定义的参数传递给 glut 定义的回调函数来替代 。例如:

void display (void)
{
   // How to pass user defined parameters here?
   // some more code
}
int
main(void)
{
    glutDisplayFunc(display);
    // some more code
}

所以我的问题是:

  1. 用glut编写OpenGL时如何处理全局变量?
  2. 有没有其他方法可以替换全局变量而不是将参数传递给函数
  3. 其他处理OpenGL输入/输出的库(不是过剩)如何处理全局变量?
4

1 回答 1

0

“没有全局变量”的规则是不完整的。实际的措辞是“没有全局变量在函数之间传递参数”。然而,全局变量可以很好地保持全局、程序范围的状态。

用glut编写OpenGL时如何处理全局变量?

如果您管理的状态是程序状态,那么全局变量实际上是可以的。可以使用 检索窗口相关状态glutGet。不要忘记,OpenGL 本身就是一个大型的全局状态机。每个线程有一个全局 OpenGL 上下文,切换上下文实际上会更改全局变量。

不要将 GLUT reshape 函数用于与渲染相关的事情,即不要在 reshape 中设置视口和投影。在显示功能中执行此操作。

有没有其他方法可以替换全局变量而不是将参数传递给函数

有一些方法,比如使用ffcall库将参数化函数转换为可以传递给 GLUT 的闭包。

其他处理OpenGL输入/输出的库(不是过剩)如何处理全局变量?

通过允许将数据参数传递给回调函数(GLUT 中的重大设计失败,不允许这样做),或者使用基于消息/信号的系统而不是回调。

于 2012-04-18T10:40:22.493 回答