Инструментарий утилиты OpenGL
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
![]() | |
Разработчик(и) | Марк Килгард |
---|---|
Репозиторий | |
Операционная система | Кросс-платформенный |
Платформа | Кросс-платформенный |
Тип | API |
Веб-сайт | www ![]() |
OpenGL Utility Toolkit ( GLUT ) — это библиотека утилит для программ OpenGL на системном уровне , которые в основном выполняют ввод-вывод хоста с операционной системой . Выполняемые функции включают определение окна, управление окном и мониторинг ввода с клавиатуры и мыши . Также предусмотрены процедуры для рисования ряда геометрических примитивов (как в сплошном, так и в каркасном режиме), включая кубы , сферы и чайник «Юта» . GLUT также имеет ограниченную поддержку создания всплывающих меню.
GLUT был написан Марком Дж. Килгардом , автором книг OpenGL Programming for the X Window System и The Cg Tutorial: The Definitive Guide to Programmable Real-Time Graphics , когда он работал в Silicon Graphics Inc.
Две цели GLUT — обеспечить возможность создания достаточно переносимого кода между операционными системами (GLUT является кроссплатформенным ) и облегчить изучение OpenGL. Начало работы с программированием OpenGL при использовании GLUT часто занимает всего несколько строк кода и не требует знания API-интерфейсов управления окнами, специфичных для операционной системы .
Все функции GLUT начинаются с glut
префикс (например, glutPostRedisplay
помечает текущее окно как требующее перерисовки).
Реализации
[ редактировать ]Исходная библиотека GLUT, созданная Марком Килгардом, поддерживает систему X Window ( GLX ) и была портирована на Microsoft Windows ( WGL ) Нейтом Робинсом . Кроме того, macOS поставляется с инфраструктурой GLUT, которая поддерживает собственный NSGL/ CGL .
Библиотека GLUT компании Kilgard больше не поддерживается, и ее лицензия не разрешает распространение модифицированных версий библиотеки. Это вызвало потребность в бесплатном программном обеспечении или открытым исходным кодом повторной реализации API с с нуля. Первой такой библиотекой была FreeGLUT , целью которой было достаточно точное воспроизведение, хотя и вводилось небольшое количество новых функций для преодоления ограничений GLUT. OpenGLUT, ответвление FreeGLUT, добавляет ряд новых функций к исходному API, но работа над ним прекратилась в мае 2005 года.
У Марка Килгарда есть репозиторий GitHub для GLUT. [1] Заголовочный файл Glut.h содержит следующую лицензию: [2]
/* Copyright (c) Mark J. Kilgard, 1994, 1995, 1996, 1998, 2000, 2006, 2010. */ /* This program is freely distributable without licensing fees and is provided without guarantee or warrantee expressed or implied. This program is -not- in the public domain. */
Ограничения
[ редактировать ]Некоторые из оригинальных проектных решений GLUT затрудняли программистам выполнение желаемых задач. Это побудило многих создавать неканонические патчи и расширения для GLUT. [1] Некоторые бесплатные версии программного обеспечения или версии с открытым исходным кодом также включают исправления.
Некоторые из наиболее заметных ограничений исходной библиотеки GLUT включают в себя:
- Библиотека требует от программистов вызова
glutMainLoop()
, функция, которая никогда не возвращает значение. Из-за этого программистам сложно интегрировать GLUT в программу или библиотеку, которая хочет иметь контроль над собственным циклом событий. Обычный патч для исправления этой проблемы — введение новой функции под названиемglutCheckLoop()
(macOS) илиglutMainLoopEvent()
(FreeGLUT/OpenGLUT), который запускает только одну итерацию цикла событий GLUT. Другой распространенный обходной путь — запуск цикла событий GLUT в отдельном потоке , хотя это может варьироваться в зависимости от операционной системы, а также может привести к проблемам с синхронизацией или другим проблемам: например, реализация GLUT в macOS требует, чтобыglutMainLoop()
запускаться в основном потоке. - Тот факт, что
glutMainLoop()
Никогда не возвращается также означает, что программа GLUT не может выйти из цикла событий. FreeGLUT исправляет это, вводя новую функцию:glutLeaveMainLoop()
. - Библиотека завершает процесс при закрытии окна; для некоторых приложений это может быть нежелательно. Таким образом, многие реализации включают дополнительный обратный вызов, например
glutWMCloseFunc()
.
Поскольку он больше не поддерживается (по сути заменен с открытым исходным кодом FreeGLUT ), вышеуказанные проблемы дизайна все еще не решены в исходном GLUT.
См. также
[ редактировать ]- EGL — это интерфейс между OpenGL ES или OpenVG и оконной системой .
- FreeGLUT задуман как полная замена GLUT и имеет лишь несколько отличий.
- ГЛФВ
- Простой уровень DirectMedia (SDL)
- Библиотека пользовательского интерфейса OpenGL (GLUI)
- Библиотека утилит OpenGL (GLU)
Ссылки
[ редактировать ]- ^ «Перенасыщение» . Гитхаб . 21 ноября 2021 г. Архивировано из оригинала 11 июня 2018 г. Проверено 13 октября 2014 г.
- ^ «Перенасыщение» . Гитхаб . 21 ноября 2021 года. Архивировано из оригинала 3 августа 2022 года . Проверено 13 октября 2014 г.
Внешние ссылки
[ редактировать ]- GLUT — набор служебных инструментов OpenGL, заархивировано 18 января 2018 г. на Wayback Machine.
- API интерфейса программирования OpenGL Utility Toolkit (GLUT), версия 3 (официальная документация)
- Загрузки OpenGL Utility Toolkit (GLUT) (исходные и предварительно скомпилированные библиотеки)