Понимание взаимосвязи между glutDisplayFunc и glutPostRedisplay

при чтении redbook я нашел:

glutDisplayFunc(в Void (*func с)(недействительным)) - это первое и самое важное событие функция обратного вызова вы увидите. Всякий раз, когда GLUT определяет, что содержимое окна должно быть восстанавливается, функция обратного вызова зарегистрирован glutDisplayFunc () выполненный. Поэтому, вы должны положить все процедуры нужно перерисовать сцена на дисплее обратного вызова функция.

Если ваша программа изменяется содержание окна, иногда вы будете иметь чтобы вызвать glutPostRedisplay (), который дает glutMainLoop () толчок для вызова зарегистрированный обратный вызов дисплея на своем следующая возможность

в какие времена следует вызывать glutPostRedisplay ()? Из этого абзаца я не понимаю, зачем нужна его функциональность.

2 ответов


glutDisplayFunc вызывается всякий раз, когда окно должно быть перерисовано. Это включает в себя время, когда один вызывает glutPostRedisplay:)

когда нужно перерисовать окно?

  • для изменения размера
  • , когда он становится видимым
  • когда некоторые его части становятся видимыми
  • , когда он двигался
  • etc

но что делать, если ваша функция отображения рисует треугольник в позиции x; y, где x; y; определяется положением мыши? В этом случае вы должны попросить систему перерисовать окно всякий раз, когда мышь перемещается вправо? Вот почему вы вызовете glutPostRedisplay из MouseFunc (). На самом деле, когда вы вызываете glutPostRedisplay, событие redraw ставится в очередь вместе с другими событиями окна, такими как щелчок мыши ets. По сути, ваш mainLoop выбирает события из этой очереди и вызывает их обработчики


функция, которую вы передаете glutDisplayFunc называется только это необходимо: это означает, когда окно изменено или когда другое окно скрыло его. Если вы используете glutMouseFunc, например, вы, возможно, хотите обновить (перерисовать) содержимое окна в соответствии с этим clic. Кроме того, если вы рисуете анимацию, вам нужно позвонить glutPostRedisplay из функции ожидания.