1.问题:
最近在配置SiftGPU(参见高翔博士的博客-SLAM拾萃(3):siftGPU)时遇到一个关于freeglut的问题:freeglut ERROR: Function <glutDestroyWindow> called without first calling 'glutInit'.
问题截图
2.分析:
我看了下SiftGPU的源代码,在src/SiftGPU/LiteWindow.h中有调用glutDestroyWindow函数,但是在调用glutDestroyWindow之前已经调用了glutinit函数,和上面的错误描述有矛盾;
我暂时也不明白为什么会报这种错误。。。
3.解决办法:
在google上找了很久,找到一个解决办法:
在调用glutDestroyWindow之前再调用一次glutinit,只不过glutinit的两个参数设为空值。
//修改前
virtual ~LiteWindow() { if(glut_id > 0) glutDestroyWindow(glut_id); }
//修改后
virtual ~LiteWindow()
{
if(glut_id > 0)
{
//添加以下三行,调用glutinit(),解决问题:freeglut ERROR: Function <glutDestroyWindow> called without first calling 'glutInit'.
int argc = 0;
char** argv;
glutInit(&argc, argv);
glutDestroyWindow(glut_id);
}
}
然后,问题就解决啦~