我正在使用 opengl,使用 GLUT 和 GLEW 库为某个应用程序创建插件。
这个插件不是以简单的 int main(argc, argv) 开头的。所以我不能将这些值传递给 glutInit()。
我试过这样的事情:
glutInit(0, NULL); <--- Crash
GLenum err = glewInit();
但是当它试图调用 glutInit() 函数时我崩溃了。我可以如何重建这些参数,这样它就不会崩溃并且仍然能够使用 Glut 库..?
你可以这样做:
#include <GL/freeglut.h>
int main()
{
char fakeParam[] = "fake";
char *fakeargv[] = { fakeParam, NULL };
int fakeargc = 1;
glutInit( &fakeargc, fakeargv );
//...
}
但请注意,这是一个丑陋的黑客。
即使您没有任何参数,您也可能必须glutInit
使用有效参数进行调用:argv
char *my_argv[] = { "myprogram", NULL };
int my_argc = 1;
glutInit(&my_argc, my_argv);
也可能是第一个参数是一个指向的指针int
,它不能为NULL?那么只传递一个有效的argc
参数就足够了:
int my_argc = 0;
glutInit(&my_argc, NULL);
请注意源代码 ( ) 中的以下代码freeglut_init.c:677
:
void FGAPIENTRY glutInit( int* pargc, char** argv )
{
char* displayName = NULL;
char* geometry = NULL;
int i, j, argc = *pargc;
...
(注意取消引用。)
似乎glutInit()
确实需要最少的进程名称,尽管手册页对此没有任何说明。
我建议将此作为初始化 glut 应用程序的事实标准。
static inline void glutInstall()
{
char *glut_argv[] = {
"",
(char *)0
};
int glut_argc = 0;
glutInit(&my_argc, my_argv);
}
这个函数可以在每个应用程序的基础上进行修改,为 glut 提供它需要的参数(如果有的话),同时永久解决每个人都问你为什么将命令行参数传递给 3rd 方库的问题。