OpenGL ( Open Graphics Library [3] ) является кросс-языка , кросс-платформенный интерфейс прикладного программирования (API) для рендеринга 2D и 3D векторной графики . API обычно используется для взаимодействия с графическим процессором (GPU) для достижения рендеринга с аппаратным ускорением .
Автор (ы) оригинала | Силиконовая Графика |
---|---|
Разработчики) | Хронос Групп (ранее АРБ ) |
Первый выпуск | 30 июня 1992 г . |
Стабильный выпуск | 4.6 / 31 июля 2017 г . |
Написано в | C [1] |
Тип | API трехмерной графики |
Лицензия |
|
Веб-сайт | opengl |
Silicon Graphics, Inc. (SGI) начала разработку OpenGL в 1991 году и выпустила его 30 июня 1992 года; [4] [5] приложения широко используют его в областях автоматизированного проектирования (САПР), виртуальной реальности , научной визуализации , визуализации информации, моделирования полета и видеоигр . С 2006 года OpenGL находится под управлением некоммерческого технологического консорциума Khronos Group . [6]
Дизайн
Спецификация 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 - это активно развивающийся API. Группа Khronos регулярно выпускает новые версии спецификаций OpenGL , каждая из которых расширяет API для поддержки различных новых функций. Детали каждой версии определяются консенсусом между членами Группы, включая производителей видеокарт, разработчиков операционных систем и общие технологические компании, такие как Mozilla и Google . [7]
В дополнение к функциям, необходимым для основного API, поставщики графических процессоров (GPU) могут предоставлять дополнительные функции в виде расширений . Расширения могут вводить новые функции и новые константы, а также могут ослаблять или снимать ограничения на существующие функции OpenGL. Поставщики могут использовать расширения для предоставления пользовательских API без необходимости поддержки со стороны других поставщиков или Khronos Group в целом, что значительно увеличивает гибкость OpenGL. Все расширения собраны и определены в реестре OpenGL. [8]
Каждое расширение связано с коротким идентификатором, основанным на названии компании, которая его разработала. Например, идентификатор Nvidia - это NV, который является частью имени расширения GL_NV_half_float
, константы GL_HALF_FLOAT_NV
и функции glVertex2hNV()
. [9] Если несколько поставщиков соглашаются реализовать одни и те же функции с использованием одного и того же API, может быть выпущено общее расширение с использованием идентификатора EXT. В таких случаях также может случиться так, что Совет по анализу архитектуры Khronos Group даст расширению свое явное одобрение, и в этом случае используется идентификатор ARB. [10]
Функции, представленные каждой новой версией OpenGL, обычно формируются из объединенных функций нескольких широко используемых расширений, особенно расширений типа ARB или EXT.
Документация
Совет по обзору архитектуры OpenGL выпустил серию руководств вместе со спецификациями, которые были обновлены для отслеживания изменений в API. Их обычно называют по цвету обложек:
- Красная книга
- Руководство по программированию OpenGL, 9-е издание. ISBN 978-0-134-49549-1
- Официальное руководство по изучению OpenGL версии 4.5 с SPIR-V
- Оранжевая книга
- OpenGL Shading Language, 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 также доступна через его официальную веб-страницу. [11]
Связанные библиотеки
Самые ранние версии OpenGL были выпущены с сопутствующей библиотекой, называемой OpenGL Utility Library (GLU). Он предоставлял простые и полезные функции, которые вряд ли поддерживаются современным оборудованием, такие как тесселяция , создание MIP-карт и примитивных форм . Спецификация GLU последний раз обновлялась в 1998 году и зависит от функций OpenGL, которые сейчас не рекомендуются .
Наборы контекстных и оконных инструментов
Учитывая, что создание контекста OpenGL - довольно сложный процесс, и учитывая, что он варьируется в зависимости от операционных систем , автоматическое создание контекста OpenGL стало общей чертой нескольких библиотек разработки игр и пользовательского интерфейса , включая SDL , Allegro , SFML , FLTK , и Qt . Несколько библиотек были разработаны исключительно для создания окна с поддержкой OpenGL. Первой такой библиотекой была OpenGL Utility Toolkit (GLUT), позже замененная freeglut . GLFW - более новая альтернатива. [12]
- Эти наборы инструментов предназначены для создания окон OpenGL и управления ими, а также для управления вводом, но не более того. [13]
- GLFW - кроссплатформенный обработчик окон и клавиатуры-мыши-джойстика; более игровой
- freeglut - кроссплатформенный обработчик окон и клавиатуры-мыши; его API - это надмножество GLUT API, и он более стабилен и актуален, чем GLUT.
- OpenGL Utility Toolkit (GLUT) - старый обработчик окон, больше не обслуживаемый.
- Несколько "мультимедийных библиотек" могут создавать окна OpenGL, помимо ввода, звука и других задач, полезных для игровых приложений.
- Allegro 5 - кроссплатформенная мультимедийная библиотека с C API, ориентированная на разработку игр.
- Simple DirectMedia Layer (SDL) - кроссплатформенная мультимедийная библиотека с C API
- SFML - кроссплатформенная мультимедийная библиотека с C ++ API и множеством других привязок к таким языкам, как C #, Java, Haskell и Go.
- Наборы инструментов для виджетов
- FLTK - небольшая кроссплатформенная библиотека виджетов C ++
- Qt - кроссплатформенный инструментарий виджетов C ++. Он предоставляет множество вспомогательных объектов OpenGL, которые даже абстрагируют разницу между настольным GL и OpenGL ES.
- wxWidgets - кроссплатформенный инструментарий виджетов C ++.
Библиотеки загрузки расширений
Учитывая высокую рабочую нагрузку, связанную с идентификацией и загрузкой расширений OpenGL, было разработано несколько библиотек, которые автоматически загружают все доступные расширения и функции. Примеры включают GLEE , GLEW и glbinding . Расширения также загружаются автоматически большинством языковых привязок, таких как JOGL и PyOpenGL .
Реализации
Mesa 3D - это реализация OpenGL с открытым исходным кодом . Он может выполнять чистый программный рендеринг, а также может использовать аппаратное ускорение на BSD , Linux и других платформах, используя преимущества инфраструктуры прямого рендеринга . Начиная с версии 20.0, он реализует версию 4.6 стандарта OpenGL.
История
В 1980-х годах разработка программного обеспечения, которое могло бы работать с широким спектром графического оборудования, была настоящей проблемой. Разработчики программного обеспечения написали индивидуальные интерфейсы и драйверы для каждой части оборудования. Это было дорого и потребовало больших усилий.
К началу 1990-х годов Silicon Graphics (SGI) была лидером в области трехмерной графики для рабочих станций. Их IRIS GL API [14] стал отраслевым стандартом, более широко используемым, чем основанный на открытых стандартах PHIGS . [ необходима цитата ] Это произошло потому, что IRIS GL считался более простым в использовании, [ кем? ] и потому что он поддерживает рендеринг в немедленном режиме . Напротив, PHIGS считался сложным в использовании и устаревшим по функциональности.
Конкуренты SGI (включая Sun Microsystems , Hewlett-Packard и IBM ) также смогли вывести на рынок 3D-оборудование, поддерживаемое расширениями, сделанными для стандарта PHIGS, что вынудило SGI открыть исходный код версии IrisGL в качестве общедоступного стандарта под названием OpenGL .
Однако у SGI было много клиентов, для которых переход с IrisGL на OpenGL потребовал значительных инвестиций. Более того, в IrisGL были функции API, которые не имели отношения к трехмерной графике. Например, он включал API-интерфейс управления окнами, клавиатуры и мыши, отчасти потому, что он был разработан до X Window System и Sun NeWS . И библиотеки IrisGL не подходили для открытия из-за проблем с лицензированием и патентами [ требуются дополнительные пояснения ] . Эти факторы потребовали от SGI продолжать поддерживать расширенные и проприетарные программные API-интерфейсы Iris Inventor и Iris Performer, в то время как рыночная поддержка OpenGL развивалась.
Одним из ограничений IrisGL было то, что он предоставлял доступ только к функциям, поддерживаемым базовым оборудованием. Если графическое оборудование не поддерживает функцию изначально, приложение не сможет ее использовать. OpenGL преодолел эту проблему, предоставив программную реализацию функций, не поддерживаемых оборудованием, что позволило приложениям использовать расширенную графику в относительно маломощных системах. OpenGL стандартизировал доступ к оборудованию, возложил ответственность за разработку программ аппаратного интерфейса ( драйверов устройств ) на производителей оборудования и делегировал функции управления окнами базовой операционной системе. Благодаря такому большому количеству различных видов графического оборудования, заставление их всех говорить на одном языке таким образом оказало замечательное влияние, предоставив разработчикам программного обеспечения платформу более высокого уровня для разработки 3D-программного обеспечения.
В 1992 году [15] SGI возглавил создание Совета по обзору архитектуры OpenGL (OpenGL ARB), группы компаний, которая будет поддерживать и расширять спецификацию OpenGL в будущем.
В 1994 году SGI обдумывала идею выпустить нечто под названием « OpenGL ++ », которое включало бы такие элементы, как API графа сцены (предположительно основанный на их технологии Performer ). Спецификация была распространена среди нескольких заинтересованных сторон, но так и не превратилась в продукт. [16]
Microsoft выпустила Direct3D в 1995 году, который со временем стал основным конкурентом OpenGL. Более 50 разработчиков игр подписали открытое письмо в Microsoft, выпущенное 12 июня 1997 года, с призывом к компании активно поддерживать Open GL. [17] 17 декабря 1997 года [18] Microsoft и SGI инициировали проект Fahrenheit , который был совместным усилием с целью унификации интерфейсов OpenGL и Direct3D (а также добавления API графа сцены). В 1998 году к проекту присоединилась Hewlett-Packard. [19] Первоначально он обещал упорядочить мир интерактивных 3D-интерфейсов компьютерной графики, но из-за финансовых ограничений SGI, стратегических соображений Microsoft и общего отсутствия поддержки со стороны отрасли в 1999 году от него отказались. [ 20]
В июле 2006 года Совет по обзору архитектуры OpenGL проголосовал за передачу контроля над стандартом API OpenGL группе Khronos. [21] [22]
В июне 2018 года Apple прекратила поддержку API OpenGL на всех своих платформах ( iOS , macOS и tvOS ), настоятельно рекомендуя разработчикам использовать свой проприетарный Metal API , который был представлен в 2014 году [23].
История версий
Первая версия OpenGL, версия 1.0, была выпущена 30 июня 1992 года Марком Сигалом и Куртом Экли . С тех пор OpenGL время от времени расширялся за счет выпуска новой версии спецификации. Такие выпуски определяют базовый набор функций, которые должны поддерживать все соответствующие видеокарты, и для которых будет проще писать новые расширения. Каждая новая версия OpenGL имеет тенденцию включать несколько расширений, которые широко поддерживаются поставщиками видеокарт, хотя детали этих расширений могут быть изменены.
Версия | Дата выпуска | Функции |
---|---|---|
1.1 | 4 марта 1997 г. | Текстурные объекты |
1.2 | 16 марта 1998 г. | 3D-текстуры, BGRA и форматы упакованных пикселей , [24] введение подмножества изображений, полезного для приложений обработки изображений |
1.2.1 | 14 октября 1998 г. | Концепция расширений ARB |
1.3 | 14 августа 2001 г. | Мультитекстурирование , мультисэмплинг, сжатие текстур |
1.4 | 24 июля 2002 г. | Текстуры глубины, GLSlang [25] |
1.5 | 29 июля 2003 г. | Объект буфера вершин (VBO), запросы окклюзии [26] |
2.0 | 7 сентября 2004 г. | GLSL 1.1, MRT , Non Power of Two textures, Point Sprites, [27] Двусторонний трафарет [26] |
2.1 | 2 июля 2006 г. | GLSL 1.2, объект пиксельного буфера (PBO), текстуры sRGB [26] |
3.0 | 11 августа 2008 г. | GLSL 1.3, массивы текстур, условный рендеринг, объект буфера кадра (FBO) [28] |
3.1 | 24 марта 2009 г. | GLSL 1.4, создание экземпляров, объект буфера текстуры, объект унифицированного буфера, перезапуск примитива [29] |
3.2 | 3 августа 2009 г. | GLSL 1.5, шейдер геометрии, текстуры с множественной выборкой [30] |
3.3 | 11 марта 2010 г. | GLSL 3.30, Backports как можно больше функций из спецификации OpenGL 4.0 |
4.0 | 11 марта 2010 г. | GLSL 4.00, Тесселяция на GPU, шейдеры с 64-битной точностью [31] |
4.1 | 26 июля 2010 г. | GLSL 4.10, удобные для разработчиков выходные данные отладки, совместимость с OpenGL ES 2.0 [32] |
4.2 | 8 августа 2011 г. [33] | GLSL 4.20, шейдеры с атомарными счетчиками, инстансы обратной связи с преобразованием отрисовки, упаковка шейдеров, улучшения производительности |
4.3 | 6 августа 2012 г. [34] | GLSL 4.30, Вычислительные шейдеры, использующие параллелизм графического процессора, буферные объекты хранилища шейдеров, высококачественное сжатие текстур ETC2 / EAC, повышенная безопасность памяти, расширение надежности для нескольких приложений, совместимость с OpenGL ES 3.0 [35] |
4.4 | 22 июля 2013 г. [36] | GLSL 4.40, управление размещением буфера, эффективные асинхронные запросы, макет переменных шейдера, эффективное связывание нескольких объектов, упрощенный перенос приложений Direct3D, расширение без привязки текстур, расширение разреженных текстур [36] |
4.5 | 11 августа 2014 г. [8] [37] | GLSL 4.50, прямой доступ к состоянию (DSA), управление сбросом, надежность, API OpenGL ES 3.1 и совместимость с шейдерами, функции эмуляции DX11 |
4.6 | 31 июля 2017 г. [38] [39] | GLSL 4.60, более эффективная обработка геометрии и выполнение шейдеров, дополнительная информация, отсутствие контекста ошибок, ограничение смещения полигона, SPIR-V, анизотропная фильтрация |
OpenGL 2.0
Дата выхода : 7 сентября 2004 г.
OpenGL 2.0 был первоначально задуман 3Dlabs для решения проблем, связанных с застоем OpenGL и отсутствием четкого направления. [40] 3Dlabs предложила ряд важных дополнений к стандарту. Большинство из них были в то время отклонены ARB или по иным причинам так и не были реализованы в той форме, которую предлагала 3Dlabs. Однако их предложение о языке затенения в стиле C было в конечном итоге завершено, в результате чего была разработана текущая формулировка языка затенения OpenGL ( GLSL или GLslang). Подобно ассемблерным языкам затенения, которые он заменял, он позволял заменить вершину с фиксированной функцией и конвейер фрагментов шейдерами , хотя на этот раз написанными на языке высокого уровня, подобном Си.
Конструкция GLSL отличалась относительно небольшим количеством уступок доступным тогда аппаратным средствам. Это восходит к более ранней традиции OpenGL, которая ставит амбициозную, перспективную цель для 3D-ускорителей, а не просто отслеживает состояние доступного в настоящее время оборудования. Окончательная спецификация OpenGL 2.0 [41] включает поддержку GLSL.
Longs Peak и 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 объявила, что столкнулась с несколькими проблемами, которые она хотела бы решить перед выпуском спецификации. [42] В результате спецификация была отложена, и Khronos Group была заблокирована для СМИ до выпуска окончательной спецификации OpenGL 3.0.
Окончательная спецификация оказалась гораздо менее революционной, чем предложение Longs Peak. Вместо того, чтобы удалить весь немедленный режим и фиксированные функции (не шейдерный режим), спецификация включила их как устаревшие функции. Предложенная объектная модель не была включена, и не было объявлено о планах ее включения в какие-либо будущие версии. В результате API остался в основном прежним, а несколько существующих расширений были переведены на базовую функциональность.
Среди некоторых групп разработчиков это решение вызвало бурю негодования [43], поскольку многие разработчики заявляли, что в знак протеста перейдут на DirectX . Большинство жалоб касались отсутствия связи со стороны Khronos с сообществом разработчиков и отказа от множества функций, которые многие положительно оценили. Другие разочарования включали требование оборудования уровня DirectX 10 для использования OpenGL 3.0 и отсутствие геометрических шейдеров и рендеринга экземпляров в качестве основных функций.
Другие источники сообщили, что реакция сообщества была не такой суровой, как первоначально представлялось [44], и многие поставщики продемонстрировали поддержку обновления. [45] [46]
OpenGL 3.0
Дата выпуска : 11 августа 2008 г.
OpenGL 3.0 представил механизм устаревания, чтобы упростить будущие версии API. Некоторые функции, помеченные как устаревшие, можно полностью отключить, запросив у оконной системы контекст прямой совместимости . Однако к функциям OpenGL 3.0 можно было получить доступ вместе с этими устаревшими функциями, запросив полный контекст .
К устаревшим функциям относятся:
- Вся обработка вершин и фрагментов с фиксированными функциями
- Рендеринг в прямом режиме с использованием glBegin и glEnd
- Списки отображения
- Цели рендеринга с индексированным цветом
- OpenGL Shading Language версий 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. D3D12 - это новая эмуляция расширения Microsoft WSL для использования Direct 12.
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 Series и новее (шейдеры FP64, реализованные путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Ivy Bridge и новее. [47]
OpenGL 4.1
Дата выпуска : 26 июля 2010 г.
Аппаратная поддержка: Nvidia GeForce 400 серии и новее, AMD Radeon HD 5000 Series и новее (шейдеры FP64, реализованные путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Ivy Bridge и новее. [47]
- Минимальный «максимальный размер текстуры» составляет 16 384 × 16 384 для графических процессоров, реализующих эту спецификацию. [48]
OpenGL 4.2
Дата выпуска: 8 августа 2011 г. [33]
- Поддержка шейдеров с атомарными счетчиками и операций чтения-изменения-записи load-store-atomic для одного уровня текстуры
- Рисование нескольких экземпляров данных, захваченных в результате обработки вершин графического процессора (включая тесселяцию), чтобы можно было эффективно перемещать и реплицировать сложные объекты.
- Поддержка изменения произвольного подмножества сжатой текстуры без необходимости повторно загружать всю текстуру в графический процессор для значительного повышения производительности.
Аппаратная поддержка: Nvidia GeForce 400 серии и новее, AMD Radeon HD 5000 Series и новее (шейдеры FP64, реализованные путем эмуляции на некоторых графических процессорах TeraScale) и Intel HD Graphics в процессорах Intel Haswell и новее. [47] (Linux Mesa: Ivy Bridge и новее)
OpenGL 4.3
Дата выпуска: 6 августа 2012 г. [34]
- Вычислительные шейдеры, использующие параллелизм графического процессора в контексте графического конвейера
- Буферные объекты хранилища шейдеров, позволяющие шейдерам читать и записывать буферные объекты, такие как загрузка / сохранение изображений из версии 4.2, но через язык, а не вызовы функций.
- Запросы параметров формата изображения
- Сжатие текстур ETC2 / EAC как стандартная функция
- Полная совместимость с API OpenGL ES 3.0
- Возможность отладки для получения отладочных сообщений во время разработки приложения
- Представления текстур для интерпретации текстур по-разному без репликации данных
- Повышенная безопасность памяти и надежность работы с несколькими приложениями
Поддержка оборудования: AMD Radeon HD 5000 Series и новее (шейдеры FP64, реализованные путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Haswell и новее. [47] (Linux Mesa: Ivy Bridge без текстурирования трафаретов, Haswell и новее), серия Nvidia GeForce 400 и новее. Эмуляция VIRGL для виртуальных машин поддерживает 4.3+ с Mesa 20.
OpenGL 4.4
Дата выпуска: 22 июля 2013 г. [36]
- Принудительный контроль использования объекта буфера
- Асинхронные запросы к буферным объектам
- Выражение дополнительных элементов управления макетом переменных интерфейса в шейдерах
- Эффективное связывание нескольких объектов одновременно
Аппаратная поддержка: AMD Radeon HD 5000 Series и новее (шейдеры FP64, реализованные путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Broadwell и новее (Linux Mesa: Haswell и новее), [49] Nvidia GeForce серии 400 и новее, [50] Тегра К1 .
OpenGL 4.5
Дата выпуска: 11 августа 2014 г. [8] [37]
- Прямой доступ к состоянию (DSA) - средства доступа к объектам позволяют запрашивать и изменять состояние без привязки объектов к контекстам для повышения эффективности и гибкости приложений и промежуточного программного обеспечения. [51]
- Flush Control - приложения могут управлять сбросом ожидающих команд перед переключением контекста, что обеспечивает высокопроизводительные многопоточные приложения;
- Надежность - обеспечение безопасной платформы для приложений, таких как браузеры WebGL, включая предотвращение сброса графического процессора, влияющего на любые другие запущенные приложения;
- API OpenGL ES 3.1 и совместимость с шейдерами - для упрощения разработки и выполнения последних приложений OpenGL ES на настольных системах.
Аппаратная поддержка: AMD Radeon HD 5000 Series и новее (шейдеры FP64, реализованные путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Broadwell и новее (Linux Mesa: Haswell и новее), Nvidia GeForce серии 400 и новее, [50] Tegra K1 и Tegra X1. [52] [53]
OpenGL 4.6
Дата выпуска: 31 июля 2017 г. [8] [38] [39]
- более эффективная обработка геометрии на стороне графического процессора
- более эффективное выполнение шейдеров ( AZDO )
- больше информации через статистику, запрос переполнения и счетчики
- более высокая производительность благодаря отсутствию контекстов обработки ошибок
- зажим из многоугольника смещения функции, решает проблему теневой визуализации
- SPIR-V шейдеров
- Улучшенная анизотропная фильтрация
Поддержка оборудования: AMD Radeon HD 7000 Series и новее (шейдеры FP64, реализованные путем эмуляции на некоторых графических процессорах TeraScale), Intel Haswell и новее, Nvidia GeForce 400 series и новее. [50]
Поддержка драйверов:
- Mesa 19.2 в Linux поддерживает OpenGL 4.6 для Intel Broadwell и новее. [54] Mesa 20.0 поддерживает графические процессоры AMD Radeon, [55] в то время как поддержка 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 г. [56] [57]
- Графический драйвер Intel 26.20.100.6861 в Windows 10 . Дата выпуска: май 2019 г. [58] [59]
- Графический драйвер NVIDIA GeForce 397.31 только для Windows 7 , 8 , 10 x86-64 бит, 32-битная поддержка не поддерживается. Дата выпуска: апрель 2018 г. [60]
Альтернативные реализации
Apple отказалась от OpenGL в iOS 12 и macOS 10.14 Mojave в пользу Metal , но он по-прежнему доступен в macOS 11 Big Sur (включая кремниевые устройства Apple ). [61] Последняя версия, поддерживаемая OpenGL, - это 4.1 с 2011 года. [62] [63] Проприетарная библиотека от Molten - авторов MoltenVK - под названием MoltenGL, может транслировать вызовы OpenGL в Metal. [64]
Есть несколько проектов, которые пытаются реализовать OpenGL поверх Vulkan. Серверная часть Vulkan для Google ANGLE достигла соответствия OpenGL ES 3.1 в июле 2020 года. [65] Проект Mesa3D также включает такой драйвер под названием Zink . [66]
Вулкан
Vulkan, ранее называвшийся «Инициативой OpenGL следующего поколения» (glNext), [67] [68], представляет собой основную попытку изменить дизайн, чтобы объединить OpenGL и OpenGL ES в один общий API, который не будет обратно совместим с существующими версиями OpenGL. [69] [70] [71]
Первоначальная версия 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 нового поколения»
- Графический конвейер
- WebGPU
Рекомендации
- ^ Лекстрейт, Винсент (январь 2010 г.). "Маяк языков программирования, v10.0" . Архивировано из оригинального 30 мая 2012 года . Проверено 14 марта 2010 года .
- ^ «Продукты: Программное обеспечение: OpenGL: Лицензирование и логотипы» . SGI. Архивировано из оригинала на 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 года .
- ^ «Обзор членства в Khronos и часто задаваемые вопросы» . Khronos.org . Проверено 7 ноября 2012 года .
- ^ а б в г "Реестр Khronos 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» .
- ^ «Создание OpenGL ARB» . Архивировано из оригинального 22 февраля 2007 года . Проверено 16 февраля 2007 года .
- ^ «Конец OpenGL ++» . Хронос Групп.
- ^ «Ведущие разработчики игр призывают Microsoft активно поддерживать OpenGL» . Следующее поколение . № 32. Imagine Media . Август 1997. с. 17.
- ^ «Объявление по Фаренгейту» . Архивировано из оригинального 27 сентября 2007 года.
- ^ «Члены Фаренгейта. 1998» . Computergram International . 1998. Архивировано из оригинала 5 октября 2007 года.
- ^ «Конец Фаренгейта» .
- ^ «OpenGL ARB передаст контроль над спецификацией OpenGL компании Khronos Group» . Пресс-релиз Хроноса. 31 июля 2006 г.
- ^ «OpenGL ARB передаст контроль над спецификацией OpenGL группе Khronos» . Архив AccessMyLibrary.
- ^ Смит, Райан (5 июня 2018 г.). «Apple не поддерживает OpenGL во всех операционных системах; призывает разработчиков использовать Metal» . www.anandtech.com . Purch . Проверено 5 июня 2018 года .
- ^ Астл, Дэйв (1 апреля 2003 г.). «Выход за рамки OpenGL 1.1 для Windows» . gamedev.net . Проверено 15 ноября 2007 года .
- ^ Исорна, JM (2015). Simulación visual de materiales: teoría, tecnicas, análisis de casos . СКП Грау. Arquitectura, urbanisme i edificació (на испанском языке). Политехнический университет Каталонии. п. 191. ISBN. 978-84-9880-564-2. Проверено 21 августа 2019 года .
- ^ а б в «Графическая система 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» .
- ^ «Khronos ускоряет эволюцию кроссплатформенной трехмерной графики с выпуском спецификации OpenGL 4.1» .
- ^ а б «Khronos обогащает кроссплатформенную трехмерную графику выпуском спецификации OpenGL 4.2» .
- ^ а б «Khronos выпускает спецификацию OpenGL 4.3 с основными улучшениями» .
- ^ «Khronos выпускает спецификацию OpenGL 4.3 с основными улучшениями» .
- ^ а б в «Khronos выпускает спецификацию OpenGL 4.4» .
- ^ а б «Khronos Group объявляет о ключевых достижениях в экосистеме OpenGL - пресс-релиз Khronos Group» . Khronos Group Inc . Проверено 17 апреля 2015 года .
- ^ а б «Khronos выпускает OpenGL 4.6 с поддержкой SPIR-V» . Khronos Group Inc . Проверено 31 июля 2017 года .
- ^ а б Кессенич, Джон; Болдуин, Дэйв. «Язык затенения OpenGL®, версия 4.60.7» . Khronos Group Inc . Проверено 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 уже сейчас» .
- ^ а б в г «Драйвер Intel Iris и HD Graphics для Windows 7/8 / 8.1 64bit» . Центр загрузок Intel . Архивировано из оригинального 2 -го апреля 2015 года.
- ^ «Ожидаемый максимальный размер текстуры - Графика и программирование на GPU» . GameDev.net .
- ^ «Процессоры Intel Skylake-S и наборы микросхем серии 100 подробно описаны в очевидной утечке» . Гаджеты НДТВ . 17 апреля 2015 года.
- ^ а б в Майкл Ларабель (31 июля 2017 г.). «NVIDIA выпускает драйвер Linux 381.26.11 с поддержкой OpenGL 4.6» . Фороникс .
- ^ «Выпущен OpenGL 4.5 с одной из лучших функций Direct3D» . Ars Technica . Проверено 17 апреля 2015 года .
- ^ «SG4121: Обновление OpenGL для графических процессоров NVIDIA» . Ustream . Архивировано из оригинала на 17 мая 2015 года . Проверено 17 апреля 2015 года .
- ^ Килгард, Марк. «Обновление 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 года .
- ^ «Драйверы DCH для Windows® 10» . Центр загрузки Intel . Проверено 21 августа 2019 года .
- ^ «Выпущен графический драйвер NVIDIA GeForce 397.31 (OpenGL 4.6, Vulkan 1.1, RTX, CUDA 9.2) - Geeks3D» . www.geeks3d.com . Проверено 10 мая 2018 года .
- ^ «Документация для разработчиков Apple» . developer.apple.com .
- ^ Каннингем, Эндрю (7 октября 2019 г.). «macOS 10.15 Catalina: обзор Ars Technica» . Ars Technica .
- ^ Аксон, Самуэль (6 июня 2018 г.). «Прекращение поддержки OpenGL, плюс другие обновления, о которых Apple не рассказывала во время выступления» . Ars Technica . Проверено октябрь +19, 2 020 .
- ^ «Vulkan и более быстрый OpenGL ES для iOS и macOS» . Расплавленный . Проверено октябрь +19, 2 020 .
- ^ Авторы проекта ANGLE (14 октября 2020 г.). «google / angle: соответствующая реализация OpenGL ES для Windows, Mac, Linux, iOS и Android» . GitHub . Проверено 17 декабря 2020 года .
- ^ «Цинк» . Последняя документация библиотеки 3D-графики Mesa .
- ^ Дингман, Хайден (3 марта 2015 г.). «Встречайте Vulkan, мощную платформенно-независимую игровую технологию, нацеленную на DirectX 12» . Мир ПК . Проверено 3 марта 2015 года .
- ^ Брайт, Питер (3 марта 2015 г.). «Khronos представляет Vulkan: OpenGL, созданный для современных систем» . Ars Technica . Проверено 3 марта 2015 года .
- ^ «Хронос объявляет об инициативе нового поколения OpenGL» . AnandTech . Проверено 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 Shading Language (3-е изд.). Эддисон-Уэсли. ISBN 978-0-321-63763-5.
- Lengyel, Эрик (2003). Руководство по расширениям OpenGL . Чарльз Ривер Медиа. ISBN 1-58450-294-0.
- Совет по обзору архитектуры OpenGL ; Шрейнер, Дэйв (2004). Справочное руководство OpenGL: официальный справочный документ по OpenGL . Версия 1.4. Эддисон-Уэсли. ISBN 0-321-17383-X.
- Совет по обзору архитектуры OpenGL ; Шрейнер, Дэйв; и другие. Руководство по программированию OpenGL: официальное руководство по изучению OpenGL . Версия 2 (5-е изд.). Эддисон-Уэсли. ISBN 0-321-33573-2.
Внешние ссылки
- Официальный веб-сайт
- Обзор OpenGL и Wiki OpenGL.org с дополнительной информацией о привязках OpenGL Language
- Веб-сайт SGI OpenGL
- OpenGL в Керли
- Khronos Group, Inc.
- Ангел, Эдвард и Шрейнер, Дэйв (2013). «Введение в программирование OpenGL» . YouTube . SIGGRAPH University.