opengl - 使用 glut(或 freeglut)编写 OpenGL 时处理全局变量

标签 opengl global-variables glut

我正在使用 glut 库学习 OpenGL。问题是当程序增长时,有太多的全局变量需要处理。正如很多人所说,在程序中使用太多 global variables 是不对的。但是,我无法通过将用户定义的参数传递给 glut 定义的回调函数来替换 global variables。例如:

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

所以我的问题是:

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

最佳答案

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

How to handle the global variables when writing OpenGL with glut?

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

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

Is there any other ways to substitute the global variables instead of passing the parameters to functions

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

How does other libs(not glut) handling the input/output of OpenGL deal with global variables?

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

关于opengl - 使用 glut(或 freeglut)编写 OpenGL 时处理全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10205716/

相关文章:

javascript - 如果一个 javascript 变量位于类之外,但位于模块的闭包内,它是私有(private)的吗?

python - 如何使用 tf.constant 或 numpy 数组初始化 tf.Variable?

java - 简单的 Java OpenGL 纹理管理器

c - GLFW 和 GLEW 的段错误

qt - 使用自定义 QGLWidget 调用 Qt 的 QGraphicsView::setViewport

java - 事件多次触发 - LWJGL

php - 在单独的 PHP 脚本中访问全局变量?

c++ - OpenGL坐标问题

c++ - 使用 GLUT 按键停止动画?

c++ - OpenGL/GLUT 中的鼠标拖动对象