Функцию отображения можно использовать и в другом контексте, например при анимации, когда некоторые параметры, определяемые в приложении, изменяются. Библиотеку GLUT можно использовать для того, чтобы открыть несколько окон. В таком случае в число компонентов текущего состояния приложения включается и идентификатор текущего окна, и можно выводить объекты в разные окна, изменяя этот параметр. Можно также "свернуть" окно в пиктограмму (iconijy). Следовательно, интерактивные приложения и программы анимации могут вызывать функцию отображения в разных ситуациях. Удобно выполнять эту процедуру косвенно через функцию glutPostDisplay() из библиотеки GLUT. Эта функция
Ввод и взаимодействие с пользователем
включает определенную логику и предотвращает попытку вывода на экран, который не может быть реализован, например, если окно свернуто в пиктограмму.
Функция простоя с обратным вызовом (idle callback) вызывается в том случае, если программа не получает сообщений о каких-либо событиях. По умолчанию эта функция ничего не выполняет - ее тело не содержит никаких операторов, но программист может реализовать в этой функции какие-либо полезные для приложения операции. Типичный пример использования такой функции - формирование графических примитивов, которые выводятся на экран, пока в окружающем мире ничего не меняется (см. упр. 3.2). Функции отображения и простоя будут использованы в программе, которую мы рассмотрим в последних разделах этой главы.
В процессе выполнения можно переназначать функции с обратным выводом для обработки определенных событий. Можно вообще заблокировать обработку какого-либо события, передав в качестве аргумента соответствующей функции регистрации NULL.
3.5.5. Управление окнами Библиотека GLUT поддерживает как работу с несколькими окнами в одном приложении, так и с дочерними окнами в пределах одного главного окна приложения. В приложении можно создать второе окно верхнего уровня (с заголовком second window) следующим оператором:
id=glutCreateWindow("second window");