我使用opengl,使用GLUT和GLEW库为特定应用程序创建插件。
这个插件并不是以一个简单的int main(argc,argv)开头的。所以我无法将这些值传递给glutInit()。
我试过这样的事情:
glutInit(0, NULL); <--- Crash
GLenum err = glewInit();
但是当我试图调用glutInit()函数时我崩溃了。我可以重建那些参数,以便它不会崩溃并且仍然可以使用Glut库.. ??
答案 0 :(得分:7)
你可以这样做:
#include <GL/freeglut.h>
int main()
{
char fakeParam[] = "fake";
char *fakeargv[] = { fakeParam, NULL };
int fakeargc = 1;
glutInit( &fakeargc, fakeargv );
//...
}
但请注意,这是一个丑陋的黑客。
答案 1 :(得分:4)
您可能需要使用有效的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);
答案 2 :(得分:3)
请注意来自源代码(freeglut_init.c:677
)的以下代码:
void FGAPIENTRY glutInit( int* pargc, char** argv )
{
char* displayName = NULL;
char* geometry = NULL;
int i, j, argc = *pargc;
...
(注意解除引用。)
似乎glutInit()
确实需要最少的进程名称,尽管手册页并未对此有所了解。
答案 3 :(得分:0)
我认为这是初始化过剩申请的事实标准。
For Each slice In slices
graph.drawSlice slice
Next
可以在每个应用程序的基础上修改此函数,以提供所需的参数(如果有的话),同时永久解决每个人的问题,询问为什么要将命令行参数传递给第三方库。