Skip to main content
 首页 » 编程设计

opengl之了解 glutDisplayFunc 和 glutPostRedisplay 之间的关系

2024年02月05日13kuangbin

在阅读红皮书时我发现:

glutDisplayFunc(void (*func)(void)) is the first and most important event callback function you will see. Whenever GLUT determines that the contents of the window need to be redisplayed, the callback function registered by glutDisplayFunc() is executed. Therefore, you should put all the routines you need to redraw the scene in the display callback function.

If your program changes the contents of the window, sometimes you will have to call glutPostRedisplay(), which gives glutMainLoop() a nudge to call the registered display callback at its next opportunity

什么时候应该调用 glutPostRedisplay()?从这一段来看,我不明白为什么需要它的功能。

请您参考如下方法:

每当必须重绘窗口时,就会调用 glutDisplayFunc。这包括调用 glutPostRedisplay 的时间:)

什么时候需要重绘窗口?

  • 当其大小发生变化时
  • 当它变得可见时
  • 当它的某些部分变得可见时
  • 移动时
  • 等等

但是如果你的显示函数在位置 x;y 处绘制一个三角形,其中 x;y; 会怎样?是由鼠标位置决定的吗?在这种情况下,您必须要求系统在鼠标向右移动时重绘窗口?这就是为什么您要从 MouseFunc() 调用 glutPostRedisplay。实际上,当您调用 glutPostRedisplay 时,重绘事件与其他窗口事件(例如鼠标单击事件)一起排队。本质上,你的 mainLoop 是从该队列中选择事件并调用它们的处理程序