0

我正在使用 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;
}
// ----------

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

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

我盯着 freeglut 源代码看,看不出问题出在哪里。不幸的是,我对调试 freeglut 的 Windows API 知之甚少。

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

4

1 回答 1

3

glutDisplayFunc设置当前窗口的功能。你必须先glutCreateWindow打电话glutDisplayFunc

于 2012-05-11T07:40:45.200 回答