OpenGL

Кроссплатформенный графический API

OpenGL
Оригинальный автор(ы)Кремниевая графика
Разработчик(и)Группа компаний «Хронос»
(ранее АРБ )
Первоначальный выпуск30 июня 1992 г .; 32 года назад ( 1992-06-30 )
Стабильный релиз
4.6 [1]  / 31 июля 2017 г. ; 7 лет назад ( 31 июля 2017 )
Написано вС [2]
ПреемникВулкан
ТипAPI 3D-графики
Лицензия
  • Лицензия с открытым исходным кодом для использования примера реализации (SI): это лицензия свободного программного обеспечения B, во многом схожая с лицензиями BSD, X и Mozilla.
  • Лицензия на товарный знак для новых лицензиатов, желающих использовать товарный знак и логотип OpenGL и заявлять о соответствии. [3]
Веб-сайтopengl.org

OpenGL ( Open Graphics Library [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 графики. Он разработан для реализации в основном или полностью с использованием аппаратного ускорения, такого как GPU , хотя API может быть реализован полностью в программном обеспечении, работающем на CPU .

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 была прекращена в пользу API Vulkan , выпущенного в 2016 году и имевшего кодовое название glNext во время первоначальной разработки. В 2017 году Khronos Group объявила, что OpenGL ES не будет иметь новых версий [9] [10] и с тех пор сосредоточилась на разработке Vulkan и других технологий. [11] [12] В результате некоторые возможности, предлагаемые современными графическими процессорами, например трассировка лучей , не поддерживаются стандартом OpenGL. Однако поддержка новых функций может быть предоставлена ​​через расширения OpenGL, специфичные для поставщика. [13] [14]

Группа Khronos выпускает новые версии спецификаций OpenGL, каждая из которых расширяет API для поддержки различных новых функций. Детали каждой версии определяются консенсусом между членами группы, включая производителей видеокарт, разработчиков операционных систем и общие технологические компании, такие как Mozilla и Google . [15]

В дополнение к функциям, требуемым основным API, поставщики графических процессоров (GPU) могут предоставлять дополнительную функциональность в виде расширений . Расширения могут вводить новые функции и новые константы, а также могут ослаблять или снимать ограничения на существующие функции OpenGL. Поставщики могут использовать расширения для предоставления пользовательских API без необходимости поддержки со стороны других поставщиков или Khronos Group в целом, что значительно увеличивает гибкость OpenGL. Все расширения собираются и определяются в реестре OpenGL. [16]

Каждое расширение связано с коротким идентификатором, основанным на названии компании, которая его разработала. Например, идентификатор Nvidia — NV, который является частью имени расширения ,GL_NV_half_float константы GL_HALF_FLOAT_NVи функции glVertex2hNV(). [17] Если несколько поставщиков соглашаются реализовать одну и ту же функциональность с использованием одного и того же API, может быть выпущено общее расширение с использованием идентификатора EXT. В таких случаях также может случиться, что Совет по рассмотрению архитектуры Khronos Group даст расширению свое явное одобрение, и в этом случае будет использоваться идентификатор ARB. [18]

Функции, вводимые каждой новой версией OpenGL, обычно формируются из объединенных функций нескольких широко распространенных расширений, особенно расширений типа ARB или EXT.

Документация

The OpenGL Architecture Review Board выпустила серию руководств вместе со спецификацией, которые были обновлены для отслеживания изменений в 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 также доступна на официальной веб-странице. [19]

Ассоциированные библиотеки

Самые ранние версии OpenGL были выпущены с сопутствующей библиотекой, называемой OpenGL Utility Library (GLU). Она предоставляла простые, полезные функции, которые вряд ли поддерживались современным оборудованием, такие как тесселяция и генерация mip-карт и примитивных фигур . Спецификация GLU последний раз обновлялась в 1998 году и зависит от функций OpenGL, которые в настоящее время устарели .

Контекстные и оконные наборы инструментов

Учитывая, что создание контекста OpenGL является довольно сложным процессом, и учитывая, что он различается в разных операционных системах , автоматическое создание контекста OpenGL стало общей чертой нескольких библиотек разработки игр и пользовательского интерфейса , включая SDL , Allegro , SFML , FLTK и Qt . Несколько библиотек были разработаны исключительно для создания окна с поддержкой OpenGL. Первой такой библиотекой была OpenGL Utility Toolkit (GLUT), позже замененная freeglut . GLFW — более новая альтернатива. [20]

  • Эти наборы инструментов предназначены для создания и управления окнами OpenGL, а также для управления вводом, но не более того. [21]
  • GLFW – кроссплатформенный обработчик окон и клавиатуры, мыши и джойстика; больше ориентирован на игры
  • freeglut – кроссплатформенный обработчик окон и клавиатуры-мыши; его API является надмножеством API GLUT, и он более стабилен и актуален, чем GLUT
  • OpenGL Utility Toolkit (GLUT) – старый обработчик окон, больше не поддерживаемый.
  • Несколько «мультимедийных библиотек» могут создавать окна OpenGL, а также выполнять ввод, звук и другие задачи, полезные для игровых приложений.
  • Allegro 5 – кроссплатформенная мультимедийная библиотека с C API, ориентированная на разработку игр
  • 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 library (GLEE), OpenGL Extension Wrangler Library (GLEW) и glbinding . Расширения также автоматически загружаются большинством языковых привязок, таких как Java OpenGL , PyOpenGL и WebGL .

Реализации

Скриншот glxinfo, показывающий информацию о реализации OpenGL в системе Mesa

Mesa 3D — это реализация OpenGL с открытым исходным кодом . Она может выполнять чисто программный рендеринг, а также может использовать аппаратное ускорение на BSD , Linux и других платформах, используя преимущества инфраструктуры прямого рендеринга . Начиная с версии 20.0, она реализует версию 4.6 стандарта OpenGL.

История

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

К началу 1990-х годов Silicon Graphics (SGI) была лидером в области 3D-графики для рабочих станций. Их IRIS GL API [22] [23] стал отраслевым стандартом, поскольку IRIS GL считался более простым в использовании, [ кем? ] и поддерживал немедленный режим рендеринга, поэтому был быстрее [24], чем конкуренты, такие как 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 и NeWS от Sun. Библиотеки IRIS GL также были непригодны для открытия из-за проблем с лицензированием и патентами [ необходимо дополнительное объяснение ] . Эти факторы требовали от SGI продолжать поддерживать передовые и фирменные программные API Iris Inventor и Iris Performer , пока рыночная поддержка OpenGL не созрела.

Одним из ограничений IRIS GL было то, что он предоставлял доступ только к функциям, поддерживаемым базовым оборудованием. Если графическое оборудование изначально не поддерживало функцию, то приложение не могло ее использовать. OpenGL преодолел эту проблему, предоставив программные реализации функций, не поддерживаемых оборудованием, что позволило приложениям использовать расширенную графику на относительно маломощных системах. OpenGL стандартизировал доступ к оборудованию, переложил ответственность за разработку программ интерфейса оборудования ( драйверов устройств ) на производителей оборудования и делегировал функции управления окнами базовой операционной системе. При таком количестве различных видов графического оборудования заставить их всех говорить на одном языке таким образом имело замечательное влияние, предоставив разработчикам программного обеспечения платформу более высокого уровня для разработки 3D-программ.

В 1992 году [25] SGI возглавила создание Совета по рассмотрению архитектуры OpenGL (OpenGL ARB), группы компаний, которая в будущем будет поддерживать и расширять спецификацию OpenGL. Два года спустя они также играли с идеей выпуска чего-то под названием « OpenGL++ », что включало такие элементы, как API графа сцены (предположительно, основанный на их технологии Performer ). Спецификация была распространена среди нескольких заинтересованных сторон, но так и не превратилась в продукт. [26]

Выпущенный в 1996 году, Direct3D от Microsoft в конечном итоге стал главным конкурентом OpenGL. Более 50 разработчиков игр подписали открытое письмо в Microsoft, опубликованное 12 июня 1997 года, призывая компанию активно поддерживать OpenGL. [27] 17 декабря 1997 года [28] Microsoft и SGI инициировали проект Fahrenheit , который был совместным усилием с целью объединения интерфейсов OpenGL и Direct3D (а также добавления API графа сцены). В 1998 году к проекту присоединилась Hewlett-Packard. [29] Первоначально он показывал некоторые перспективы наведения порядка в мире интерактивных API трехмерной компьютерной графики, но из-за финансовых ограничений в SGI, стратегических причин в Microsoft и общего отсутствия поддержки отрасли он был заброшен в 1999 году. [30]

В июле 2006 года Совет по рассмотрению архитектуры OpenGL проголосовал за передачу контроля над стандартом API OpenGL группе Khronos. [31] [32]

Поддержка отрасли

Несмотря на появление новых графических API, таких как его преемник Vulkan или Metal, OpenGL продолжает оставаться широко используемым стандартом. Эта постоянная актуальность поддерживается несколькими факторами: продолжающаяся разработка с новыми расширениями и оптимизациями драйверов, его кроссплатформенная совместимость и наличие слоев совместимости, таких как ANGLE и Zink. Эти слои позволяют OpenGL эффективно работать поверх Vulkan и Metal, предлагая путь для постоянного использования или постепенных переходов для разработчиков. [33] [34] [ требуется лучший источник ]

Однако ландшафт графических API меняется, и некоторые компании отходят от OpenGL. Еще в июне 2018 года Apple объявила устаревшими API OpenGL на всех своих платформах ( iOS , macOS и tvOS ), настоятельно призывая разработчиков использовать свой собственный API Metal , представленный в 2014 году. [35]

Разработчики игр также начали переходить на новые API. id Software , которая использовала OpenGL в своих играх с конца 1990-х годов в таких играх, как GLQuake [36] или некоторых играх франшизы Doom [37] , перешла на его преемника Vulkan в своем движке id Tech 7 в 2016 году . [38] Впервые они поддержали Vulkan в обновлении для своего движка id Tech 6. Первое лицензированное использование OpenGL компанией было в ее движке Quake II , также известном как id Tech 2 [ 39] В марте 2023 года Valve удалила поддержку OpenGL из Dota 2 в пользу Vulkan. [40] Atypical Games при поддержке Samsung обновила свой игровой движок, чтобы использовать Vulkan вместо OpenGL на всех платформах, отличных от Apple. [41]

Khronos Group , консорциум, ответственный за разработку OpenGL, прекратил поддержку OpenGL. [ требуется ссылка ] Он не получил ряд современных графических технологий, таких как трассировка лучей , декодирование видео на GPU , алгоритмы сглаживания с глубоким обучением, такие как Nvidia DLSS [42] и AMD FSR [43].

Fuchsia OS от Google , хотя и использует Vulkan изначально и требует Vulkan-совместимого графического процессора, по-прежнему намерена поддерживать OpenGL поверх Vulkan через слой трансляции ANGLE. [44]

История версий

Первая версия OpenGL, версия 1.0, была выпущена 30 июня 1992 года Марком Сигалом и Куртом Экли . С тех пор OpenGL время от времени расширялся путем выпуска новой версии спецификации. Такие выпуски определяют базовый набор функций, которые должны поддерживать все соответствующие графические карты, и на основе которых можно легче писать новые расширения. Каждая новая версия OpenGL имеет тенденцию включать несколько расширений, которые имеют широкую поддержку среди поставщиков графических карт, хотя детали этих расширений могут быть изменены.

История версий OpenGL
ВерсияДата выпускаФункции
1.14 марта 1997 г. [45] [46]Текстурные объекты, Массивы вершин
1.216 марта 1998 г.3D-текстуры, BGRA и упакованные форматы пикселей, [47] введение подмножества изображений, полезного для приложений обработки изображений
1.2.114 октября 1998 г.Концепция расширений ARB
1.314 августа 2001 г.Мультитекстурирование , мультисэмплинг, сжатие текстур
1.424 июля 2002 г.Текстуры глубины, GLSlang [48]
1.529 июля 2003 г.Объект буфера вершин (VBO), запросы окклюзии [49]
2.07 сентября 2004 г.GLSL 1.1, MRT , текстуры, не являющиеся степенью двойки, точечные спрайты, [50] Двусторонний трафарет [49]
2.12 июля 2006 г.GLSL 1.2, объект буфера пикселей (PBO), текстуры sRGB [49]
3.011 августа 2008 г.GLSL 1.3, Массивы текстур, Условный рендеринг, Объект буфера кадров (FBO) [51]
3.124 марта 2009 г.GLSL 1.4, создание экземпляров, объект буфера текстуры, объект однородного буфера, примитивный перезапуск [52]
3.23 августа 2009 г.GLSL 1.5, Геометрический шейдер, Многовыборочные текстуры [53]
3.311 марта 2010 г.GLSL 3.30, максимально переносит функции из спецификации OpenGL 4.0
4.011 марта 2010 г.GLSL 4.00, Тесселяция на GPU, шейдеры с 64-битной точностью [54]
4.126 июля 2010 г.GLSL 4.10, удобные для разработчиков отладочные результаты [a] , совместимость с OpenGL ES 2.0 [55]
4.28 августа 2011 г. [56]GLSL 4.20, шейдеры с атомарными счетчиками, инстанс обратной связи преобразования отрисовки, упаковка шейдеров, улучшения производительности
4.36 августа 2012 г. [57]GLSL 4.30, вычислительные шейдеры, использующие параллелизм графического процессора, объекты буфера хранения шейдеров, высококачественное сжатие текстур ETC2/EAC, повышенная безопасность памяти, расширение надежности нескольких приложений, совместимость с OpenGL ES 3.0 [58]
4.422 июля 2013 г. [59]GLSL 4.40, управление размещением буфера, эффективные асинхронные запросы, макет переменных шейдера, эффективное связывание нескольких объектов, оптимизированное портирование приложений Direct3D, расширение Bindless Texture, расширение Sparse Texture [59]
4.511 августа 2014 г. [16] [60]GLSL 4.50, прямой доступ к состоянию (DSA), управление сбросом, надежность, совместимость с API и шейдерами OpenGL ES 3.1, функции эмуляции DX11
4.631 июля 2017 г. [8] [61]GLSL 4.60, более эффективная обработка геометрии и выполнение шейдеров, больше информации, отсутствие контекста ошибок, фиксация смещения полигонов, SPIR-V, анизотропная фильтрация

OpenGL2.0

Дата выпуска : 7 сентября 2004 г.

OpenGL 2.0 изначально был задуман 3Dlabs для решения проблем, связанных с тем, что OpenGL стагнирует и не имеет четкого направления. [62] 3Dlabs предложили ряд важных дополнений к стандарту. Большинство из них в то время были отклонены ARB или иным образом никогда не были реализованы в форме, предложенной 3Dlabs. Однако их предложение о языке шейдеров в стиле C в конечном итоге было завершено, что привело к текущей формулировке языка шейдеров OpenGL ( GLSL или GLslang). Как и языки шейдеров, подобные ассемблеру, которые он заменял, он позволял заменить фиксированный конвейер вершин и фрагментов на шейдеры , хотя на этот раз написанные на языке высокого уровня, подобном C.

Дизайн GLSL был примечателен тем, что делал относительно немного уступок ограничениям доступного тогда оборудования. Это возвращало к более ранней традиции OpenGL, устанавливающей амбициозную, перспективную цель для 3D-ускорителей, а не просто отслеживающей состояние доступного в настоящее время оборудования. Окончательная спецификация OpenGL 2.0 [63] включает поддержку 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. Это позволило бы устаревшим кодовым базам, таким как большинство продуктов CAD , продолжать работать, в то время как другое программное обеспечение могло бы быть написано или перенесено на новый API.

Первоначально Longs Peak должен был быть завершен в сентябре 2007 года под названием OpenGL 3.0, но 30 октября Khronos Group объявила, что столкнулась с несколькими проблемами, которые она хотела бы решить до выпуска спецификации. [64] В результате спецификация была отложена, и Khronos Group ушла в медиа-затишье до выпуска финальной спецификации OpenGL 3.0.

Окончательная спецификация оказалась гораздо менее революционной, чем предложение Longs Peak. Вместо того, чтобы удалить весь немедленный режим и фиксированную функциональность (нешейдерный режим), спецификация включила их в качестве устаревших функций. Предложенная объектная модель не была включена, и не было объявлено о планах включить ее в какие-либо будущие пересмотры. В результате API остался в основном тем же, а несколько существующих расширений были повышены до основных функций. Среди некоторых групп разработчиков это решение вызвало некоторый переполох, [65] многие разработчики заявили, что перейдут на DirectX в знак протеста. Большинство жалоб вращалось вокруг отсутствия коммуникации Khronos с сообществом разработчиков и отказа от множества функций, которые были восприняты многими благосклонно. Другие разочарования включали требование к оборудованию уровня DirectX 10 для использования OpenGL 3.0 и отсутствие геометрических шейдеров и рендеринга экземпляров в качестве основных функций.

Другие источники сообщили, что реакция сообщества была не столь серьезной, как изначально предполагалось, [66] и многие поставщики выразили поддержку обновлению. [67] [68]

OpenGL3.0

Дата выпуска : 11 августа 2008 г.

OpenGL 3.0 представил механизм устаревания для упрощения будущих версий API. Некоторые функции, отмеченные как устаревшие, могли быть полностью отключены путем запроса контекста прямой совместимости из оконной системы. Однако функции OpenGL 3.0 могли быть доступны наряду с этими устаревшими функциями путем запроса полного контекста .

Устаревшие функции включают в себя:

  • Вся обработка вершин и фрагментов с фиксированными функциями
  • Прямой рендеринг с использованием glBegin и glEnd
  • Показать списки
  • Индексированные цветовые рендеринговые цели
  • Язык шейдеров OpenGL версий 1.10 и 1.20

OpenGL3.1

Дата выпуска : 24 марта 2009 г.

OpenGL 3.1 полностью удалил все функции, которые были устаревшими в версии 3.0, за исключением широких линий. Начиная с этой версии, невозможно получить доступ к новым функциям с помощью полного контекста или получить доступ к устаревшим функциям с помощью контекста с прямой совместимостью . Исключение из предыдущего правила делается, если реализация поддерживает расширение ARB_compatibility, но это не гарантируется.

Поддержка оборудования: Mesa поддерживает ARM Panfrost с версии 21.0.

OpenGL3.2

Дата выпуска : 3 августа 2009 г.

OpenGL 3.2 дополнительно опирается на механизмы устаревания, введенные OpenGL 3.0, разделив спецификацию на основной профиль и профиль совместимости . Контексты совместимости включают ранее удаленные API с фиксированными функциями, эквивалентные расширению ARB_compatibility, выпущенному вместе с OpenGL 3.1, в то время как основные контексты этого не делают. OpenGL 3.2 также включает обновление до версии GLSL 1.50.

OpenGL3.3

Дата релиза: 11 марта 2010 г.

Mesa поддерживает программный драйвер SWR, softpipe и старые карты Nvidia с NV50.

OpenGL4.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 и новее. [69]

OpenGL4.1

Дата выпуска : 26 июля 2010 г.

Аппаратная поддержка: Nvidia GeForce серии 400 и новее, AMD Radeon HD серии 5000 и новее (FP64-шейдеры, реализованные путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Ivy Bridge и новее. [69]

  • Минимальный «максимальный размер текстуры» составляет 16 384 × 16 384 для графических процессоров, реализующих эту спецификацию. [70]

OpenGL4.2

Дата выхода: 8 августа 2011 г. [56]

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

Аппаратная поддержка: Nvidia GeForce серии 400 и новее, AMD Radeon HD серии 5000 и новее (FP64-шейдеры, реализованные путем эмуляции на некоторых графических процессорах TeraScale), а также Intel HD Graphics в процессорах Intel Haswell и новее. [69] (Linux Mesa: Ivy Bridge и новее)

OpenGL4.3

Дата выхода: 6 августа 2012 г. [57]

  • Вычислительные шейдеры, использующие параллелизм графического процессора в контексте графического конвейера
  • Объекты буфера хранения шейдеров, позволяющие шейдерам считывать и записывать объекты буфера, такие как загрузка/сохранение изображений из версии 4.2, но посредством языка, а не вызовов функций.
  • Запросы параметров формата изображения
  • Сжатие текстур ETC2/EAC как стандартная функция
  • Полная совместимость с API OpenGL ES 3.0
  • Отладочные возможности для получения отладочных сообщений во время разработки приложения
  • Представления текстур для интерпретации текстур различными способами без репликации данных
  • Повышенная безопасность памяти и надежность многоприложений

Поддерживаемое оборудование: AMD Radeon HD серии 5000 и новее (шейдеры FP64 реализованы путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Haswell и новее. [69] (Linux Mesa: Ivy Bridge без трафаретного текстурирования, Haswell и новее), Nvidia GeForce серии 400 и новее. Эмуляция VIRGL для виртуальных машин поддерживает 4.3+ с Mesa 20.

OpenGL4.4

Дата выхода: 22 июля 2013 г. [59]

  • Принудительный контроль использования буферных объектов
  • Асинхронные запросы в буферные объекты
  • Выражение большего количества элементов управления компоновкой переменных интерфейса в шейдерах
  • Эффективное связывание нескольких объектов одновременно

Поддерживаемое оборудование: AMD Radeon HD серии 5000 и новее (шейдеры FP64 реализованы путем эмуляции на некоторых графических процессорах TeraScale), Intel HD Graphics в процессорах Intel Broadwell и новее (Linux Mesa: Haswell и новее), [71] Nvidia GeForce серии 400 и новее, [72] Tegra K1 .

OpenGL4.5

Дата выхода: 11 августа 2014 г. [16] [60]

  • Прямой доступ к состоянию (DSA) – средства доступа к объектам позволяют запрашивать и изменять состояние без привязки объектов к контекстам, что повышает эффективность и гибкость приложений и промежуточного программного обеспечения. [73]
  • Управление очисткой — приложения могут управлять очисткой ожидающих команд перед переключением контекста, что позволяет создавать высокопроизводительные многопоточные приложения;
  • Надежность — обеспечение безопасной платформы для таких приложений, как браузеры 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 и новее, [72] Tegra K1 и Tegra X1. [74] [75]

OpenGL4.6

Дата выхода: 31 июля 2017 г. [16] [8] [61]

Аппаратная поддержка: AMD Radeon HD серии 7000 и новее (FP64-шейдеры реализованы путем эмуляции на некоторых графических процессорах TeraScale), Intel Haswell и новее, Nvidia GeForce серии 400 и новее. [72]

Поддержка драйверов:

  • Mesa 19.2 на Linux поддерживает OpenGL 4.6 для Intel Broadwell и более новых версий. [76] Mesa 20.0 поддерживает графические процессоры AMD Radeon, [77] в то время как поддержка 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 г. [78] [79]
  • Графический драйвер Intel 26.20.100.6861 для Windows 10. Выпущен в мае 2019 г. [80] [81]
  • Графический драйвер NVIDIA GeForce 397.31 для Windows 7 , 8 , 10 x86-64 бит только, без поддержки 32 бит . Выпущен в апреле 2018 г. [82]

Альтернативные реализации

Apple отказалась от OpenGL в iOS 12 и macOS 10.14 Mojave в пользу Metal , но он по-прежнему доступен с macOS 14 Sonoma (в том числе на устройствах Apple Silicon ). [83] Последняя поддерживаемая версия OpenGL — 4.1 от 2011 года. [84] [85] Собственная библиотека от Molten — авторов MoltenVK — под названием MoltenGL может транслировать вызовы OpenGL в Metal. [86]

Существует несколько проектов, которые пытаются реализовать OpenGL поверх Vulkan. Бэкэнд Vulkan для Google ANGLE достиг соответствия OpenGL ES 3.1 в июле 2020 года. [87] Проект Mesa3D также включает такой драйвер, называемый Zink . [88]

В Windows 11 на Arm от Microsoft добавлена ​​поддержка OpenGL 3.3 через GLon12, реализацию OpenGL с открытым исходным кодом поверх DirectX 12 через Mesa Gallium . [89] [90] [91]

Вулкан

Vulkan, ранее называвшийся «Next Generation OpenGL Initiative» (glNext), [92] [93] представляет собой попытку полностью перепроектировать OpenGL и OpenGL ES в один общий API, который не будет обратно совместим с существующими версиями OpenGL. [94] [95] [96]

Первоначальная версия Vulkan API была выпущена 16 февраля 2016 года.

Смотрите также

  • Язык ассемблера ARB – устаревший низкоуровневый язык шейдеров OpenGL
  • Direct3D – главный конкурент OpenGL
  • Glide (API) — графический API, который когда-то использовался на картах 3dfx Voodoo
  • 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 следующего поколения»
  • Графический конвейер
  • WebGL
  • Веб-GPU

Примечания

  1. ^ необязательно, сделано ядром OpenGL 4.3

Ссылки

  1. ^ «Khronos выпускает OpenGL 4.6 с поддержкой SPIR-V».
  2. ^ Lextrait, Vincent (январь 2010 г.). "The Programming Languages ​​Beacon, v10.0". Архивировано из оригинала 30 мая 2012 г. Получено 14 марта 2010 г.
  3. ^ "Продукты: Программное обеспечение: OpenGL: Лицензирование и логотипы". SGI. Архивировано из оригинала 1 ноября 2012 г. Получено 7 ноября 2012 г.
  4. ^ "Графическая система OpenGL: Спецификация" (PDF) . 4.0 (Core Profile). 11 марта 2010 г.
  5. ^ "SGI – OpenGL Overview". Архивировано из оригинала 31 октября 2004 г. Получено 16 февраля 2007 г.
  6. ^ Педди, Джон (июль 2012 г.). «Кто прекраснее всех?». Computer Graphics World . Получено 30 мая 2018 г.
  7. ^ "OpenGL ARB передает контроль над спецификацией OpenGL группе Khronos". Группа Khronos . 31 июля 2006 г. Получено 18 марта 2021 г.
  8. ^ abc "Khronos выпускает OpenGL 4.6 с поддержкой SPIR-V". Khronos Group Inc. 31 июля 2017 г. Получено 31 июля 2017 г.
  9. ^ «Vulkan, OpenGL и OpenGL ES SIGGRAPH 2017: нет планов по новой версии ядра для OpenGL ES» (PDF) . Khronos Group . 2017.
  10. ^ "Будущее OpenGL (обсуждение на форуме)". Khronos Group . 2020.
  11. ^ "Архив новостей Хроноса" . Группа компаний «Хронос» . 28 ноября 2022 г.
  12. ^ "Блог Хроноса" . Группа компаний «Хронос» . 28 ноября 2022 г.
  13. ^ "GLSL_NV_ray_tracing". GitHub .
  14. ^ "GL_NV_mesh_shader". GitHub .
  15. ^ "Обзор и часто задаваемые вопросы о членстве в Khronos". Khronos.org . Получено 7 ноября 2012 г.
  16. ^ abcd "Khronos OpenGL Registry". Khronos Group . Получено 31 июля 2017 г.
  17. ^ "NV_half_float". Реестр OpenGL . Группа Khronos.
  18. ^ "Как создать расширения Khronos API". Khronos Group . Получено 31 июля 2017 г.
  19. ^ "OpenGL - отраслевая основа для высокопроизводительной графики". Khronos Group . 19 июля 2011 г. Получено 18 марта 2021 г.
  20. ^ "Список альтернатив GLUT, поддерживаемый". Khronos Group . Получено 2 мая 2013 г.
  21. ^ "Связанные наборы инструментов и API". www.opengl.org . OpenGL . Получено 8 октября 2014 г. .
  22. ^ «IRIS GL, собственность SGI».
  23. ^ Килгард, Марк (2008). «Предыстория OpenGL: IRIS GL (слайд)». www.slideshare.net .
  24. ^ «Предисловие: Что такое OpenGL?». OpenGLBook . Получено 31 декабря 2024 г.
  25. ^ "Создание OpenGL ARB". Архивировано из оригинала 22 февраля 2007 г. Получено 16 февраля 2007 г.
  26. ^ «Конец OpenGL++». Группа Khronos.
  27. ^ "Ведущие разработчики игр призывают Microsoft активно поддерживать OpenGL". Next Generation . № 32. Imagine Media . Август 1997. стр. 17.
  28. ^ "Объявление Фаренгейта". Архивировано из оригинала 27 сентября 2007 года.
  29. ^ "Участники Фаренгейта. 1998". Computergram International . 1998. Архивировано из оригинала 5 октября 2007 года.
  30. ^ "Конец Фаренгейта". The Register .
  31. ^ "OpenGL ARB передаст контроль над спецификацией OpenGL Khronos Group". Пресс-релиз Khronos. 31 июля 2006 г.
  32. ^ «OpenGL ARB передаст контроль над спецификацией OpenGL группе Khronos». Архив AccessMyLibrary.
  33. ^ "OpenGL празднует свой 30-й день рождения". www.phoronix.com . Получено 7 декабря 2024 г. .
  34. ^ «OpenGL не умер, да здравствует Vulkan». The Accidental Astronomer . 9 апреля 2023 г. Получено 7 декабря 2024 г.
  35. ^ Смит, Райан (5 июня 2018 г.). «Apple прекращает поддержку OpenGL во всех ОС; призывает разработчиков использовать Metal». www.anandtech.com . Покупка . Получено 5 июня 2018 г. .
  36. ^ "GLQuake". Quake Wiki .
  37. ^ eTeknix.com (29 июля 2016 г.). "Анализ производительности графики Doom OpenGL VS Vulkan". eTeknix . Получено 7 декабря 2024 г. .
  38. ^ "Doom Wiki: id Tech 7" . Получено 26 октября 2021 г. .
  39. ^ "Лицензирование технологий: id Tech 2". Архивировано из оригинала 8 ноября 2009 г. Получено 17 сентября 2008 г.
  40. Доу, Лиам (7 марта 2023 г.). «Dota 2 удаляет поддержку OpenGL, новый герой Муэрта теперь доступен, большое обновление запланировано на апрель». GamingOnLinux . Получено 26 марта 2023 г.
  41. ^ «Jet Set Vulkan: размышления о переходе на Vulkan».
  42. ^ "NVIDIA DLSS SDK". github.com/NVIDIA/DLSS .
  43. ^ "AMD FidelityFX-SDK". github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK .
  44. ^ "Magma: Overview". fuchsia.dev . Получено 26 марта 2023 г. .
  45. ^ Килгард, Марк Дж. (2001). Программирование OpenGL для X Window System . Графическое программирование (6-е печатное издание). Бостон, Массачусетс. Мюнхен: Addison-Wesley. стр. 6. ISBN 978-0-201-48359-8.
  46. ^ "Графическая система OpenGL: Спецификация" (PDF) . 1.1. 4 марта 1997 г.
  47. Astle, Dave (1 апреля 2003 г.). «Moving Beyond OpenGL 1.1 for Windows». gamedev.net . Получено 15 ноября 2007 г.
  48. ^ Изорна, Дж. М. (2015). Визуальное моделирование материалов: теория, техника, анализ ситуаций. СКП Грау. Архитектура, урбанизм и строительство (на испанском языке). Политехнический университет Каталонии. п. 191. ИСБН 978-84-9880-564-2. Получено 21 августа 2019 г. .
  49. ^ abc "Графическая система OpenGL: Спецификация" (PDF) . 2.1. 1 декабря 2006 г.
  50. ^ «Точка примитива».
  51. ^ "Графическая система OpenGL: Спецификация" (PDF) . 3.0. 23 сентября 2008 г.
  52. ^ "Графическая система OpenGL: Спецификация" (PDF) . 3.1. 28 мая 2009 г.
  53. ^ "Графическая система OpenGL: Спецификация" (PDF) . 3.2 (Core Profile). 7 декабря 2009 г.
  54. ^ "Khronos представляет передовые возможности кроссплатформенного ускорения графики с OpenGL 4.0". 11 марта 2010 г.
  55. ^ «Khronos стимулирует развитие кроссплатформенной 3D-графики с выпуском спецификации OpenGL 4.1». 26 июля 2010 г.
  56. ^ ab "Khronos обогащает кроссплатформенную 3D-графику выпуском спецификации OpenGL 4.2". Группа Khronos . 8 августа 2011 г.
  57. ^ ab "Khronos выпускает спецификацию OpenGL 4.3 с существенными улучшениями". 6 августа 2012 г.
  58. ^ "Khronos выпускает спецификацию OpenGL 4.3 с существенными улучшениями". 6 августа 2012 г.
  59. ^ abc "Khronos выпускает спецификацию OpenGL 4.4". 22 июля 2013 г.
  60. ^ ab "Khronos Group объявляет о ключевых достижениях в экосистеме OpenGL – пресс-релиз Khronos Group". Khronos Group Inc. 10 августа 2014 г. Получено 17 апреля 2015 г.
  61. ^ ab Кессенич, Джон; Болдуин, Дэйв. «Язык шейдеров OpenGL, версия 4.60.7». The Khronos Group Inc. Получено 21 августа 2019 г.
  62. ^ Abi-Chahla, Fedy (16 сентября 2008 г.). "OpenGL 3 (3DLabs и эволюция OpenGL)". Tom's Hardware . Получено 24 октября 2010 г.
  63. ^ "Графическая система OpenGL: Спецификация" (PDF) . 2.0. 22 октября 2004 г.
  64. ^ "OpenGL ARB объявляет об обновлении OpenGL 3.0". 30 октября 2007 г. Архивировано из оригинала 7 ноября 2007 г. Получено 31 октября 2007 г.
  65. ^ "OpenGL 3.0 Released, Developers Furious – Slashdot". Tech.slashdot.org. 11 августа 2008 г. Получено 7 ноября 2012 г.
  66. ^ «OpenGL BOF прошел успешно, никаких отклонений не наблюдалось».
  67. ^ "Промышленный стандарт для высокопроизводительной графики". OpenGL. 18 августа 2008 г. Получено 31 июля 2017 г.
  68. ^ «NVIDIA теперь предоставляет ранний драйвер OpenGL 3.0».
  69. ^ abcd "Intel Iris and HD Graphics Driver for Windows 7/8/8.1 64bit". Intel Download Center . Архивировано из оригинала 2 апреля 2015 г.
  70. ^ «Ожидаемый максимальный размер текстуры — Графика и программирование GPU». GameDev.net .
  71. ^ "Подробности о процессорах Intel Skylake-S и чипсетах серии 100 раскрыты в очевидной утечке". NDTV Gadgets . 17 апреля 2015 г.
  72. ^ abc Ларабель, Майкл (31 июля 2017 г.). «NVIDIA выпускает драйвер Linux 381.26.11 с поддержкой OpenGL 4.6». Phoronix .
  73. ^ «OpenGL 4.5 выпущен — с одной из лучших функций Direct3D». Ars Technica . 11 августа 2014 г. Получено 17 апреля 2015 г.
  74. ^ "SG4121: OpenGL Update для графических процессоров NVIDIA". Ustream . Архивировано из оригинала 17 мая 2015 г. Получено 17 апреля 2015 г.
  75. ^ Килгард, Марк (12 августа 2014 г.). "Обновление OpenGL 4.5 для графических процессоров NVIDIA" . Получено 17 апреля 2015 г. .
  76. ^ Ларабель, Майкл (21 августа 2019 г.). «Драйвер OpenGL Linux от Intel теперь поддерживает OpenGL 4.6 для Mesa 19.2». Phoronix .
  77. ^ Ларабель, Майкл (27 ноября 2019 г.). «Драйвер AMD RadeonSI наконец-то поддерживает OpenGL 4.6». Phoronix .
  78. ^ "AMD Adrenalin 18.4.1 Graphics Driver Released (OpenGL 4.6, Vulkan 1.1.70) – Geeks3D". www.geeks3d.com . Май 2018 . Получено 10 мая 2018 .
  79. ^ "Radeon Software Adrenalin Edition 18.4.1 Release Notes". support.amd.com . Получено 10 мая 2018 г. .
  80. ^ "Intel Graphics Driver 25.20.100.6861 Released (OpenGL 4.6 + Vulkan 1.1.103) | Geeks3D". 16 мая 2019 г. Получено 16 мая 2019 г.
  81. ^ "Windows 10 DCH Drivers". Intel DownloadCenter . Получено 21 августа 2019 г.
  82. ^ "Выпущен графический драйвер NVIDIA GeForce 397.31 (OpenGL 4.6, Vulkan 1.1, RTX, CUDA 9.2) – Geeks3D". www.geeks3d.com . 25 апреля 2018 г. . Получено 10 мая 2018 г. .
  83. ^ «Документация для разработчиков Apple». developer.apple.com .
  84. ^ Каннингем, Эндрю (7 октября 2019 г.). «macOS 10.15 Catalina: обзор Ars Technica». Ars Technica .
  85. ^ Axon, Samuel (6 июня 2018 г.). «Конец поддержки OpenGL, а также другие обновления, которыми Apple не поделилась на презентации». Ars Technica . Получено 19 октября 2020 г.
  86. ^ "Vulkan и более быстрый OpenGL ES на iOS и macOS". Molten . Получено 19 октября 2020 г. .
  87. ^ Авторы проекта ANGLE (14 октября 2020 г.). "google/angle: совместимая реализация OpenGL ES для Windows, Mac, Linux, iOS и Android". GitHub . Получено 17 декабря 2020 г. .
  88. ^ "Zink". Последняя документация библиотеки 3D-графики Mesa .
  89. ^ «Состояние Windows на Arm64: перспектива высокого уровня». Chips and Cheese . 13 марта 2022 г. Получено 23 октября 2023 г.
  90. ^ "Введение в OpenCL и OpenGL в DirectX". Collabora | Open Source Consulting . Получено 23 октября 2023 г.
  91. ^ "Глубокое погружение в OpenGL через слои DirectX". Collabora | Open Source Consulting . Получено 23 октября 2023 г.
  92. ^ Дингман, Хейден (3 марта 2015 г.). «Встречайте Vulkan — мощную, независимую от платформы игровую технологию, нацеленную на DirectX 12». PC World . Получено 3 марта 2015 г.
  93. Брайт, Питер (3 марта 2015 г.). «Khronos представляет Vulkan: OpenGL, созданный для современных систем». Ars Technica . Получено 3 марта 2015 г.
  94. ^ "Khronos объявляет о следующем поколении инициативы OpenGL". AnandTech . Получено 20 августа 2014 г. .
  95. ^ "OpenGL 4.5 выпущен, представлено следующее поколение OpenGL: кроссплатформенный убийца Mantle, конкурент DX12". 11 августа 2014 г. Получено 20 августа 2014 г.
  96. ^ "Khronos публикует слайды об OpenGL-Next". Phoronix . Получено 22 августа 2014 г. .

Дальнейшее чтение

  • Шрайнер, Дэйв; Селлерс, Грэм; и др. (30 марта 2013 г.). Руководство по программированию OpenGL: официальное руководство по изучению OpenGL . Версия 4.3 (8-е изд.). Addison-Wesley. ISBN 978-0-321-77303-6.
  • Селлерс, Грэм; Райт, Ричард С.; Хэмел, Николас (31 июля 2013 г.). OpenGL SuperBible: всеобъемлющее руководство и справочник (6-е изд.). Addison-Wesley. ISBN 978-0-321-90294-8.
  • Рост, Рэнди Дж. (30 июля 2009 г.). OpenGL Shading Language (3-е изд.). Addison-Wesley. ISBN 978-0-321-63763-5.
  • Лендьел, Эрик (2003). Руководство по расширениям OpenGL. Charles River Media. ISBN 1-58450-294-0.
  • OpenGL Architecture Review Board ; Шрайнер, Дэйв (2004). Справочное руководство OpenGL: официальный справочный документ по OpenGL . Версия 1.4. Addison-Wesley. ISBN 0-321-17383-X.
  • OpenGL Architecture Review Board ; Шрайнер, Дэйв; и др. (2006). OpenGL Programming Guide: The Official Guide to Learning OpenGL . Версия 2 (5-е изд.). Addison-Wesley. ISBN 0-321-33573-2.
  • Официальный сайт
  • Обзор OpenGL и вики OpenGL.org с дополнительной информацией о привязках языка OpenGL
  • Сайт OpenGL компании SGI
  • Группа компаний «Хронос»
Взято с "https://en.wikipedia.org/w/index.php?title=OpenGL&oldid=1272208557#OpenGL_1.0"