М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 11
Текст из файла (страница 11)
В этом случае было бы чрезвычайно неэффективно посылать каждую команду по сети по очереди, так как ато вызвало бы значительные задержки. Обычно клиент перед посылкой команд группирует пх в единый пакет, К сожалению, код сетевого клиента, как правило, не позволяе~ узнать, завершила ли графическая программа рисование кадра или сцены. В худшем случае он всегда будет ждать дополнительной команды рисования для заполнения пакета, и вы никогда не увидите результат рисования.
Поэтому в Орепос существует функция ц1Г(озв(), которая заставляет клиент отправить пакет, даже если тот не полон. Если сеть отсутствует и все команды выполняются на сервере, функция ц1Г1иэв() может не оказывать никакого эффекта. Тем не менее, если вы пишете программу, которая должна работать и в сети и без сети, включите вызов а1г1изп() в конец каждого кадра или сцены. Запомните, что а1Г1изв() не ждет окончания рисования — она влечет немедленную отрисовку и, таким образом, гарантирует вызов всех ранее отложенных команд за ограниченное время, даже если больше команд рисования не поступит. Есть ряд других ситуаций, когда используется ц1Г1изп().
° В случае программной визуализации, когда изображения строятся в системной памяти и вы не хотите постоянно обновлять экран, БО Глава 2 ° Управление состоянием и рисование геометрических объектов ° Реализации, которые собирают набор команд отрисовки для компенсации начальных затрат. Приведенный выше пример сетевой передачи — олин из вариантов такого подхода. чоЫ Р1Е1изп(чоЫ); Инициирует выполнение предыдущего набора команд Орепо), гарантируя их завершение за конечный промежуток времени.
Некоторые команды, например команды обмена буферами в режиме лвойной буферизации, автоматически запускают ожидающие команды по сети перед выполнением. Если к1Е1цзп() вам недостаточно, используйте к1Есп1зп(), Действие этой команды аналогично действию к1Е1изп(), но, кроме того, она ожидает извещения от графического оборудования или сигнала по сети о том, что рисование в видеобуфере закончено.
Функция к1Е!п1зПО используется, если нужно синхронизировать задачи, например быть уверенным, что трехмерное изображение уже на экране, перед использованием вывода на экран текстовой информации поверх рисунка (Пвр!ау Роз(5сг!рс). В качестве другого прнмера можно привести организацию пользовательского ввода после вывода изображения на экран. После выполнения команды к1Е1п!зп() графический процессор блокируется до получения сообщения от графического оборудования о завершении рисования. Запомните, что злоупотребление к! Есп1зп О может привести к снижению производительности приложения, особенно прн работе по сети, так как требует дополнительных подтверждений. Если для вас лостаточно функции к1Е1изп(), используйте ее, а не к1Е! п(зП (). чоЖ к)Е! и! 5П(чо!(с); Инициирует выполнение всех прелыдуших команд ОрепС(.. Команда не возвращает управление до тех пор, пока все запрограммированное в предыдущих командах не будет выполнено.
Управление системой координат Всякий раз при начальном открытии окна или послелующем его перемещении или изменении размера система управления окнами посылает соответствующие увеломления. При использовании С(.ПТ процесс увеломлений автоматизирован: вызывается функция, зарегистрированная с помощью функ














