理解glutDisplayFunc和glutPostRedisplay之间的关系

时间:2010-11-17 16:12:04

标签: opengl glut

在阅读红皮书时,我发现:

  

glutDisplayFunc(void(* func)(void))是   第一个也是最重要的事件   你会看到回调函数。   每当GLUT确定时   窗口的内容需要   重新显示,回调函数   由glutDisplayFunc()注册   执行。因此,你应该把   您需要重绘的所有例程   显示回调中的场景   功能

     

如果您的程序更改了内容   窗户,有时你会有   调用glutPostRedisplay(),哪个   给glutMainLoop()一个轻微的调用   其注册的显示回调   下次机会

应该调用glutPostRedisplay()的次数是多少?从这一段开始,我不明白为什么需要它的功能。

2 个答案:

答案 0 :(得分:16)

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

什么时候需要重绘窗口?

  • 当尺寸改变时
  • 当它变得可见时
  • 当其中某些部分可见时
  • 移动时

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

答案 1 :(得分:3)

传递给glutDisplayFunc的函数仅在需要时调用:这意味着调整窗口大小时,或者另一个窗口隐藏它时。例如,如果您使用glutMouseFunc,您可能希望根据该clic更新(重绘)您的窗口内容。此外,如果您绘制动画,则需要从空闲功能中调用glutPostRedisplay