0

我真的对 glutMainloop() 函数感到困惑。该函数的循环中使用了哪些函数?我认为使用了 glutIdleFunc(),但我见过不使用此功能的代码。

#include <GL/glut.h>

static void RenderSceneCB()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glutSwapBuffers();
}

static void InitializeGlutCallbacks()
{
    glutDisplayFunc(RenderSceneCB);
}


int main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
    glutInitWindowSize(1024, 768);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("Tutorial 01");

    InitializeGlutCallbacks();

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

    glutMainLoop();

    return 0;
} 

同样在这段代码中,为什么使用 InitializeGlutCallbacks()?为什么不只是 glutDisplayFunc(RenderSceneCB); 写而不是 InitializeGlutCallbacks()?最后为什么 InitializeGlutCallbacks() 是静态的?

4

1 回答 1

2

您真正需要的唯一回调(当发生某些事情时调用的函数)是 glutDisplayFunc,当您需要编写应用程序将要显示的内容时调用它(这通常每秒执行大约 60 次,但取决于一个数字事物,例如计算机性能或垂直同步)。

glutIdleFunc 是一个在无事可做时调用的函数(这就是它空闲的原因),但这不是必需的。根据您设计应用程序的方式,将需要此功能,但正如您在上述程序中看到的那样,主要是可选的。

至于它为什么调用 InitializeGlutCallbacks(),这就是我们所说的“良好的编程实践”:同样,这不是必需的,但你最好将所有初始化函数收集在一个函数中,这样在阅读代码时会有所帮助。

最后,除了阻止其他模块访问它们之外,我绝对没有任何理由将这些函数设为静态。您可以尝试删除“静态”,您会看到它完全一样。

编辑:解释为我猜你不知何故被迫使用过剩,但我同意其他海报,如果你可以选择,GLFW 是一个更好的选择。

于 2013-01-23T15:03:55.297 回答