gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:02:04 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com