我对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()是静态的?
答案 0 :(得分:2)
你真正需要的唯一回调(一旦被发生时被调用的函数)就是glutDisplayFunc,当你需要编写应用程序将要显示的内容时调用它(这通常每秒执行大约60次,但取决于关于许多事情,例如计算机性能或垂直同步)。
glutIdleFunc是一个函数,只要没有别的事情可以调用它(这就是为什么它是空闲的),但它没有必要。根据您设计应用程序的方式,将需要此功能,但正如您在上述程序中看到的那样,主要是可选的。
至于它为什么调用InitializeGlutCallbacks(),这就是我们可以称之为“良好的编程习惯”:再次,没有必要,但是你会很好地收集函数中的所有初始化函数,这样在阅读代码时会有所帮助
最后,除了阻止其他模块访问它们之外,我完全没有看到为什么会将这些函数设置为静态的任何原因。你可以尝试删除“静态”,你会看到它的工作原理都是一样的。
编辑:解释因为我猜你在某种程度上被迫使用过剩,但我同意其他海报,如果你可以选择,GLFW是更好的选择。