glutidlefunc() 在 freeglut 中的意义何在
What's the point of glutidlefunc() in freeglut
本文关键字:freeglut glutidlefunc 更新时间:2023-10-16
我明白glutdisplayfunc()如何使显示循环,我在某些地方读到你应该把游戏机制放在glutidle而不是显示;为什么不能将它们放在while (gameisrunning)循环中?
在事件驱动编程中,就像在交互式OpenGL应用程序中一样,主应用程序循环通常做三件事:
- 检查当前事件队列,并处理自上次检查 以来发生的任何事件(例如,鼠标移动,按键等)。
- 更新应用程序状态-像玩家和对象位置,游戏物理等-准备下一个渲染帧
- 渲染当前帧
GLUT在其glutMainLoop()
中隐式地为您执行这些步骤。几乎所有您注册的GLUT回调(例如,glutKeyboardFunc()
, glutReshapeFunc()
等)都处理1。,并调用您设置为可能执行2的函数。
现在,如果您向glutIdleFunc()
注册一个空闲函数,它将在处理完所有当前事件后被调用。通常,程序员实现他们的空闲函数只是调用他们用于渲染场景的例程(即,他们传递给glutDisplayFunc()
的例程)。如果渲染"需要一段时间"(比如几乎所有的时间来渲染一帧),这种方法可能会有问题,因为您可能没有时间完成渲染,然后处理下一帧的事件。如果您要插入刚才提到的while循环,那么您就可以这样做,这将绕过GLUT的本地事件处理机制。更好地使用GLUT的方法是将空闲函数实现为只调用glutPostRedisplay()
,它告诉GLUT在处理完所有事件并在调用空闲函数之前调度对显示函数的调用。
相关文章:
- FreeGLUT窗口在启动时消失
- 为什么我需要FreeGLUT来编译和链接GLFW程序
- Visual Studio静态链接(FreeGlut,Glew)
- 使用 GLUT/FreeGLUT 创建核心上下文?
- 从 Freeglut/Opengl 2.1 项目中获取返回值
- FreeGlut网格图未完全以特定值绘制
- C++TinyThread和带有FreeGLUT的OpenGL
- C++类和freeglut(参数类型不匹配)
- VC 中是否有某种空白的板岩和freeglut项目
- 如何检查鼠标是否在FreeGlut的三角区域内单击
- Visual Studio freeglut/glew error ( "missing from computer" )
- 带有OpenGL(freeglut)的SDL在调用glutBitmapCharacter时崩溃
- 如何在OS X Yosemite上安装FreeGlut(3.0.0或2.8.0)
- 如何在Linux Ubuntu 14.04 LTS上设置freeglut库
- 无法从freeGlut项目获取stdoutput
- 如何在Windows机器上构建或安装freeglut
- 编译简单的静态OpenGL 4.0程序,使用MinGW,freeglut和glew
- C++ OpenGL (freeglut)
- 使用FreeGLUT和CUDA进行像素绘制时出现空白白屏
- 如何使用FREEGLUT获得多显示器的所有支持分辨率