OpenGL
Оригинальный автор(ы) | Кремниевая графика |
---|---|
Разработчик(и) | Хронос Групп (ранее АРБ ) |
Первоначальный выпуск | 30 июня 1992 г |
Стабильная версия | 4.6 [1] / 31 июля 2017 г |
Написано в | С [2] |
Преемник | Вулкан |
Тип | 3D-графики API |
Лицензия |
|
Веб-сайт | opengl.org |
OpenGL ( открытая графическая библиотека) [4] ) — это кросс-языковый и кросс-платформенный интерфейс прикладного программирования (API) для рендеринга 2D- и 3D- векторной графики . API обычно используется для взаимодействия с графическим процессором (GPU) для достижения аппаратного ускорения рендеринга .
Silicon Graphics, Inc. (SGI) начала разработку OpenGL в 1991 году и выпустила его 30 июня 1992 года. [5] [6] Он используется для различных приложений, включая компьютерное проектирование (САПР), видеоигры , научную визуализацию , виртуальную реальность и моделирование полета . С 2006 года OpenGL находится под управлением некоммерческого технологического консорциума Khronos Group . [7]
Дизайн [ править ]
Спецификация OpenGL описывает абстрактный интерфейс прикладного программирования (API) для рисования 2D- и 3D-графики. Он предназначен для реализации в основном или полностью с использованием аппаратного ускорения, такого как графический процессор , хотя API может быть полностью реализован в программном обеспечении, работающем на центральном процессоре .
API определяется как набор функций , которые могут вызываться клиентской программой, а также набор именованных целочисленных констант (например, константа GL_TEXTURE_2D, которая соответствует десятичному числу 3553). Хотя определения функций внешне похожи на определения в языке программирования C , они не зависят от языка. Таким образом, OpenGL имеет множество языковых привязок , некоторые из наиболее примечательных из которых — JavaScript привязка WebGL (API, основанный на OpenGL ES 2.0 , для 3D-рендеринга из веб-браузера ); привязки C WGL , GLX и CGL ; привязка C, предоставляемая iOS ; и привязки Java и C, предоставляемые Android .
OpenGL не только не зависит от языка, но и является кроссплатформенным. В спецификации ничего не говорится о получении контекста OpenGL и управлении им, оставляя это как деталь базовой оконной системы . По той же причине OpenGL занимается исключительно рендерингом, не предоставляя API-интерфейсов, связанных с вводом, звуком или обработкой окон.
Развитие [ править ]
OpenGL больше не находится в активной разработке, тогда как в период с 2001 по 2014 год спецификация OpenGL обновлялась в основном ежегодно: два выпуска (3.1 и 3.2) вышли в 2009 году, а три (3.3, 4.0 и 4.1) — в 2010 году, последний из них Спецификация OpenGL 4.6 была выпущена в 2017 году после трехлетнего перерыва и ограничивалась включением одиннадцати существующих расширений ARB и EXT в основной профиль. [8]
Активная разработка OpenGL была прекращена в пользу Vulkan API, выпущенного в 2016 году и имевшего кодовое название glNext во время первоначальной разработки. В 2017 году Khronos Group объявила, что у OpenGL ES не будет новых версий. [9] и с тех пор сосредоточился на разработке Vulkan и других технологий. [10] [11] В результате некоторые возможности, предлагаемые современными графическими процессорами, например трассировка лучей , не поддерживаются OpenGL.
Группа Khronos выпускает новые версии спецификаций OpenGL, каждая из которых расширяет API для поддержки различных новых функций. Детали каждой версии определяются консенсусом между членами группы, включая производителей видеокарт, разработчиков операционных систем и общие технологические компании, такие как Mozilla и Google . [12]
В дополнение к функциям, необходимым для основного API, поставщики графических процессоров (GPU) могут предоставлять дополнительные функции в виде расширений . Расширения могут добавлять новые функции и новые константы, а также ослаблять или снимать ограничения на существующие функции OpenGL. Поставщики могут использовать расширения для предоставления пользовательских API без необходимости поддержки со стороны других поставщиков или группы Khronos в целом, что значительно повышает гибкость OpenGL. Все расширения собираются и определяются в реестре OpenGL. [13]
Каждому расширению присвоен короткий идентификатор, основанный на названии компании, которая его разработала. Например, идентификатор Nvidia — NV, который является частью имени расширения. GL_NV_half_float
, константа GL_HALF_FLOAT_NV
, и функция glVertex2hNV()
. [14] Если несколько поставщиков соглашаются реализовать одну и ту же функциональность с использованием одного и того же API, может быть выпущено общее расширение с идентификатором EXT. В таких случаях также может случиться так, что Совет по обзору архитектуры группы Khronos даст расширение свое явное одобрение, и в этом случае будет использоваться идентификатор ARB. [15]
Функции, представленные в каждой новой версии OpenGL, обычно формируются из комбинации функций нескольких широко реализованных расширений, особенно расширений типа ARB или EXT.
Документация [ править ]
Совет по обзору архитектуры OpenGL выпустил серию руководств вместе со спецификацией, которые были обновлены для отслеживания изменений в API. Их обычно называют по цветам их обложек:
- Красная книга
- Руководство по программированию OpenGL, 9-е издание. ISBN 978-0-134-49549-1
- Официальное руководство по изучению OpenGL версии 4.5 с помощью SPIR-V
- Оранжевая книга
- Язык шейдеров OpenGL, 3-е издание. ISBN 0-321-63763-1
- Учебник и справочник по GLSL .
Исторические книги (до OpenGL 2.0):
- Зеленая книга
- Программирование OpenGL для системы X Window. ISBN 978-0-201-48359-8
- Книга об интерфейсе X11 и наборе инструментов OpenGL Utility Toolkit (GLUT).
- Синяя книга
- Справочное руководство OpenGL, 4-е издание. ISBN 0-321-17383-X
- По сути, это распечатка страниц руководства (man) Unix для OpenGL.
- Включает раскладывающуюся диаграмму размером с плакат, показывающую структуру идеализированной реализации OpenGL.
- Альфа-книга (белая обложка)
- Программирование OpenGL для Windows 95 и Windows NT. ISBN 0-201-40709-4
- Книга о взаимодействии OpenGL с Microsoft Windows.
Документация OpenGL также доступна через официальную веб-страницу. [16]
Связанные библиотеки [ править ]
Самые ранние версии OpenGL были выпущены с сопутствующей библиотекой под названием OpenGL Utility Library (GLU). Он предоставлял простые и полезные функции, которые вряд ли поддерживались современным оборудованием, такие как тесселяция , генерация MIP-карт и примитивных форм . Спецификация GLU последний раз обновлялась в 1998 году и зависит от функций OpenGL, которые сейчас устарели .
Наборы инструментов для контекста и окон [ править ]
Учитывая, что создание контекста OpenGL — довольно сложный процесс, и учитывая, что он различается в зависимости от операционной системы , автоматическое создание контекста OpenGL стало общей функцией нескольких библиотек разработки игр и пользовательских интерфейсов , включая SDL , Allegro , SFML , FLTK , и Qt . Несколько библиотек были разработаны исключительно для создания окон с поддержкой OpenGL. Первой такой библиотекой была OpenGL Utility Toolkit (GLUT), позже замененная freeglut . GLFW — более новая альтернатива. [17]
- Эти наборы инструментов предназначены для создания и управления окнами OpenGL, а также управления вводом, но не более того. [18]
- GLFW – кроссплатформенный обработчик окон и клавиатуры-мыши-джойстика; более ориентирован на игру
- freeglut — кроссплатформенный обработчик окон и клавиатуры-мыши; его API является расширенным набором API GLUT, и он более стабилен и актуален, чем GLUT.
- OpenGL Utility Toolkit (GLUT) — старый обработчик окон, больше не поддерживается.
- Несколько «мультимедийных библиотек» могут создавать окна OpenGL в дополнение к вводу, звуку и другим задачам, полезным для игровых приложений.
- Allegro 5 — кроссплатформенная мультимедийная библиотека с API C, ориентированная на разработку игр.
- Simple DirectMedia Layer (SDL) — кроссплатформенная мультимедийная библиотека с API C.
- SFML — кроссплатформенная мультимедийная библиотека с API C++ и множеством других привязок к таким языкам, как C#, Java, Haskell и Go.
- Наборы инструментов для виджетов
- FLTK — небольшая кроссплатформенная библиотека виджетов C++.
- Qt — кроссплатформенный набор инструментов виджетов C++. Он предоставляет множество вспомогательных объектов OpenGL, которые даже абстрагируют разницу между настольным GL и OpenGL ES.
- wxWidgets — кроссплатформенный набор инструментов виджетов C++.
Библиотеки загрузки расширений [ править ]
Учитывая высокую рабочую нагрузку, связанную с идентификацией и загрузкой расширений OpenGL, было разработано несколько библиотек, которые автоматически загружают все доступные расширения и функции. Примеры включают библиотеку OpenGL Easy Extension (GLEE), библиотеку OpenGL Extension Wrangler (GLEW) и glbinding . Расширения также автоматически загружаются большинством языковых привязок, таких как JOGL и PyOpenGL .
Реализации [ править ]
Mesa 3D — это с открытым исходным кодом реализация OpenGL . Он может выполнять чистый программный рендеринг, а также может использовать аппаратное ускорение на BSD , Linux и других платформах, воспользовавшись преимуществами инфраструктуры прямого рендеринга . Начиная с версии 20.0, он реализует версию 4.6 стандарта OpenGL.
История [ править ]
В 1980-х годах разработка программного обеспечения, которое могло бы работать с широким спектром графического оборудования, была настоящей проблемой. Разработчики программного обеспечения написали собственные интерфейсы и драйверы для каждого оборудования. Это было дорого и привело к увеличению усилий.
К началу 1990-х годов компания Silicon Graphics (SGI) была лидером в области 3D-графики для рабочих станций. Их IRIS GL API [19] [20] стал отраслевым стандартом, используемым более широко, чем основанный на открытых стандартах PHIGS . [ нужна ссылка ] Это произошло потому, что IRIS GL считался более простым в использовании. [ кем? ] и потому что он поддерживал немедленный рендеринг. PHIGS, напротив, считался сложным в использовании и устаревшим по функциональности.
Конкуренты SGI (включая Sun Microsystems , Hewlett-Packard и IBM ) также смогли вывести на рынок 3D-оборудование, поддерживаемое расширениями стандарта PHIGS, что заставило SGI открыть исходный код версии IRIS GL в качестве общедоступного стандарта под названием OpenGL .
Однако у SGI было много клиентов, для которых переход с IRIS GL на OpenGL потребовал бы значительных инвестиций. Более того, в IRIS GL были функции API, не имеющие отношения к 3D-графике. Например, он включал API управления окнами, клавиатурой и мышью, отчасти потому, что он был разработан до X Window System и Sun NeWS . А библиотеки IRIS GL оказались непригодными для открытия из-за проблем с лицензированием и патентами. [ нужны дальнейшие объяснения ] . Эти факторы требовали от SGI продолжения поддержки передовых и запатентованных API-интерфейсов программирования Iris Inventor и Iris Performer , в то время как рыночная поддержка OpenGL созревала.
Одним из ограничений IRIS GL было то, что он предоставлял доступ только к функциям, поддерживаемым базовым оборудованием. Если графическое оборудование не поддерживает функцию изначально, приложение не сможет ее использовать. OpenGL преодолел эту проблему, предоставив программную реализацию функций, не поддерживаемых аппаратным обеспечением, что позволило приложениям использовать расширенную графику в относительно маломощных системах. OpenGL стандартизировал доступ к оборудованию, возложил ответственность за разработку программ аппаратного интерфейса ( драйверов устройств ) на производителей оборудования и делегировал оконные функции базовой операционной системе. При таком большом количестве различных видов графического оборудования возможность говорить на одном языке оказала замечательное влияние, предоставив разработчикам программного обеспечения платформу более высокого уровня для разработки 3D-программ.
В 1992 году [21] SGI возглавил создание Совета по обзору архитектуры OpenGL (OpenGL ARB), группы компаний, которые будут поддерживать и расширять спецификацию OpenGL в будущем.
В 1994 году SGI задумалась о выпуске чего-то под названием « OpenGL++ », которое включало бы такие элементы, как API-интерфейс графа сцены (предположительно основанный на их технологии Performer ). Спецификация была распространена среди нескольких заинтересованных сторон, но так и не стала продуктом. [22]
В 1996 году Microsoft выпустила Direct3D , который со временем стал главным конкурентом OpenGL. Более 50 разработчиков игр подписали открытое письмо Microsoft, опубликованное 12 июня 1997 года, с призывом к компании активно поддерживать OpenGL. [23] 17 декабря 1997 г. [24] Microsoft и SGI инициировали проект Fahrenheit , который представлял собой совместную работу с целью унификации интерфейсов OpenGL и Direct3D (а также добавления API графа сцены). В 1998 году к проекту присоединилась Hewlett-Packard. [25] Первоначально он обещал внести порядок в мир API интерактивной 3D компьютерной графики, но из-за финансовых ограничений SGI, стратегических соображений Microsoft и общего отсутствия отраслевой поддержки от него отказались в 1999 году. [26]
В июле 2006 года Совет по обзору архитектуры OpenGL проголосовал за передачу контроля над стандартом OpenGL API группе Khronos. [27] [28]
Поддержка промышленности [ править ]
Этот раздел нуждается в расширении : более подробно об истории добавления поддержки. Вы можете помочь, добавив к нему . ( январь 2023 г. ) |
В июне 2018 года Apple объявила устаревшими API OpenGL на всех своих платформах ( iOS , macOS и tvOS ), настоятельно поощряя разработчиков использовать собственный Metal API , который был представлен в 2014 году. [29]
id Software использует OpenGL в своих играх, начиная с GLQuake (порт Quake на OpenGL с некоторыми модификациями), выпущенного в 1997 году. [30] Первым лицензионным движком компании с поддержкой OpenGL стал движок Quake II , также известный как id Tech 2 . [31] В 2016 году они выпустили обновление для id Tech 6 , в котором добавлена поддержка Vulkan, преемника OpenGL. В ID Tech 7 исключена поддержка OpenGL. [32]
В марте 2023 года Valve удалила поддержку OpenGL из Dota 2 . [33]
Khronos прекратил поддержку в OpenGL ряда современных графических технологий, например Ray Tracing , декодирования видео на GPU , сглаживания алгоритма с глубоким обучением — AMD FidelityFX Super Разрешение (FSR). [34] [35] и Нвидиа ДЛСС. [36] [37]
Atypen Games при поддержке Samsung обновили свой игровой движок, чтобы использовать Vulkan вместо OpenGL на всех платформах, отличных от Apple. [38]
ОС Google Fuchsia использует Vulkan в качестве встроенного графического API и требует совместимого с Vulkan графического процессора. Fuchsia намерена поддерживать OpenGL поверх Vulkan посредством слоя трансляции ANGLE. [39]
История версий [ править ]
Первая версия OpenGL, версия 1.0, была выпущена 30 июня 1992 года Марком Сигалом и Куртом Экли . С тех пор OpenGL время от времени расширялся путем выпуска новой версии спецификации. Такие выпуски определяют базовый набор функций, которые должны поддерживать все соответствующие видеокарты и на основе которых можно легче писать новые расширения. Каждая новая версия OpenGL обычно включает в себя несколько расширений, которые широко поддерживаются производителями видеокарт, хотя детали этих расширений могут быть изменены.
Версия | Дата выпуска | Функции |
---|---|---|
1.1 | 4 марта 1997 г. [40] [41] | Текстурные объекты, массивы вершин |
1.2 | 16 марта 1998 г. | BGRA и упакованных пикселей , 3D-текстуры, форматы [42] введение подмножества изображений, полезного для приложений обработки изображений |
1.2.1 | 14 октября 1998 г. | Концепция расширений ARB |
1.3 | 14 августа 2001 г. | Мультитекстурирование , мультисэмплирование, сжатие текстур. |
1.4 | 24 июля 2002 г. | Текстуры глубины, GLSlang [43] |
1.5 | 29 июля 2003 г. | Объект буфера вершин (VBO), запросы окклюзии [44] |
2.0 | 7 сентября 2004 г. | GLSL 1.1, MRT , текстуры без степени двойки, точечные спрайты, [45] Двусторонний трафарет [44] |
2.1 | 2 июля 2006 г. | GLSL 1.2, объект пиксельного буфера (PBO), текстуры sRGB [44] |
3.0 | 11 августа 2008 г. | GLSL 1.3, массивы текстур, условный рендеринг, объект кадрового буфера (FBO) [46] |
3.1 | 24 марта 2009 г. | GLSL 1.4, создание экземпляров, объект текстурного буфера, объект однородного буфера, примитивный перезапуск [47] |
3.2 | 3 августа 2009 г. | GLSL 1.5, шейдер геометрии, текстуры с несколькими выборками [48] |
3.3 | 11 марта 2010 г. | GLSL 3.30. Backports максимально возможного количества функций из спецификации OpenGL 4.0. |
4.0 | 11 марта 2010 г. | GLSL 4.00, тесселяция на графическом процессоре, шейдеры с 64-битной точностью. [49] |
4.1 | 26 июля 2010 г. | GLSL 4.10, удобные для разработчиков выходные данные отладки, совместимость с OpenGL ES 2.0. [50] |
4.2 | 8 августа 2011 г. [51] | GLSL 4.20, шейдеры с атомарными счетчиками, экземпляр обратной связи с преобразованием отрисовки, упаковка шейдеров, улучшения производительности |
4.3 | 6 августа 2012 г. [52] | GLSL 4.30, вычислительные шейдеры, использующие параллелизм графического процессора, буферные объекты хранения шейдеров, высококачественное сжатие текстур ETC2/EAC, повышенная безопасность памяти, расширение надежности нескольких приложений, совместимость с OpenGL ES 3.0 [53] |
4.4 | 22 июля 2013 г. [54] | GLSL 4.40, управление размещением буфера, эффективные асинхронные запросы, макет переменных шейдера, эффективная привязка нескольких объектов, упрощенное портирование приложений Direct3D, расширение без привязки текстур, расширение разреженной текстуры [54] |
4.5 | 11 августа 2014 г. [13] [55] | GLSL 4.50, прямой доступ к состоянию (DSA), Flush Control, надежность, API OpenGL ES 3.1 и совместимость с шейдерами, функции эмуляции DX11 |
4.6 | 31 июля 2017 г. [8] [56] | GLSL 4.60, более эффективная обработка геометрии и выполнение шейдеров, дополнительная информация, отсутствие контекста ошибок, ограничение смещения полигона, SPIR-V, анизотропная фильтрация |
OpenGL 2.0 [ править ]
Дата выхода : 7 сентября 2004 г.
OpenGL 2.0 изначально был задуман 3Dlabs для устранения опасений, что OpenGL находится в застое и ему не хватает четкого направления. [57] 3Dlabs предложила ряд важных дополнений к стандарту. Большинство из них в то время были отклонены ARB или по каким-либо причинам так и не были реализованы в той форме, которую предложила 3Dlabs. Однако их предложение о языке шейдеров в стиле C в конечном итоге было завершено, в результате чего появилась текущая формулировка языка шейдеров OpenGL ( GLSL или GLslang). Как и ассемблерные языки шейдеров, которые он заменял, он позволял заменять вершины с фиксированной функцией и фрагментный канал шейдерами , хотя на этот раз написанными на C-подобном языке высокого уровня.
Конструкция GLSL отличалась относительно небольшими уступками ограничениям доступного на тот момент оборудования. Это отсылало к более ранней традиции OpenGL, ставившей амбициозную и дальновидную цель для 3D-ускорителей, а не просто отслеживание состояния доступного в настоящее время оборудования. Окончательная спецификация OpenGL 2.0. [58] включает поддержку GLSL.
Лонгс Пик и OpenGL 3.0 [ править ]
До выпуска OpenGL 3.0 новая редакция имела кодовое название Longs Peak . На момент первоначального анонса Longs Peak был представлен как первая крупная версия API за всю историю OpenGL. Он заключался в пересмотре способа работы OpenGL и внесении фундаментальных изменений в API.
В проекте внесены изменения в управление объектами. Объектная модель GL 2.1 была построена на основе архитектуры OpenGL, основанной на состояниях. То есть, чтобы изменить объект или использовать его, необходимо привязать объект к системе состояний, затем внести изменения в состояние или выполнить вызовы функций, использующих привязанный объект.
Поскольку OpenGL использует систему состояний, объекты должны быть изменяемыми. То есть базовая структура объекта может измениться в любой момент, даже если конвейер рендеринга асинхронно использует этот объект. Объект текстуры можно переопределить из 2D в 3D. Это требует, чтобы любые реализации OpenGL усложняли внутреннее управление объектами.
В API Longs Peak создание объектов станет атомарным , с использованием шаблонов для определения свойств объекта, который будет создан с помощью одного вызова функции. Затем объект можно было сразу использовать в нескольких потоках. Объекты также будут неизменяемыми; однако их содержание может быть изменено и обновлено. Например, текстура может изменить свое изображение, но ее размер и формат изменить нельзя.
Для поддержки обратной совместимости старый API на основе состояния по-прежнему будет доступен, но никакие новые функции не будут предоставляться через старый API в более поздних версиях OpenGL. устаревшим кодам, таким как большинство продуктов САПР Это позволило бы продолжать работать , в то время как другое программное обеспечение можно было бы писать с использованием нового API или портировать на него.
Первоначально Longs Peak должен был быть завершен в сентябре 2007 года под названием OpenGL 3.0, но 30 октября Khronos Group объявила, что столкнулась с несколькими проблемами, которые хотела бы решить перед выпуском спецификации. [59] В результате выпуск спецификации был отложен, и Khronos Group отключилась от СМИ до выпуска окончательной версии OpenGL 3.0.
Окончательная спецификация оказалась гораздо менее революционной, чем предложение Longs Peak. Вместо удаления всех немедленных режимов и фиксированных функций (режим без шейдеров) спецификация включила их как устаревшие функции. Предложенная объектная модель не была включена, и о планах включать ее в будущие версии не сообщалось. В результате API остался практически прежним, а некоторые существующие расширения были повышены до основных функций. Среди некоторых групп разработчиков это решение вызвало бурю негодования. [60] многие разработчики заявляли, что в знак протеста перейдут на DirectX . Большинство жалоб касалось отсутствия связи Khronos с сообществом разработчиков и отказа от множества функций, которые многие воспринимали положительно. Другие разочарования включали требование оборудования уровня DirectX 10 для использования OpenGL 3.0, а также отсутствие геометрических шейдеров и экземплярного рендеринга в качестве основных функций.
Другие источники сообщили, что реакция сообщества была не такой серьезной, как первоначально предполагалось. [61] многие поставщики продемонстрировали поддержку обновления. [62] [63]
OpenGL 3.0 [ править ]
Дата выхода : 11 августа 2008 г.
В OpenGL 3.0 введен механизм прекращения поддержки для упрощения будущих версий API. Некоторые функции, помеченные как устаревшие, могут быть полностью отключены путем запроса контекста прямой совместимости из оконной системы. Однако к функциям OpenGL 3.0 по-прежнему можно получить доступ наряду с этими устаревшими функциями, запросив полный контекст .
Устаревшие функции включают в себя:
- Все фиксированные функции обработки вершин и фрагментов
- Рендеринг в прямом режиме с использованием glBegin и glEnd
- Отображать списки
- Цели рендеринга индексированных цветов
- Язык шейдеров OpenGL версий 1.10 и 1.20
OpenGL 3.1 [ править ]
Дата выхода : 24 марта 2009 г.
В OpenGL 3.1 полностью удалены все функции, устаревшие в версии 3.0, за исключением широких линий. Начиная с этой версии, невозможно получить доступ к новым функциям, используя полный контекст , или получить доступ к устаревшим функциям, используя контекст с прямой совместимостью . Исключение из первого правила делается, если реализация поддерживает расширение ARB_compatibility , но это не гарантируется.
Аппаратная поддержка: Mesa поддерживает ARM Panfrost версии 21.0.
OpenGL 3.2 [ править ]
Дата выхода : 3 августа 2009 г.
OpenGL 3.2 в дальнейшем развивает механизмы устаревания, представленные в OpenGL 3.0, путем разделения спецификации на основной профиль и профиль совместимости . Контексты совместимости включают ранее удаленные API с фиксированными функциями, эквивалентные расширению ARB_compatibility, выпущенному вместе с OpenGL 3.1, тогда как основные контексты этого не делают. OpenGL 3.2 также включал обновление до GLSL версии 1.50.
OpenGL 3.3 [ править ]
Дата выхода: 11 марта 2010 г.
Mesa поддерживает программный драйвер SWR, softpipe и старые карты Nvidia с NV50.
OpenGL 4.0 [ править ]
Дата выхода : 11 марта 2010 г.
OpenGL 4.0 был выпущен вместе с версией 3.3. Он был разработан для оборудования, поддерживающего Direct3D 11.
Как и OpenGL 3.0, эта версия OpenGL содержит большое количество довольно несущественных расширений, предназначенных для полного раскрытия возможностей оборудования класса Direct3D 11. Ниже перечислены только наиболее влиятельные расширения.
Аппаратная поддержка: серия Nvidia GeForce 400 и новее, серия AMD Radeon HD 5000 и новее (шейдеры FP64 реализованы путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Ivy Bridge и новее. [64]
OpenGL 4.1 [ править ]
Дата выхода : 26 июля 2010 г.
Аппаратная поддержка: серия Nvidia GeForce 400 и новее, серия AMD Radeon HD 5000 и новее (шейдеры FP64 реализованы путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Ivy Bridge и новее. [64]
- Минимальный «максимальный размер текстуры» составляет 16 384 × 16 384 для графических процессоров, реализующих эту спецификацию. [65]
OpenGL 4.2 [ править ]
Дата выхода: 8 августа 2011 г. [51]
- Поддержка шейдеров с атомарными счетчиками и операциями загрузки-сохранения-атомарного чтения-изменения-записи на один уровень текстуры.
- Отрисовка нескольких экземпляров данных, полученных в результате обработки вершин графическим процессором (включая тесселяцию), чтобы обеспечить эффективное перемещение и репликацию сложных объектов.
- Поддержка изменения произвольного подмножества сжатой текстуры без необходимости повторной загрузки всей текстуры в графический процессор для значительного повышения производительности.
Аппаратная поддержка: серия Nvidia GeForce 400 и новее, серия AMD Radeon HD 5000 и новее (шейдеры FP64 реализованы путем эмуляции на некоторых графических процессорах TeraScale) и Intel HD Graphics в процессорах Intel Haswell и новее. [64] (Linux Mesa: Ivy Bridge и новее)
OpenGL 4.3 [ править ]
Дата выхода: 6 августа 2012 г. [52]
- Вычислительные шейдеры , использующие параллелизм графического процессора в контексте графического конвейера.
- Буферные объекты хранения шейдеров, позволяющие шейдерам читать и записывать буферные объекты, такие как загрузка/сохранение изображений из версии 4.2, но посредством языка, а не вызовов функций.
- Запросы параметров формата изображения
- Сжатие текстур ETC2/EAC как стандартная функция.
- Полная совместимость с OpenGL ES 3.0. API
- Возможности отладки для получения отладочных сообщений во время разработки приложений.
- Представления текстур для различной интерпретации текстур без репликации данных.
- Повышенная безопасность памяти и надежность работы с несколькими приложениями
Аппаратная поддержка: AMD Radeon HD серии 5000 и новее (шейдеры FP64 реализованы путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Haswell и новее. [64] (Linux Mesa: Ivy Bridge без трафаретного текстурирования, Haswell и новее), Nvidia GeForce серии 400 и новее. Эмуляция VIRGL для виртуальных машин поддерживает версии 4.3+ с Mesa 20.
OpenGL 4.4 [ править ]
Дата выхода: 22 июля 2013 г. [54]
- Принудительный контроль использования объектов буфера
- Асинхронные запросы к буферным объектам
- Выражение большего количества элементов управления макетом переменных интерфейса в шейдерах.
- Эффективное связывание нескольких объектов одновременно
Аппаратная поддержка: AMD Radeon HD серии 5000 и новее (шейдеры FP64 реализованы путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Broadwell и новее (Linux Mesa: Haswell и новее), [66] Nvidia GeForce серии 400 и новее, [67] Тегра К1 .
OpenGL 4.5 [ править ]
Дата выхода: 11 августа 2014 г. [13] [55]
- Прямой доступ к состоянию (DSA) — средства доступа к объектам позволяют запрашивать и изменять состояние без привязки объектов к контекстам, что повышает эффективность и гибкость приложений и промежуточного программного обеспечения. [68]
- Flush Control — приложения могут управлять сбросом ожидающих команд перед переключением контекста, что обеспечивает высокопроизводительные многопоточные приложения;
- Надежность — обеспечение безопасной платформы для таких приложений, как браузеры WebGL, включая предотвращение сброса графического процессора, влияющего на любые другие запущенные приложения;
- Совместимость с API OpenGL ES 3.1 и шейдерами — для упрощения разработки и выполнения новейших приложений OpenGL ES в настольных системах.
Аппаратная поддержка: AMD Radeon HD серии 5000 и новее (шейдеры FP64 реализованы путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Broadwell и новее (Linux Mesa: Haswell и новее), Nvidia GeForce серии 400 и новее, [67] Тегра К1 и Тегра Х1. [69] [70]
OpenGL 4.6 [ править ]
Дата выхода: 31 июля 2017 г. [13] [8] [56]
- на стороне графического процессора более эффективная обработка геометрии
- более эффективное выполнение шейдера ( AZDO )
- больше информации через статистику, запрос переполнения и счетчики
- более высокая производительность за счет отсутствия контекстов обработки ошибок
- ограничение решает функции смещения полигона проблему рендеринга теней
- SPIR-V Шейдеры
- Улучшенная анизотропная фильтрация
Аппаратная поддержка: AMD Radeon HD серии 7000 и новее (шейдеры FP64 реализованы путем эмуляции на некоторых графических процессорах TeraScale), Intel Haswell и новее, Nvidia GeForce серии 400 и новее. [67]
Поддержка драйверов:
- Mesa 19.2 для Linux поддерживает OpenGL 4.6 для Intel Broadwell и новее. [71] Mesa 20.0 поддерживает графические процессоры AMD Radeon, [72] пока продолжается поддержка Nvidia Kepler+. Zink в качестве драйвера эмуляции с версией 21.1 и программный драйвер LLVMpipe также поддерживаются с Mesa 21.0.
- Графический драйвер AMD Adrenalin 18.4.1 для Windows 7 SP1 , 10 версии 1803 (обновление от апреля 2018 г.) для AMD Radeon HD 7700+, HD 8500+ и новее. Выпущено в апреле 2018 г. [73] [74]
- Графический драйвер Intel 26.20.100.6861 в Windows 10 . Выпущено в мае 2019 года. [75] [76]
- Графический драйвер NVIDIA GeForce 397.31 только для Windows 7 , 8 , 10 x86-64 бит, без поддержки 32-битных версий . Выпущено в апреле 2018 г. [77]
Альтернативные реализации [ править ]
Apple отказалась от OpenGL в iOS 12 и macOS 10.14 Mojave в пользу Metal , но он по-прежнему доступен в macOS 14 Sonoma (в том числе на кремниевых устройствах Apple ). [78] Последняя поддерживаемая версия OpenGL — 4.1 от 2011 года. [79] [80] Собственная библиотека от Molten – авторов MoltenVK – под названием MoltenGL, может транслировать вызовы OpenGL в Metal. [81]
Есть несколько проектов, которые пытаются реализовать OpenGL поверх Vulkan. Серверная часть Vulkan для Google ANGLE достигла соответствия OpenGL ES 3.1 в июле 2020 года. [82] В состав проекта Mesa3D также входит такой драйвер, под названием Zink . [83]
Microsoft от В Windows 11 на Arm добавлена поддержка OpenGL 3.3 через GLon12, реализацию OpenGL с открытым исходным кодом поверх DirectX 12 через Mesa Gallium . [84] [85] [86]
Вулкан [ править ]
Vulkan, ранее называвшаяся «Инициативой OpenGL следующего поколения» (glNext), [87] [88] представляет собой попытку унифицировать OpenGL и OpenGL ES в один общий API, который не будет обратно совместим с существующими версиями OpenGL. [89] [90] [91]
Первоначальная версия Vulkan API была выпущена 16 февраля 2016 года.
См. также [ править ]
- Язык ассемблера ARB - устаревший низкоуровневый язык шейдеров OpenGL.
- Сравнение OpenGL и Direct3D
- Direct3D – главный конкурент OpenGL
- Glide (API) — графический API, когда-то использовавшийся на картах 3dfx Voodoo.
- Список приложений OpenGL
- Metal (API) – графический API для iOS, macOS, tvOS, watchOS.
- OpenAL – кроссплатформенная аудиобиблиотека, напоминающая OpenGL.
- OpenGL ES – OpenGL для встраиваемых систем.
- OpenSL ES — API для аудио во встроенных системах, разработанный Khronos Group.
- OpenVG — API для ускоренной 2D-графики, разработанный Khronos Group.
- Спецификация интерфейса RenderMan (RISpec) — открытый API Pixar для фотореалистичного автономного рендеринга.
- VOGL — отладчик для OpenGL
- Vulkan - кроссплатформенный API для 2D и 3D графики с низкими издержками, «инициатива OpenGL следующего поколения».
- Графический конвейер
- Веб-графический процессор
Ссылки [ править ]
- ^ https://www.khronos.org/news/press/khronos-releases-opengl-4.6-with-spir-v-support .
{{cite web}}
: Отсутствует или пусто|title=
( помощь ) - ^ Лекстрейт, Винсент (январь 2010 г.). «Маяк языков программирования, v10.0» . Архивировано из оригинала 30 мая 2012 года . Проверено 14 марта 2010 г.
- ^ «Продукты: Программное обеспечение: OpenGL: Лицензирование и логотипы» . СГИ. Архивировано из оригинала 1 ноября 2012 года . Проверено 7 ноября 2012 г.
- ^ «Графическая система OpenGL: спецификация» (PDF) . 4.0 (Основной профиль). 11 марта 2010 г.
- ^ «SGI — Обзор OpenGL» . Архивировано из оригинала 31 октября 2004 года . Проверено 16 февраля 2007 г.
- ^ Педди, Джон (июль 2012 г.). «Кто из них всех прекраснее?» . Мир компьютерной графики . Проверено 30 мая 2018 г.
- ^ «OpenGL ARB передаст контроль над спецификацией OpenGL группе Khronos» . Группа «Хронос» . 31 июля 2006 года . Проверено 18 марта 2021 г.
- ^ Jump up to: Перейти обратно: а б с «Хронос выпускает OpenGL 4.6 с поддержкой SPIR-V» . The Khronos Group Inc., 31 июля 2017 г. Проверено 31 июля 2017 г.
- ^ «Будущее OpenGL (обсуждение на форуме)» . Группа компаний «Хронос» . 2020.
- ^ «Архив новостей Хроноса» . Группа компаний «Хронос» . 28 ноября 2022 г.
- ^ «Блог Хроноса» . Группа компаний «Хронос» . 28 ноября 2022 г.
- ^ «Обзор членства в Khronos и часто задаваемые вопросы» . Хронос.орг . Проверено 7 ноября 2012 г.
- ^ Jump up to: Перейти обратно: а б с д «Реестр Хроноса OpenGL» . Группа компаний «Хронос» . Проверено 31 июля 2017 г.
- ^ "NV_half_float" . Реестр OpenGL . Группа компаний «Хронос».
- ^ «Как создавать расширения API Khronos» . Группа компаний «Хронос» . Проверено 31 июля 2017 г.
- ^ «OpenGL — отраслевой фонд высокопроизводительной графики» . Группа «Хронос» . 19 июля 2011 года . Проверено 18 марта 2021 г.
- ^ «Список альтернатив GLUT, поддерживаемый» . Группа компаний «Хронос» . Проверено 2 мая 2013 г.
- ^ «Связанные наборы инструментов и API» . www.opengl.org . OpenGL . Проверено 8 октября 2014 г.
- ^ «IRIS GL, собственность SGI» .
- ^ Килгард, Марк (2008). «Предыстория OpenGL: IRIS GL (слайд)» . www.slideshare.net .
- ^ «Создание OpenGL ARB» . Архивировано из оригинала 22 февраля 2007 года . Проверено 16 февраля 2007 г.
- ^ «Конец OpenGL++» . Группа компаний «Хронос».
- ^ «Лучшие разработчики игр призывают Microsoft активно поддерживать OpenGL» . Следующее поколение . № 32. Imagine Media . Август 1997. с. 17.
- ^ «Анонс Фаренгейта» . Архивировано из оригинала 27 сентября 2007 года.
- ^ «Члены Фаренгейта. 1998» . Компьютерграм Интернэшнл . 1998. Архивировано из оригинала 5 октября 2007 года.
- ^ «Конец Фаренгейта» . Регистр .
- ^ «OpenGL ARB передаст контроль над спецификацией OpenGL компании Khronos Group» . Пресс-релиз Хроноса. 31 июля 2006 г.
- ^ «OpenGL ARB передаст контроль над спецификацией OpenGL группе Khronos» . Доступ к архиву MyLibrary.
- ^ Смит, Райан (5 июня 2018 г.). «Apple отказывается от OpenGL во всех ОС; призывает разработчиков использовать Metal» . www.anandtech.com . Покупка . Проверено 5 июня 2018 г.
- ^ «GLQuake» . Квейк вики .
- ^ «Лицензирование технологий: id Tech 2» . Архивировано из оригинала 8 ноября 2009 года . Проверено 17 сентября 2008 г.
- ^ «Doom Wiki: id Tech 7» . Проверено 26 октября 2021 г.
- ^ Доу, Лиам (7 марта 2023 г.). «В Dota 2 удалена поддержка OpenGL, появился новый герой Муэрта, большое обновление выйдет в апреле» . Игры в Linux . Проверено 26 марта 2023 г.
- ^ «Суперразрешение AMD FidelityFX» . Проверено 17 мая 2022 г.
- ^ «Суперразрешение AMD FidelityFX (FSR)» .
- ^ «НВИДИА ДЛСС» .
- ^ «Начало работы с DLSS» . Июнь 2021.
- ^ «Джет Сет Вулкан: Размышления о переезде на Вулкан» .
- ^ «Магма: Обзор» . fuchsia.dev . Проверено 26 марта 2023 г.
- ^ Килгард, Марк Дж. (2001). Программирование OpenGL для системы X Window . Графическое программирование (6-е печатное изд.). Бостон, Массачусетс, Мюнхен: Аддисон-Уэсли. п. 6. ISBN 978-0-201-48359-8 .
- ^ «Графическая система OpenGL: спецификация» (PDF) . 1.1. 4 марта 1997 г.
- ^ Астл, Дэйв (1 апреля 2003 г.). «Выход за пределы OpenGL 1.1 для Windows» . gamedev.net . Проверено 15 ноября 2007 г.
- ^ Исорна, JM (2015). Визуальное моделирование материалов: теория, методика, разбор случаев . СКП Грау. Архитектура, городское планирование и строительство (на испанском языке). Политехнический университет Каталонии. п. 191. ИСБН 978-84-9880-564-2 . Проверено 21 августа 2019 г.
- ^ Jump up to: Перейти обратно: а б с «Графическая система OpenGL: спецификация» (PDF) . 2.1. 1 декабря 2006 г.
- ^ «Точечный примитив» .
- ^ «Графическая система OpenGL: спецификация» (PDF) . 3.0. 23 сентября 2008 г.
- ^ «Графическая система OpenGL: спецификация» (PDF) . 3.1. 28 мая 2009 г.
- ^ «Графическая система OpenGL: спецификация» (PDF) . 3.2 (Основной профиль). 7 декабря 2009 г.
- ^ «Khronos раскрывает передовое кроссплатформенное графическое ускорение с помощью OpenGL 4.0» . 11 марта 2010 г.
- ^ «Хронос стимулирует эволюцию кроссплатформенной 3D-графики с выпуском спецификации OpenGL 4.1» . 26 июля 2010 г.
- ^ Jump up to: Перейти обратно: а б «Khronos расширяет возможности кроссплатформенной 3D-графики выпуском спецификации OpenGL 4.2» . 8 августа 2011 г.
- ^ Jump up to: Перейти обратно: а б «Хронос выпускает спецификацию OpenGL 4.3 со значительными улучшениями» . 6 августа 2012 г.
- ^ «Хронос выпускает спецификацию OpenGL 4.3 со значительными улучшениями» . 6 августа 2012 г.
- ^ Jump up to: Перейти обратно: а б с «Хронос выпускает спецификацию OpenGL 4.4» . 22 июля 2013 г.
- ^ Jump up to: Перейти обратно: а б «Группа Khronos объявляет о ключевых достижениях в экосистеме OpenGL – пресс-релиз группы Khronos» . The Khronos Group Inc., 10 августа 2014 г. Проверено 17 апреля 2015 г.
- ^ Jump up to: Перейти обратно: а б Кессенич, Джон; Болдуин, Дэйв. «Язык шейдеров OpenGL, версия 4.60.7» . Хронос Групп Инк . Проверено 21 августа 2019 г.
- ^ Аби-Чахла, Феди (16 сентября 2008 г.). «OpenGL 3 (3DLabs и эволюция OpenGL)» . Аппаратное обеспечение Тома . Проверено 24 октября 2010 г.
- ^ «Графическая система OpenGL: спецификация» (PDF) . 2.0. 22 октября 2004 г.
- ^ «OpenGL ARB объявляет об обновлении OpenGL 3.0» . 30 октября 2007 года . Проверено 31 октября 2007 г.
- ^ «Выпущен OpenGL 3.0, разработчики в ярости – Slashdot» . Tech.slashdot.org . Проверено 7 ноября 2012 г.
- ^ «OpenGL BOF прошел хорошо, вилок не обнаружено» .
- ^ «Отраслевой стандарт для высокопроизводительной графики» . OpenGL. 18 августа 2008 года . Проверено 31 июля 2017 г.
- ^ «NVIDIA теперь предоставляет раннюю версию драйвера OpenGL 3.0» .
- ^ Jump up to: Перейти обратно: а б с д «Драйвер Intel Iris и HD Graphics для 64-разрядной версии Windows 7/8/8.1» . Центр загрузки Intel . Архивировано из оригинала 2 апреля 2015 года.
- ^ «Ожидаемый максимальный размер текстуры — программирование графики и графического процессора» . GameDev.net .
- ^ «Процессоры Intel Skylake-S и чипсеты 100-й серии подробно описаны в явной утечке» . Гаджеты NDTV . 17 апреля 2015 г.
- ^ Jump up to: Перейти обратно: а б с Ларабель, Майкл (31 июля 2017 г.). «NVIDIA выпускает драйвер Linux 381.26.11 с поддержкой OpenGL 4.6» . Фороникс .
- ^ «Выпущен OpenGL 4.5 — с одной из лучших функций Direct3D» . Арс Техника . 11 августа 2014 года . Проверено 17 апреля 2015 г.
- ^ «SG4121: Обновление OpenGL для графических процессоров NVIDIA» . Устрим . Архивировано из оригинала 17 мая 2015 года . Проверено 17 апреля 2015 г.
- ^ Килгард, Марк (12 августа 2014 г.). «Обновление OpenGL 4.5 для графических процессоров NVIDIA» . Проверено 17 апреля 2015 г.
- ^ Ларабель, Майкл (21 августа 2019 г.). «Драйвер Intel OpenGL для Linux теперь поддерживает OpenGL 4.6 для Mesa 19.2» . Фороникс .
- ^ Ларабель, Майкл (27 ноября 2019 г.). «Драйвер AMD RadeonSI наконец поддерживает OpenGL 4.6» . Фороникс .
- ^ «Выпущен графический драйвер AMD Adrenalin 18.4.1 (OpenGL 4.6, Vulkan 1.1.70) – Geeks3D» . www.geeks3d.com . Проверено 10 мая 2018 г.
- ^ «Примечания к выпуску Radeon Software Adrenalin Edition 18.4.1» . support.amd.com . Проверено 10 мая 2018 г.
- ^ «Выпущен графический драйвер Intel 25.20.100.6861 (OpenGL 4.6 + Vulkan 1.1.103) | Geeks3D» . 16 мая 2019 г. . Проверено 16 мая 2019 г.
- ^ «Драйверы DCH для Windows 10» . Центр загрузки Intel . Проверено 21 августа 2019 г.
- ^ «Выпущен графический драйвер NVIDIA GeForce 397.31 (OpenGL 4.6, Vulkan 1.1, RTX, CUDA 9.2) – Geeks3D» . www.geeks3d.com . 25 апреля 2018 года . Проверено 10 мая 2018 г.
- ^ «Документация разработчика Apple» . разработчик.apple.com .
- ^ Каннингем, Эндрю (7 октября 2019 г.). «macOS 10.15 Catalina: обзор Ars Technica» . Арс Техника .
- ^ Аксон, Сэмюэл (6 июня 2018 г.). «Прекращение поддержки OpenGL, а также другие обновления, о которых Apple не рассказала на своем выступлении» . Арс Техника . Проверено 19 октября 2020 г.
- ^ «Vulkan и более быстрый OpenGL ES для iOS и macOS» . Расплавленный . Проверено 19 октября 2020 г.
- ^ Авторы проекта ANGLE (14 октября 2020 г.). «google/angle: соответствующая реализация OpenGL ES для Windows, Mac, Linux, iOS и Android» . Гитхаб . Проверено 17 декабря 2020 г.
- ^ «Цинк» . Последняя документация библиотеки 3D-графики Mesa .
- ^ «Состояние Windows на Arm64: общий взгляд» . Чипсы и сыр . 13 марта 2022 г. Проверено 23 октября 2023 г.
- ^ «Представляем OpenCL и OpenGL в DirectX» . Сотрудничество | Консультации по открытому исходному коду . Проверено 23 октября 2023 г.
- ^ «Глубокое погружение в OpenGL поверх слоев DirectX» . Сотрудничество | Консультации по открытому исходному коду . Проверено 23 октября 2023 г.
- ^ Дингман, Хайден (3 марта 2015 г.). «Познакомьтесь с Vulkan, мощной игровой технологией, не зависящей от платформы, нацеленной на DirectX 12» . Мир ПК . Проверено 3 марта 2015 г.
- ^ Брайт, Питер (3 марта 2015 г.). «Хронос представляет Vulkan: OpenGL, созданный для современных систем» . Арс Техника . Проверено 3 марта 2015 г.
- ^ «Хронос объявляет об инициативе OpenGL следующего поколения» . АнандТех . Проверено 20 августа 2014 г.
- ^ «Выпущен OpenGL 4.5, представлен OpenGL следующего поколения: кроссплатформенный убийца Mantle, конкурент DX12» . Проверено 20 августа 2014 г.
- ^ «Хронос публикует слайды об OpenGL-Next» . Фороникс . Проверено 22 августа 2014 г.
Дальнейшее чтение [ править ]
- Шрейнер, Дэйв; Селлерс, Грэм; и др. (30 марта 2013 г.). Руководство по программированию OpenGL: Официальное руководство по изучению OpenGL . Версия 4.3 (8-е изд.). Аддисон-Уэсли. ISBN 978-0-321-77303-6 .
- Селлерс, Грэм; Райт, Ричард С.; Хаемель, Николас (31 июля 2013 г.). OpenGL SuperBible: комплексное руководство и справочник (6-е изд.). Аддисон-Уэсли. ISBN 978-0-321-90294-8 .
- Рост, Рэнди Дж. (30 июля 2009 г.). Язык шейдеров OpenGL (3-е изд.). Аддисон-Уэсли. ISBN 978-0-321-63763-5 .
- Лендьел, Эрик (2003). Руководство по расширениям OpenGL . Чарльз Ривер Медиа. ISBN 1-58450-294-0 .
- Совет по обзору архитектуры OpenGL ; Шрейнер, Дэйв (2004). Справочное руководство OpenGL: Официальный справочный документ по OpenGL . Версия 1.4. Аддисон-Уэсли. ISBN 0-321-17383-Х .
- Совет по обзору архитектуры OpenGL ; Шрайнер, Дэйв; и др. (2006). Руководство по программированию OpenGL: Официальное руководство по изучению OpenGL . Версия 2 (5-е изд.). Аддисон-Уэсли. ISBN 0-321-33573-2 .
Внешние ссылки [ править ]
- Официальный сайт
- Обзор OpenGL и Wiki OpenGL.org с дополнительной информацией о привязках языка OpenGL.
- Веб-сайт OpenGL SGI
- OpenGL в Керли
- Хронос Групп, Инк.