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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |