Interested Article - OpenGL

OpenGL ( Open G raphics L ibrary) — спецификация, определяющая платформонезависимый (независимый от языка программирования ) программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику . Разрабатывается в США и Европе, имеет тип лицензий GNU-/EU/.

Включает более 300 функций для рисования сложных трёхмерных сцен из простых примитивов. Используется при создании компьютерных игр , САПР , виртуальной реальности , визуализации в научных исследованиях. На платформе Windows конкурирует с Direct3D .

Спецификация

A Graphics Pipeline Process

На базовом уровне OpenGL — это просто спецификация , то есть документ, описывающий набор функций и их точное поведение. Производители оборудования на основе этой спецификации создают реализации — библиотеки функций, соответствующих набору функций спецификации. Реализация призвана эффективно использовать возможности оборудования. Если аппаратура не позволяет реализовать какую-либо возможность, она должна быть эмулирована программно. Производители аппаратуры проходят ряд специфических тестов (conformance tests — тесты на соответствие) прежде чем реализация будет классифицирована как OpenGL-реализация. Так как разработчикам программного обеспечения достаточно научиться использовать функции, описанные в спецификации, их реализация остаётся разработчикам аппаратного обеспечения.

Эффективные реализации OpenGL существуют для Windows , Unix -платформ и Mac OS . Эти реализации обычно предоставляются изготовителями видеоадаптеров и активно используют возможности последних. Существуют также открытые реализации спецификации OpenGL, одной из которых является библиотека Mesa . Из лицензионных соображений Mesa является «неофициальной» реализацией OpenGL, хотя полностью с ней совместима на уровне кода и поддерживает как программную эмуляцию, так и аппаратное ускорение при наличии соответствующих драйверов.

Спецификация OpenGL пересматривается консорциумом ARB (Architecture Review Board), который был сформирован в 1992 году. Консорциум состоит из компаний, заинтересованных в создании широко распространённого и доступного API . Согласно официальному сайту OpenGL, членами ARB с решающим голосом на ноябрь 2004 года являются производители профессиональных графических аппаратных средств SGI , , Matrox и (военные приложения), производители потребительских графических аппаратных средств ATI и NVIDIA , производитель процессоров Intel , и изготовители компьютеров и компьютерного оборудования IBM , Apple , Dell , Hewlett-Packard и Sun Microsystems , а также один из лидеров компьютерной игровой индустрии id Software . Microsoft , одна из основоположников консорциума, покинула его в марте 2003 года. Помимо постоянных членов, каждый год приглашается большое количество других компаний, становящихся частью OpenGL ARB в течение одного года. Такое большое число компаний, вовлеченных в разнообразный круг интересов, позволило OpenGL стать прикладным интерфейсом широкого назначения с большим количеством возможностей.

Курт Экли (Kurt Akeley) и Марк Сигал (Mark Segal) являются авторами оригинальной спецификации OpenGL. Крис Фрэзиер (Chris Frazier) редактировал версию 1.1. Йон Лич (Jon Leech) редактировал версии с 1.2 по версию 2.0.

Архитектура

OpenGL ориентируется на следующие две задачи:

  • Скрыть сложности адаптации различных 3D-ускорителей, предоставляя разработчику единый API .
  • Скрыть различия в возможностях аппаратных платформ, требуя реализации недостающей функциональности с помощью программной эмуляции.

Основным принципом работы OpenGL является получение наборов векторных графических примитивов в виде точек, линий и треугольников с последующей математической обработкой полученных данных и построением растровой картинки на экране и/или в памяти. Векторные трансформации и растеризация выполняются графическим конвейером (graphics pipeline), который по сути представляет собой дискретный автомат . Абсолютное большинство команд OpenGL попадает в одну из двух групп: либо они добавляют графические примитивы на вход в конвейер, либо конфигурируют конвейер на различное исполнение трансформаций.

OpenGL является низкоуровневым процедурным API, что вынуждает программиста диктовать точную последовательность шагов, чтобы построить результирующую растровую графику (императивный подход). Это является основным отличием от дескрипторных подходов, когда вся сцена передается в виде структуры данных (чаще всего дерева), которое обрабатывается и строится на экране. С одной стороны, императивный подход требует от программиста глубокого знания законов трёхмерной графики и математических моделей, с другой стороны — даёт свободу внедрения различных инноваций.

Расширения

Стандарт OpenGL, с появлением новых технологий, позволяет отдельным производителям добавлять в библиотеку функциональность через механизм расширений . Расширения распространяются с помощью двух составляющих: заголовочный файл, в котором находятся прототипы новых функций и констант , а также драйвер устройства, поставляемого разработчиком. Каждый производитель имеет аббревиатуру, которая используется при именовании его новых функций и констант. Например, компания NVIDIA имеет аббревиатуру NV , которая используется при именовании её новых функций, как, например, glCombinerParameterfvNV() , а также констант, GL_NORMAL_MAP_NV . Может случиться так, что определённое расширение могут реализовать несколько производителей. В этом случае используется аббревиатура EXT , например, glDeleteRenderbuffersEXT . В случае же, когда расширение одобряется консорциумом ARB , оно приобретает аббревиатуру ARB и становится стандартным расширением. Обычно расширения, одобренные консорциумом, включаются в одну из следующих спецификаций OpenGL.

Список зарегистрированных расширений можно найти в официальной базе расширений .

Дополнительные библиотеки

Существует ряд библиотек, созданных поверх или в дополнение к OpenGL. Например, библиотека GLU , являющаяся практически стандартным дополнением OpenGL и всегда её сопровождающая, построена поверх последней, то есть использует её функции для реализации своих возможностей. Другие библиотеки, как, например, GLUT и SDL , созданы для реализации возможностей, недоступных в OpenGL. К таким возможностям относятся создание интерфейса пользователя (окна, кнопки, меню и др.), настройка контекста рисования (область рисования, использующаяся OpenGL), обработка сообщений от устройств ввода-вывода (клавиатура, мышь и др.), а также работа с файлами. Обычно каждый оконный менеджер имеет собственную библиотеку-расширение для реализации вышеописанных возможностей, например, в Windows или в X Window System , однако библиотеки GLUT и SDL являются кроссплатформенными, что облегчает перенос написанных приложений на другие платформы.

Библиотеки GLEW (The OpenGL Extension Wrangler Library) и (The OpenGL Easy Extension library) созданы для облегчения работы с расширениями и различными версиями OpenGL. Это особенно актуально для программистов в Windows, так как заголовочные и библиотечные файлы, поставляемые с Visual Studio, находятся на уровне версии OpenGL 1.1.

OpenGL имеет только набор геометрических примитивов (точки, линии, многоугольники), из которых создаются все трёхмерные объекты. Порой подобный уровень детализации не всегда удобен при создании сцен. Поэтому поверх OpenGL были созданы более высокоуровневые библиотеки, такие как Open Inventor и VTK . Данные библиотеки позволяют оперировать более сложными трёхмерными объектами, что облегчает и ускоряет создание трёхмерной сцены.

GLM (OpenGL Mathematics) — вспомогательная библиотека, предоставляющая программистам на C++ классы и функции для выполнения математических операций. Библиотека может использоваться при создании 3D-программ с использованием OpenGL . Одной из характеристик GLM является то, что реализация основана на спецификации GLSL . Исходный код GLM использует лицензию MIT .

Независимость от языка программирования

Для подтверждения независимости от языка программирования были разработаны различные варианты привязки (binding) функций OpenGL или полностью перенесены на другие языки. Одним из примеров может служить библиотека , которая может использовать аппаратное ускорение OpenGL. Прямая привязка функций реализована в Lightweight Java Game Library , которая имеет прямую привязку OpenGL для Java . Sun также выпустила версию Java OpenGL (JOGL), которая предоставляет прямую привязку к Си -функциям OpenGL, в отличие от Java 3D, которая не имеет столь низкоуровневой поддержки. Официальный сайт OpenGL имеет ссылки на привязки для языков Java, , Perl , Pike , Python , Ada , Visual Basic и Pascal . Имеются также варианты привязки OpenGL для языков C++ и C# .

История

Компьютерная графика нашла широкое распространение и применение в повседневной жизни. Учёные используют компьютерную графику для анализа результатов моделирования. Инженеры и архитекторы используют трёхмерную графику для создания виртуальных моделей . Кинематографисты создают спецэффекты или полностью анимированные фильмы (« Шрек », « История игрушек » и др.). В последние годы широкое распространение получили также компьютерные игры , максимально использующие трёхмерную графику для создания виртуальных миров.

Распространению компьютерной графики сопутствовали свои трудности. В 1990-х разработка программного продукта , способного работать на большом количестве графического оборудования, была сопряжена с большими временны́ми и финансовыми затратами. Было необходимо отдельно создавать модули для каждого типа графических адаптеров , что порой приводило к размножению одинакового программного кода. Это сильно тормозило развитие и распространение компьютерной графики.

Silicon Graphics (SGI) специализировалась на создании высокотехнологического графического оборудования и программных средств. Являясь в то время лидером в трёхмерной графике, SGI видела проблемы и барьеры в росте рынка. Поэтому было принято решение стандартизировать метод доступа к графической аппаратуре на уровне программного интерфейса .

Таким образом появился программный интерфейс OpenGL, который стандартизирует доступ к графической аппаратуре путём смещения ответственности за создание аппаратного драйвера на производителя графического устройства. Это позволило разработчикам программного обеспечения использовать более высокий уровень абстракции от графического оборудования, что значительно ускорило создание новых программных продуктов и снизило на них затраты.

В 1992 году компания SGI возглавила OpenGL ARB — группу компаний по разработке спецификации OpenGL. OpenGL произошёл от 3D-интерфейса SGI — IRIS GL . Одним из ограничений IRIS GL было то, что он позволял использовать только возможности, поддерживаемые оборудованием; если возможность не была реализована аппаратно, приложение не могло её использовать. OpenGL преодолевает эту проблему за счёт программной реализации возможностей, не предоставляемых аппаратно, что позволяет приложениям использовать этот интерфейс на относительно маломощных системах.

В 1995 году была выпущена библиотека Direct3D от Microsoft . Вскоре Microsoft, SGI и Hewlett-Packard начали проект под названием Fahrenheit, который предусматривал создание более универсального программного интерфейса на основе Direct3D и OpenGL. Идея казалась достаточно обещающей, призванной навести порядок в области интерактивной трёхмерной графики, однако, в результате финансовых трудностей в SGI и отсутствия должной индустриальной поддержки, проект был закрыт.

OpenGL 2.0

В сентябре 2001 года 3DLabs раскрыла своё видение OpenGL 2.0.

OpenGL версии 2.0 была представлена 3Dlabs в ответ на беспокойство относительно медленного и нечёткого направления развития OpenGL. 3Dlabs предложила ряд существенных дополнений к стандарту, наиболее значимым из которого было добавление к ядру OpenGL языка шейдеров GLSL (OpenGL Shading Language). Это позволяет программисту заменить фиксированный конвейер OpenGL небольшими программами на специальном языке для создания различных эффектов, таких, как bump mapping , normal mapping , parallax mapping , HDR и т. д.

Однако ещё до введения в стандарт OpenGL языка GLSL существовала возможность разрабатывать спецэффекты на языках ассемблера (расширения vertex_program, fragment_program) и Cg (NVidia C for Graphics). Многие предложенные возможности пока отсутствуют в версии OpenGL 2.0, хотя некоторые из них реализованы многими производителями в виде расширений.

OpenGL 2.1

Вышел в свет 2 июля 2006 года.

Добавлена поддержка GLSL версии 1.2

Новые расширения:

  • ARB_pixel_buffer_object — объект буфера может сохранять данные изображения, тем самым улучшая производительность преобразований изображения с помощью GPU;
  • EXT_texture_sRGB — позволяет указать цветовое значение пикселя из пространства цветов sRGB .

OpenGL 3.0

11 августа 2008 года Khronos Group представила новую версию спецификации OpenGL .

Поддерживают видеокарты: Radeon серии HD; GeForce 8, 9, GTX 100, GTX 200, GTX 300 и GTX 400 серий.

OpenGL 3.1

24 марта 2009 года Khronos Group анонсировала OpenGL 3.1. В новой версии произведена чистка компонентов, которые были объявлены устаревшими, но оставались в OpenGL 3.0 для сглаживания перехода на новую версию API (устаревшие компоненты возможно в дальнейшем использовать через расширение GL_ARB_compatibility).

OpenGL 3.2

3 августа 2009 года Khronos Group анонсировала OpenGL 3.2. Новая версия продолжает развитие стандарта OpenGL, чтобы дать разработчикам графики доступ к передовой функциональности GPU.

Поддерживают видеокарты: Radeon серии HD; GeForce 8000, 9000, GTX серий 200 и 400.

Нововведения:

  • Поддержка OpenGL Shading Language версии 1.50 ( GLSL ).
  • Порядок вершинных компонентов BGRA (GL_ARB_vertex_array_bgra) — теперь в шейдере можно читать 4-компонентные вершинные атрибуты в формате RGBA.
  • Команды отрисовки теперь позволяют модификацию базового индекса вершины (GL_ARB_draw_elements_base_vertex) — теперь легко можно использовать один набор вершинных буферов (для координат и прочих атрибутов) для хранения множества мешей (меньше переключений буферов — быстрее рендеринг).
  • Геометрические шейдеры (GL_ARB_geometry_shader4).

OpenGL 3.3

Представлена вместе с OpenGL 4.0 11 марта 2010 года. Позволяет максимально возможно приблизиться к функциональности OpenGL 4.0 на аппаратной базе предыдущего поколения.

OpenGL 4.0

11 марта 2010 года Khronos Group представила финальный вариант спецификации OpenGL 4.0 и языка шейдеров GLSL 4.0. OpenGL 4.0 полностью обратно совместим со старыми расширениями OpenGL, используя режим совместимости введенный в OpenGL 3.2 .

Среди нововведений :

  • Две новые ступени обработки шейдеров, что позволяет перенести обработку тесселяции с центрального процессора на GPU .
  • Прорисовка данных, сгенерированных OpenGL или такими внешними API, как OpenCL , без участия центрального процессора.
  • 64-разрядная двойная точность с плавающей запятой операций с шейдерами и ввода-вывода для увеличения точности и качества рендеринга.

OpenGL 4.1

26 июля 2010 года, Khronos Group анонсировала спецификацию OpenGL 4.1. Спецификация включает в себя обновление GLSL (GL Shading language) до версии 4.10.

Нововведения:

  • Полная совместимость с OpenGL ES 2.0 API.
  • Возможность опрашивать и загружать двоичные данные для объектов шейдерных программ.
  • 64-разрядные компоненты с плавающей точкой для вершинных шейдеров (повышается геометрическая точность).

Новые расширения:

  • Sync-объекты OpenGL, связанные с event-объектами OpenCL.
  • Возможность установить значения в буфере трафарета (stencil) во фрагментном шейдере.
  • Некоторые особенности для улучшения надёжности, например, при запуске WebGL-приложений.
  • Механизмы обратной связи для получения ошибок и предупреждений.

OpenGL 4.2

8 августа 2011 года Khronos Group опубликовала спецификацию OpenGL 4.2 и языка шейдеров GLSL 4.2 .

Нововведения:

  • Поддержка изменения произвольной части сжатой текстуры, без повторной загрузки в GPU текстуры целиком.
  • Поддержка упаковки нескольких 8- и 16-разрядных значений в одно 32-разрядное значение для эффективной обработки шейдеров со значительным сокращением используемого объёма памяти и повышением пропускной способности.

OpenGL 4.3

6 августа 2012 года Khronos Group опубликовала на SIGGRAPH 2012 спецификации OpenGL 4.3 . Кроме новых возможностей, OpenGL 4.3 приносит поддержку нового типа шейдеров через расширение GL_ARB_compute_shader. Новая версия обратно совместима с предыдущими.

OpenGL 4.4

Поддерживается видеокартами: AMD/ATi Radeon HD 5000/6000/7000/8000 и 200 серии, Nvidia GeForce 400/500/600/700/980 серии.

22 июля 2013 года Khronos Group на SIGGRAPH в Анахайм, Калифорния опубликовала спецификации OpenGL 4.4 .

OpenGL 4.5

Поддерживается видеокартами: AMD/ATi Radeon на базе архитектуры GCN, Nvidia GeForce 400/500/600/700/800/900 серии.

11 августа 2014 года Khronos Group на SIGGRAPH в Ванкувере, Канада опубликовала спецификации OpenGL 4.5 .

OpenGL 4.6

31 июля 2017 года Khronos Group опубликовала спецификации OpenGL 4.6. Основным нововведением является переносимое промежуточное представление шейдеров (англ.) , изначально разработанное для API Vulkan .

Будущее OpenGL

Apple

Компания Apple в июне 2018 на мероприятии WWDC объявила устаревшими технологии OpenGL и OpenGL ES.

Google

Операционные системы Fuchsia и Stadia изначально поддерживают только Vulkan .

Valve

17 сентября 2021 Компания Valve удалила поддержку OpenGL из популярной игры Dota 2

ID Software

Все новые игры начиная с 2016 года, использующие игровой движок id Tech 6 в качестве интерфейса рендеринга, используют Vulkan .

Игровой движок ID Tech 7 поддерживает только спецификацию Vulkan .

Atypical Games

Atypical Games при поддержке Samsung взяли на себя задачу внедрить в свой движок поддержку Vulkan. В конце концов стало ясно, что реализация Vulkan фактически заменит OpenGL на всех платформах, кроме Apple

Unity

Игровой движок Unity Не поддерживает OpenGL/OpenGL ES для HDR pipeline

Отсутствие поддержки актуальных графических технологий

OpenGL не поддерживает Трассировку лучей , API для декодирования видео на GPU в отличие от Vulkan

Mesh Shaders в OpenGL поддерживаются только на nVidia

Cглаживание с алгоритмами глубокого обучения AMD FidelityFX Super Resolution(FSR) и Nvidia Deep Learning Super Sampling (DLSS) не поддерживается для OpenGL

Vulkan

Vulkan, ранее известный как glNext, — новый API, отвечающий требованиям современных реалий и устраняющий основные недостатки OpenGL. Он предлагает более низкие накладные расходы и более непосредственный контроль над GPU. Khronos Group ведёт его разработку с 2014 года. Версия 1.0 была выпущена 16 февраля 2016 года .

См. также

Примечания

  1. . Дата обращения: 21 января 2006. Архивировано из 5 февраля 2008 года.
  2. от 28 февраля 2009 на Wayback Machine (англ.)
  3. от 25 января 2006 на Wayback Machine (англ.) — OpenGL-привязка для Java языка и другие компоненты для разработки игр
  4. . Дата обращения: 29 октября 2008. 2 ноября 2008 года.
  5. . Дата обращения: 21 января 2006. Архивировано из 28 января 2006 года.
  6. (англ.) . opengl.org (11 августа 2008). Дата обращения: 5 июня 2009. Архивировано из 25 августа 2011 года.
  7. . Khronos Press Releases (11 марта 2010). Дата обращения: 11 марта 2010. Архивировано из 25 августа 2011 года.
  8. . OpenNet (???). Дата обращения: ???. Архивировано из 21 января 2012 года.
  9. . Khronos Group (8 августа 2011). Дата обращения: 7 августа 2012. Архивировано из 25 августа 2011 года.
  10. . Дата обращения: 10 августа 2012. 10 августа 2012 года.
  11. . Дата обращения: 10 августа 2012. 10 августа 2012 года.
  12. . Дата обращения: 22 июля 2013. 29 октября 2013 года.
  13. . Дата обращения: 11 августа 2014. 12 августа 2014 года.
  14. . Дата обращения: 1 августа 2017. 31 июля 2017 года.
  15. Apple Inc. (англ.) . developer.apple.com . — «Apps built using OpenGL ES will continue to run in iOS 12, but OpenGL ES is deprecated in iOS 13.» Дата обращения: 7 августа 2018. 8 августа 2018 года.
  16. . Дата обращения: 18 октября 2021. 18 октября 2021 года.
  17. . Дата обращения: 18 октября 2021. 18 октября 2021 года.
  18. . Дата обращения: 18 октября 2021. 18 октября 2021 года.
  19. . Дата обращения: 17 января 2022. 18 января 2022 года.
  20. . Дата обращения: 17 января 2022. 22 января 2022 года.
  21. . Дата обращения: 17 мая 2022. 30 апреля 2022 года.
  22. . Дата обращения: 17 мая 2022. 27 мая 2022 года.
  23. . Дата обращения: 2 марта 2022. 2 марта 2022 года.
  24. . Дата обращения: 2 марта 2022. 2 марта 2022 года.
  25. . Дата обращения: 25 сентября 2017. 15 декабря 2017 года.

Литература

  • Ron Fosner. OpenGL Programming for Windows 95 and Windows NT. Addison-Wesley. ISBN 0-201-40709-4
  • Mark Kilgard. OpenGL for the X Window System. Addison-Wesley. ISBN 0-201-48359-9
  • OpenGL Architecture Review Board и др. OpenGL Reference Manual: The Official Reference Document to OpenGL, Version 1.4. Addison-Wesley. ISBN 0-321-17383-X
  • Randi J. Rost. OpenGL Shading Language. Addison-Wesley. ISBN 0-321-19789-5
  • OpenGL Architecture Review Board и др. OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 2, Fifth Edition. Addison-Wesley. ISBN 0-321-33573-2
  • Ву М., Дэвис Т., Нейдер Дж., Шрайндер Д. OpenGL. Руководство по программированию. Библиотека программиста. Питер, 2006. ISBN 5-94723-827-6
  • Рэнди Дж. Рост. OpenGL. Трёхмерная графика и язык программирования шейдеров. Для профессионалов. Питер, 2005. ISBN 5-469-00383-3 , 0-321-19789-5
  • Richard S. Wright, Benjamin Lipchak. OpenGL SuperBible. 3rd ed. SAMS Publishing. ISBN 0-672-32601-9
  • Ричард С. Райт мл., Бенджамин Липчак. = OpenGL SuperBible. — 3 изд. — М. : , 2006. — С. . — ISBN 5-8459-0998-8 .
  • Дональд Херн, М. Паулин Бейкер. Компьютерная графика и стандарт OpenGL = Computer Graphics with OpenGL. — 3-е изд. — М. : , 2005. — 1168 с. — ISBN 5-8459-0772-1 .
  • Эдвард Энджел. Интерактивная компьютерная графика. Вводный курс на базе OpenGL = Interactive Computer Graphics. A Top-Down Approach with Open GL. — 2-е изд. — М. : , 2001. — 592 с. — ISBN 5-8459-0209-6 .

Ссылки

Уроки, примеры и дополнительные ресурсы
  • в каталоге ссылок Curlie (dmoz) (рус.) — Библиотеки статей по OpenGL.
  • (англ.) — список ресурсов, относящихся к OpenGL
  • (англ.)
  • на сайте GameDev.net (англ.)
  • от 20 февраля 2006 на Wayback Machine (рус.)
  • от 11 февраля 2008 на Wayback Machine (рус.)
  • (англ.)
  • от 6 февраля 2006 на Wayback Machine (англ.) — урок об освещении в OpenGL от Steve Baker
  • (англ.) — OpenGL-привязка для Java
  • от 4 сентября 2012 на Wayback Machine на сайте (англ.) от 4 сентября 2012 на Wayback Machine
  • от 10 января 2011 на Wayback Machine (рус.)
Источник —

Same as OpenGL