是什么在freeglut glutidlefunc()点(What's the point

2019-08-18 02:07发布

我得到glutdisplayfunc()如何使显示器环和四世,你应该把游戏机制在glutidle而不是显示一些地方读取; 为什么你不能只是把它们在一段时间(gameisrunning)循环?

Answer 1:

在事件驱动编程,就像你在交互式OpenGL应用程序有,主要应用循环通常会做三两件事:

  1. 检查当前事件队列,并处理任何事件(例如,鼠标移动,按键等)自上次检查以来发生的
  2. 更新应用程序的状态 - 比如玩家和物体的位置,游戏物理,等等 - 在准备下一个渲染帧
  3. 呈现当前帧。

GLUT确实隐含在这些步骤glutMainLoop()为您服务。 几乎所有过剩的回调您注册(例如, glutKeyboardFunc() glutReshapeFunc()等),采取1照顾,并打电话给你设立想必做2功能。

现在,如果你注册一个空闲功能glutIdleFunc()它是目前所有的事件被处理后调用。 程序员经常实现他们的空闲功能,只是叫他们所使用的程序渲染的场景(即他们通过纳入常规glutDisplayFunc() 这种方法是有问题的,如果渲染“需要一段时间”(如靠近所有的时间来渲染一帧),因为你可能没有时间完成渲染,然后下一帧处理事件。 如果你插入while循环你提到,你会被眼前这个,规避GLUT的本地事件处理机制做。 更好的方式与GLUT发挥很好的实现你的空闲功能,只调用glutPostRedisplay()它告诉GLUT安排到你的显示功能,一旦所有的事件被处理,你的空闲函数被调用之前的调用。



文章来源: What's the point of glutidlefunc() in freeglut