重塑回调永远不会被调用的原因是什么?

时间:2012-05-11 07:31:20

标签: windows-7 glut freeglut

我正在使用Visual Studio Express 2010,其中链接了freeglut_static.lib(在Properties> Linker> Input> Additional Dependencies,版本2.8.0中)并定义了FREEGLUT_STATIC。代码构建和编译,虽然我必须调整一堆属性以使其链接。我正在运行Window-7 64位,虽然代码被编译为32位可执行文件。

代码是

// -----------------------------------
static void reshape(int w, int h) { 
    // free old buffers; allocate new ones; update global state
    // etc...
    ;
}

static void display() { glutSwapBuffers(); }

int main(int argc; char **argv)
{
    glutInitWindowSize(500, 500);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
    glutInit(argc, argv);
    glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE, GLUT_ACTION_GLUTMAINLOOP_RETURNS);
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    // glutIdleFunc(display);
    glutCreateWindow("Hmm");
    glutMainLoop();
    // free resources
    return 0;
}
// ----------

问题是show()或reshape()都没有被调用过。调整窗口大小时,窗口左上角保持白色,其余部分变黑。

取消注释glutIdleFunc()行会导致立即调用显示函数,并且调整窗口大小会使其全部变黑。但是,仍然没有调用reshape()。

我盯着freeglut源代码,无法看到问题所在。不幸的是,我不太了解调试freeglut的Windows API。

为什么回调不起作用的任何想法?

1 个答案:

答案 0 :(得分:3)

glutDisplayFunc设置当前窗口的功能。您必须在glutCreateWindow之前致电glutDisplayFunc