加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在使用GLUT时避免全局变量

发布时间:2020-12-16 06:58:43 所属栏目:百科 来源:网络整理
导读:GLUT是一个很棒的API,它很容易使用,但我在处理范围方面遇到了一些困难.在定义回调时,没有传递参数的选项,所以在我看来好像程序员被迫依赖全局变量,我觉得很难接受.现在我将所有GLUT代码放在它自己的模块中,在它自己的线程上运行,并定义一个静态指针,我在模块
GLUT是一个很棒的API,它很容易使用,但我在处理范围方面遇到了一些困难.在定义回调时,没有传递参数的选项,所以在我看来好像程序员被迫依赖全局变量,我觉得很难接受.现在我将所有GLUT代码放在它自己的模块中,在它自己的线程上运行,并定义一个静态指针,我在模块的入口点分配,如下所示:

主要模块

int main( int argc,char** argv ) {
    int foo;
    boost::thread graphicsThread(glutMain,argc,argv,&foo);

    //...

    graphicsThread.join();
    return 0;
}

GLUT模块

static int* FOO_REF;

int glutMain( int argc,char** argv,int* foo ) {
    FOO_REF = foo;
    glutInit(&argc,argv);
    //etc...

有没有比这更好的解决方案?

解决方法

如果您正在使用freeglut或衍生产品并且愿意将自己限制在freeglut衍生品中,那么它只有一个非标准扩展来解决问题.您可以将void *与每个窗口相关联.如果你创建一个包含你想要的所有每个窗口数据的结构,你可以完全避免使用全局变量.

概要:

#include <GL/glut.h>
#include <GL/freeglut_ext.h>


void * glutGetWindowData();
glutSetWindowData(void *data);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读