Что такое opengl и directx
DirectX против OpenGL: что лучше или кто победит?
Здравствуйте, дорогие посетители моего блога! Сегодня мы с вами окончательно выясним, что лучше — DirectX или OpenGL в играх и детально проведем небольшое сравнение. О том, что такое Vulkan RT и для чего он нужен, вы можете почитать здесь.
Выбираем между DirectX и OpenGL
Главное отличие между ними в том в том, что Директ имеет закрытый заточен под операционную систему Windows и в другой среде попросту не работает. OpenGL распространяется с открытым исходным кодом и подходит для любой платформы, которая может его поддерживать.
Это, например, Unix-системы, в том числе Android и iOS, которые сегодня являются весьма популярными игровыми платформами, а также ряд игровых консолей.
Любой энтузиаст может модифицировать эти библиотеки согласно собственным потребностям и использовать эти наработки при создании видеоигр.
Вне 3D графики вообще и видеоигр в частности ни DirectX, ни OpenGL не используются, так как не имеют необходимого инструментария для выполнения других задач.
Какой графический рендеринг лучше
Для игр под Windows поддержка OpenGL реализована слабо — список приложений, где можно активировать этот инструмент вместо DirectX, ограничивается парой десятков.
Самая известная и популярная из них — MOBA Dota 2. OpenGL любят инди-разработчики и добавляют его поддержку в свои проекты, часто криво и не доведя до ума.
DirectX — совсем другое дело. 9, 10 или 11 его версии скачивались отдельно, а вот 12 уже включена в базовый пакет Windows 10. На подавляющем количестве персональных компьютеров именно Виндовс и установлена в качестве операционной системы, а PC сегодня остается самой популярной игровой платформой.
Соответственно, для игр разработчики стараются максимально полно реализовать поддержку DirectX.
OpenGL, Vulkan RT и прочие подобные инструменты не составляют серьезной конкуренции и являются скорее экзотикой. Игры с их поддержкой не создаются массово в таком количестве, чтобы рассматривать это явление всерьез как достойное внимания.
Что касается производительности, то нужно рассматривать производительность конкретной игры. Да, некоторые видеоигры на OpenGL дают качество графики лучше, но это скорее исключение, чем правило. В основной массе тестов же DirectX обычно дает больший FPS при тех же настройках качества.
Что касается эмуляторов Андроид на Виндовс, например BlueStacks, Nox или LD Player, то тут ситуация немного другая. Так как напрямую Android не поддерживает DirectX и рассчитан на работу с OpenGL, взаимодействие РСМ и графических библиотек реализовано с помощью «костылей» и не всегда вменяемо. Тут, в первую очередь, нужно тестировать сам эмулятор.
Однако, имея некоторый опыт их использования, могу утверждать, что на OpenGL производительность почти всегда лучше.
Относительно холивара DirectX Vs OpenGL, а конкретнее, какой из инструментов победит, моё мнение следующее. Microsoft, который разрабатывает DirectX, будет позволять поддержку в играх сторонних библиотек ровно до тех пор, пока это будет выгодно и пока они не станут для него угрозой финансовых потерь.
Как только дело коснется прибыли, волшебным образом все прочие инструменты от конкурентов в среде Windows перестанут работать или будет работать неправильно. Как фактический монополист на рынке операционных систем компания может себе такое позволить.
Также советую почитать «Как решить проблему, если видеокартой не поддерживается DirectX 11 или 12». Буду признателен всем, кто расшарит этот пост в любой социальной сети. До скорой встречи!
OpenGL и DirectX: взгляд изнутри
Авторы: А. Игнатенко
Источник: Алексей Игнатенко. OpenGL и DirectX: взгляд изнутри. Компьютерная графика и мультимедиа. Выпуск №2(1)/2004. http://cgm.computergraphics.ru/content/view/55
Аннотация
Статья посвящена обзору двух графических библиотек.
Как это было
OpenGL
На данный момент OpenGL прошла путь от версии 1.0 до версии 1.4 (и это за десять лет!). Версия 2.0, обещающая революционные изменения, находится в процессе стандартизации.
DirectX
К моменту выхода Windows 95 большинство игр по-прежнему делалось под MS-DOS. Windows в те времена не предоставляла возможностей для программирования игр. Многочисленные уровни абстракции (введенные в целях совместимости и универсальности) делали доступ к звуковому и видеооборудованию весьма медленным и неприменимым для игровых приложений. Поэтому было решено разработать библиотеку, предоставляющую возможность прямого доступа к аппаратуре. Это позволило бы играм работать на приемлемой скорости (и увеличило бы продажи Windows 95).
Вместо создания собственного API Microsoft использовала разработку небольшой компании RenderMorphic. Говорят, что изначально API был выполнен авторами в рамках студенческого задания и в конечном итоге провалился на экзамене. Тем не менее Microsoft интегрировала эту библиотеку в свой Game SDK. Корпорация подавала это как идеальное решение для программирования игр.
Однако то, что позже стало называться DirectX 1.0., не приобрело широкой популярности. Библиотека оказалась медленной, с большим количеством ошибок, с неудобной архитектурой и, кроме того, чрезмерно сложной.
Длительное время DirectX рассматривался как неудачная альтернатива OpenGL. Однако последние улучшения в API сделали эту библиотеку весьма мощной и стабильной. Поскольку она разрабатывается авторами ОС, можно быть уверенным, что скорость ее работы с графикой оптимальна. Многие считают, что именно DirectX, а не OpenGL, становится стандартом для программирования графики. Microsoft постоянно работает в тесном контакте с разработчиками «железа», обеспечивая поддержку новых возможностей аппаратуры. Более того, DirectX иногда предлагает различные возможности раньше, чем на рынке появляются видеокарты с их аппаратной реализацией.
Архитектура
Структура DirectX очень сильно отличается от OpenGL. DirectX основан на модели COM (Component Object Model). Тем, кто знает, что это такое, сама аббревиатура уже скажет многое. Для остальных заметим лишь, что в отличие от простого вызова функций эта модель предполагает выполнение некоторых дополнительных действий, связанных с компонентной архитектурой DirectX. Такая архитектура имеет как достоинства, так и недостатки. В частности, код, в котором используются вызовы DirectX, обычно не является идеалом легко читаемого и понимаемого. Поэтому даже рисование простого треугольника требует огромного объема кода. Разработчики Microsoft, конечно, понимают это, поэтому для упрощения программирования ими создана отдельная библиотека DirectX Common Files, которая скрывает часто используемый код.
Хотя принципиально архитектура DirectX сильно отличается от OpenGL, в их развитии все более заметны тенденции к сближению. Такая ситуация возникает прежде всего потому, что обе библиотеки предназначены для эффективной работы с аппаратурой, и чем ближе их структура будет к «железу», тем меньше времени будет уходить на преобразование команд пользователя в команды аппаратуры.
Производительность
Иначе и быть не может, потому что сейчас большинство функций реализованы напрямую через аппаратные ускорители. Естественно, производительность может различаться в зависимости от степени оптимизации программного кода и используемой для тестирования аппаратной платформы. Оптимизация аппаратных драйверов тоже может внести свой вклад в преимущество той или иной библиотеки. Такие вещи достаточно тяжело предвидеть, поэтому хорошие игровые «движки» часто имеют две версии: под OpenGL и под DirectX. Это не очень-то хорошо как для производителя, так и для пользователя (возрастает стоимость разработки игр, появляются ошибки и т.п.), но таковы реалии современного рынка видеоигр.
Сравнение
Начнем с функций. Неоднократно приходилось слышать заявления типа: «DirectX 9 поддерживает пиксельные шейдеры, а OpenGL не поддерживает, поэтому все игры должны быть написаны под DirectX!» Такое мнение неверно только отчасти. Действительно, если посмотреть на стандарт OpenGL последней версии (1.4), в нем ни слова о шейдерах.
Изображение, получаемое в реальном времени на современном аппаратном ускорителе. Качество и скорость рисования не зависят от применяемой библиотеки: DirectX и OpenGL обладают схожими возможностями.
Много лет назад OpenGL разрабатывалась как библиотека, которая оставалась бы актуальной в далеком будущем. К сожалению, это будущее пришло и благополучно ушло в прошлое. При этом ARB остается весьма неповоротливым, и надеяться на оперативное включение новых опций не позволяет. Для решения этой проблемы в OpenGL существует механизм расширений, с помощью которого можно использовать различные функции, не входящие в базовую спецификацию, а поддерживаемые только реализацией OpenGL для конкретной видеокарты.
DirectX очень удобен для любителей объектно-ориентированного программирования и COM в частности. COM в DirectX используется для внесения изменений в библиотеку (в новых версиях) без изменения существующего кода. В OpenGL такого нет, но это вряд ли можно назвать серьезным недостатком.
OpenGL идеален для визуализации результатов научных исследований.
Серьезным достоинством OpenGL является прежде всего то, что это «открытый стандарт». Любая компания, имеющая аппаратную платформу, может купить лицензию у SGI и затем сделать собственную реализацию OpenGL. Изменения в OpenGL предлагаются, обсуждаются и утверждаются представителями различных компаний. Что касается DirectX, то здесь ситуация прямо противоположная. Только Microsoft может вносить какие-либо изменения в библиотеку. Иначе говоря, именно Microsoft в конечном итоге определяет все пути развития библиотеки, и если путь был выбран неверно, это может быть исправлено только в новой версии.
Итак, достоинства библиотек становятся наиболее очевидны при их использовании в разных (но в то же время пересекающихся) прикладных областях. DirectX идеален для профессиональной разработки игр и мультимедийных приложений на платформе Windows. OpenGL используется на высокопроизводительных рабочих станциях, в научной сфере, в образовании, а также в любых проектах, где требуется переносимость приложений на различные программные или аппаратные платформы. Кроме того, OpenGL применяется и для написания игровых «движков», правда, в последнее время на этом поприще его теснит DirectX.
Что дальше?
Начиная с восьмой версии, DirectX имеет встроенную поддержку программируемых шейдеров. В девятой версии эта поддержка была значительно улучшена и расширена. И в дальнейшем развитие DirectX наверняка будет связано с постепенным улучшением гибкости и удобства использования программируемого «железа». Каких-либо радикальных перемен пока не ожидается. Например, вряд ли стоит надеяться, что Microsoft сделает реализации DirectX на других платформах.
В OpenGL поддержка программируемой графической аппаратуры была добавлена на уровне расширений. Однако архитектура библиотеки изначально не была рассчитана на использование подобных конструкций, поэтому эти расширения выглядят инородно.
Игровые приложения чаще используют DirectX. Эта библиотека предоставляет больше возможностей для тонкой оптимизации и управления аппаратурой, а также, в отличие от OpenGL, содержит компоненты для работы с видео, звуком и устройствами ввода.
Чем все это грозит простому пользователю? В первую очередь, улучшением качества картинки в играх и других графических приложениях. Развитие программируемых графических процессоров стимулирует фантазию дизайнеров и разработчиков, что приведет к появлению различных оригинальных спецэффектов. Можно ожидать повсеместного распространения высококачественных теней, использования различных отражающих поверхностей, процедурных текстур, деформируемой геометрии и так далее. Представляете, точным выстрелом разбить стакан вина на столе, приблизиться и увидеть свое отражение в каждой капле? И игру света от осколков стекла? Все это будет, и довольно скоро. Не сомневайтесь.
Что лучше: DirectX или OpenGL
Ранее в интернете активно велись споры, что лучше: DirectX или OpenGL. Сейчас данная тема уже не такая актуальная, но все же нередко пользователи ей интересуются. Мы решили собрать всю достоверную информацию и опубликовать ее в виде сравнения обоих продуктов.
Сравнение
Стоит отметить, что раньше на свет появился именно OpenGL. Кроме того, он был установлен на ранних версиях Mac OS и Linux. Пресловутая Windows в то время была еще в состоянии эмбриона и ни о каком DirectX речи даже не шло.
Однако со временем компания Microsoft выпустила собственный графический API, который стал широко известен. Его популярность связана главным образом с тем, что он используется в самой популярной ОС.
А еще именно DirectX предпочитают многие разработчики игр. Справедливости ради стоит отметить, что некоторые из них добавляют в свои творения также OpenGL и даже Vulkan. Но таких игрушек катастрофически мало.
Так чем же так хорош API от Microsoft? Мы попробуем разобраться в данном вопросе. Но сначала рассмотрим ключевые особенности обоих проектов только потом вынесем вердикт по части их «крутости».
Поддержка расширений
Естественно, у DirectX такого и близко нет, так как это проприетарный продукт и изменения в него вносятся исключительно компанией Microsoft. Так что если производитель видеокарты и добавил какую-нибудь интересную опцию в драйвер, то в этом API она появится нескоро.
А с какой периодичностью выходят обновления для Директ Икс и без того всем известно. В лучшем случае – раз в три года. Это означает, что пользователи не увидят новых фишек до тех пор, пока ребята из Microsoft не соизволят выпустить новую версию.
С OpenGL ситуация другая. Это свободный АПИ, распространяющийся под лицензией GNU/GPL и правки в него вносятся всем сообществом. В которое, кстати, входят и ключевые производители видеокарт. Корпорации AMD и NVIDIA там точно есть.
Поэтому им не нужно кого-то ждать для того, чтобы добавить поддержку нового функционала в графический API. Это значит, что ОпенГЛ может использовать новый функционал сразу после добавления его в драйверы. И это первое преимущество свободной технологии.
Кроссплатформенность
И снова DirectX становится аутсайдером. Данный API предназначен для использования исключительно на операционных системах Windows. При этом на XP используется всего лишь версия 9.0с. А вот 10 и тем более 11 на нее нет и никогда уже не будет.
Помимо Windows данный API еще можно увидеть на игровой приставке XBOX One (и разных ее ревизий). Но эта консоль – детище компании Microsoft. Поэтому ничего удивительного здесь нет. Вы не поверите, но версий DirectX нет даже для культовой Mac OS! И о чем думает компания из Редмонда?
Совсем не то с OpenGL. Этот API используется практически во всех известных операционных системах. Он без проблем работает на Windows, Linux, Mac OS и даже FreeBSD. Хотя последняя и вовсе не предназначена для «графических излишеств».
Такая кроссплатформенность сделала свое дело. К примеру, компания Blizzard выпускает свой культовый World of Warcraft для Mac OS исключительно под Опен ГЛ. Да и на PC-версии игра способна работать как под DirectX, так и под свободным API.
Работа в профессиональных программах
И здесь побеждает ОпенГЛ. Именно этот АПИ признается профессионалами. И все потому, что он поддерживает все последние фишки видеокарт, прописанные в драйверах. А это значит, что разработчики получат новые возможности.
И нова стоит поговорить о простоте данного API. Работать с ним гораздо проще, так как здесь упорядоченный код и масштабные комментарии к нему. Именно поэтому во многих ВУЗах начинают профессиональное обучение с OpenGL.
А вот с DirectX все намного хуже. Компания Microsoft по своему обыкновению наворотила в коде таких громоздких конструкций, что с ними разберутся только профессионалы высшей пробы. Простым смертным сие не дано.
Единственное преимущество ДиректХ в этом плане – богатый инструментарий SDK. Он несколько облегчает разработку. Но даже с SDK она далеко не всем по плечу. Да и для нужд профессионалов этот API никак не подходит. Слишком он тугой на обновления.
Производительность в играх
Вот здесь свободный API сильно отстает от проприетарного. Складывается такое впечатление, что DirectX даже специально создан для игр. Ведь он показывает впечатляющие результаты даже несмотря на все фишки свободного API.
К примеру, в игре The Talos Principle (не первой свежести игрушка) на видеокарте AMD Radeon R9 Fury X при разрешении 4К и ультра настройках графики получилось 643 кадра в секунду. Такой показатель FPS избыточен.
А вот OpenGL в таких же условиях и с такой же видеокартой показал намного более скромный результат. Количество кадров в секунду едва достигло 35. Это приемлемый ФПС для неискушенного геймера, но с предыдущими цифрами его не сравнить. Аналогичная ситуация и с графическими адаптерами от Nvidia.
К сожалению, свободный API оказался совершенно не готов к такому «сражение». И с чем это связано – непонятно. Вроде бы разработчики оперативно добавляют в него новые опции. И драйвера (даже самые новые) его поддерживают.
Вердикт
Так что же все-таки лучше? Директ Х или Опен ГЛ? Все зависит от того, для чего вы будете использовать графический API. Сфера применения многое значит. Ведь в профессиональной области первый продукт значительно отстает от второго.
Но среднестатистического пользователя всякий профессиональный софт не интересует. Ему важно, чтобы игры шли нормально. А наиболее высокую производительность в игрушках показал именно DirectX. Его и будут использовать миллионы.
В выборе API также огромную роль играет ОС. К примеру, та же Windows нормально не поддерживает OpenGL. Его использование возможно только при установке драйверов от производителя. А кому охота плясать с бубнами?
Вот и получается, что менее продвинутый DirectX является наиболее предпочитаемым API для тех, кто использует исключительно Windows и любит игры. А ведь таких пользователей большинство. Потому и популярность этого API зашкаливает.
Заключение
А теперь подведем итоги. Мы попытались беспристрастно выбрать лучший графический API из двух. По всем показателям получается, что в техническом плане лучше выглядит продукт, распространяемый под лицензией GNU/GPL.
И тем не менее, победителем вышел продукт от Microsoft. Потому, что он гораздо лучше оптимизирован для игр и самой операционной системы Windows. Даже несмотря на то, что в техническом плане он существенно уступает.
Сравнение OpenGL и Direct3D
Очень часто встречаются различные заблуждения по поводу этих двух API.
Я попытался изложить в этой статье основные факты, которые следует знать как разработчикам, так и конечным пользователям.
Так как тема очень холиварная, я старался придерживаться максимально нейтрального тона.
Взгляд с высоты птичьего полёта
Оба API предоставляют доступ к функциям аппаратного ускорения 3D-графики.
Direct3D — проприетарная разработка Microsoft, созданная специально для Windows. В настоящее время используется так же и на Microsoft Xbox. На других платформах недоступен (если не брать в учёт эмуляцию API, предоставляемую Wine, а также виртуализацию).
OpenGL — открытый стандарт, разрабатываемый некоммерческой организацией Khronos Group при участии сообщества. Все крупные производители GPU (nVidia, AMD, Intel), так или иначе, влияли на OpenGL. В отличие от Direct3D, доступен на очень большом количестве платформ. В частности, OpenGL является основным API для взаимодействия с GPU в Linux и Mac OS.
«Внешние» технические различия API
Direct3D основан на технологии COM. COM — это, по сути, стандарт бинарного представления компонентов. Как известно, классы на чистом C++ не могут быть использованы из других языков программирования, так как они не имеют стандартизованного бинарного представления. В частности, каждый компилятор использует свой собственный метод декорирования имён. COM же позволяет работать с объектно-ориентированной концепцией из любого языка, его поддерживающего. COM — это тоже Windows-specific технология (использует такие специфичные для Windows вещи, как реестр).
В приложении на Direct3D используются указатели на интерфейсы объектов. Работа с объектом осуществляется путём вызова методов его интерфейса. Например, интерфейс так называемого device-а (device в Direct3D — это контекст выполнения для конкретного окна), имеет название (примеры для Direct3D 9) IDirect3DDevice9, для объекта текстуры — IDirect3DTexture9, и т.д. Создание объектов происходит как вызовы методов интерфейса IDirect3DDevice9, например, для текстуры это будет IDirect3DDevice9::CreateTexture.
В Direct3D 10 произошло значительное количество изменений. Direct3D 10 не является обратно совместимым с Direct3D 9. Т.е. чтобы перенести программу на новый API потребуется переписать весь код, относящийся к рендерингу. Подробнее о Direct3D 10 ниже.
OpenGL использует обычные функции языка C. Для них существует стандартизированный ABI, а это значит, что OpenGL может быть использован из любого языка, который поддерживает вызов функций native библиотек (т.е., практически говоря, из любого вообще).
В OpenGL используется так называемая машина состояний (конечный автомат). Результат вызовов функций OpenGL зависит от внутреннего состояния, и может изменять его. В OpenGL, чтобы получить доступ к конкретному объекту (например, текстуре), нужно сначала выбрать его в качестве текущего функцией glBindTexture, а затем уже можно влиять на объект, например, задание содержимого текстуры осуществляется вызовом glTexImage2D.
Аналогом концепции device-а в Direct3D здесь является контекст. Контекст OpenGL привязан к конкретному окну, так же, как и device в Direct3D.
Общим для двух API является то, что обе не предоставляют чего либо за пределами работы с графикой. А именно, нет функций ни для создания окна, ни для работы с вводом с клавиатуры/мыши, ни для работы со звуком (здесь я не затрагиваю другие части DirectX, такие как DirectInput и DirectSound). Т.е. они не являются библиотеками высокого уровня.
В самой упрощённой форме можно сказать так: OpenGL и Direct3D позволяют рисовать треугольники. И всё. Суть в том, что треугольники можно рисовать очень по-разному (текстуры, освещение, преобразования, и т.д.).
Самое важное различие
Имя ему — расширения (extensions).
Direct3D по сути фиксирован в пределах одной мажорной версии. Какие-либо изменения/дополнения происходят только при выпуске следующей версии.
В OpenGL реально доступное API определяется производителем GPU. Реализация OpenGL позволяет определять расширения к основной спецификации. Приложение может получить список поддерживаемых расширений во время выполнения, и проверить на доступность те, которые оно желает использовать.
На самом деле практически весь функционал OpenGL — это расширения. Развитие OpenGL идёт так: появляется новая фишка, производитель реализовывает её в своём драйвере и документирует доступное расширение. Приложения могут использовать новые функции прямо сейчас, не дожидаясь включения в официальную спецификацию. Если это расширение специфично для конкретного производителя, то в названии оно несёт его имя (например, вот так: GL_NV_point_sprite, где NV — значит nVidia). Если расширение реализовано многими вендорами, то в названии используется EXT (например, GL_EXT_draw_range_elements).
Со временем, если расширение широко используется, оно стандартизируется в ARB, и после этого содержит в имени ARB (например, GL_ARB_vertex_buffer_object). Такое расширение имеет официальный статус.
Самые важные расширения со временем становятся частью основной спецификации. Каждая новая версия OpenGL — это по сути старая версия+несколько новых интегрированных расширений. При этом новые функции продолжают быть доступными как расширения. Т.е. на самом деле с точки зрения программы может быть вообще всё равно, какая версия OpenGL. Главное — какие доступны расширения. Версия OpenGL — это просто способ указать, какой набор расширений гарантированно поддерживается.
Что нового в Direct3D 10/11 и OpenGL 3.x
Microsoft сделали радикальную переработку API в Direct3D 10. Сейчас оно имеет более унифицированный и современный вид. Были выброшены некоторые устаревшие вещи, такие как fixed function rendering (без использования шейдеров). Ещё был выполнен переход к новой модели работы драйвера. В частности, реализация Direct3D теперь может иметь не только kernel-space часть, а и user-space. Это позволяет экономить время на переключения user-space/kernel-space. Однако, из-за новой модели драйвера, Direct3D 10 и выше недоступен на Windows XP. Учитывая всё ещё большую популярность Windows XP, это довольно грустно.
Реализация OpenGL изначально была разделена на user-space и kernel-space части, так что там такой проблемы и не было. Ещё различие в том, что до сих пор не вносилось изменений в OpenGL API, которые не были бы обратно совместимы. Каждое нововведение — это расширение.
Функционал, появившийся в Direct3D 10, например, геометрические шейдеры, доступен в OpenGL на любой платформе через расширение, или, начиная с OpenGL 3.2, как часть основной спецификации. Стоит особо подчеркнуть, это важно, функционал Direct3D 10/11 доступен в OpenGL на любой платформе, в том числе и Windows XP. Таким образом у многих сложилось впечатление, что Direct3D 10 не доступен на Windows XP исключительно по политическим причинам, а не из-за каких-то реальных технических проблем. Впрочем, я не могу судить здесь, сохраняя нейтральный тон, о том, были ли действительно такие проблемы при введении новой модели видео-драйверов.
Теперь о нововведениях в OpenGL 3.x. Начиная с OpenGL 3.0 появилась так называемая deprecation model. Часть старой функциональности, относящаяся к fixed function rendering, а также к рендерингу, основанному на glBegin/glEnd, и многие другие устаревшие и неактуальные вещи, были объявлены как deprecated, и были впоследствии удалены из основной спецификации OpenGL 3.1. Это позволяет сохранять основную спецификацию в актуальной и современной форме.
Казалось бы, это должно сломать совместимость со старыми программами. Ведь раньше, когда программа создавала контекст OpenGL, она просто получала контекст версии максимально доступной. Это было ОК, т.к. новые версии всегда являлись надстройками над предыдущими. Чтобы избежать нарушений совместимости, программы, которые хотят получить контект OpenGL 3.x должны использовать новый метод создания контекста, который позволяет указать, какую именно версию OpenGL нужно получить.
Но, как следует из того, что уже было написано раньше про расширения, и это важно, функционал OpenGL 3.x можно получить через расширения, не создавая контекст новым методом. Т.е. OpenGL 1.1 + расширения = OpenGL 3.2! Таким образом, сохраняется полная обратная совместимость. Например, геометрические шейдеры — это расширение GL_ARB_geometry_shader4.
Распространённые заблуждения
OpenGL отстаёт от Direct3D, и вообще, судя по таким вялым изменениям в спецификации, наверное уже совсем мёртв.
Собственно, причина такого заблуждения — это незнание о расширениях. Вообще говоря, OpenGL может и часто опережает (!) Direct3D в плане инноваций, т.к. производитель может добавить расширение к OpenGL, не дожидаясь никого, в то время как в Direct3D изменения может внести только Microsoft.
OpenGL — это для программ профессиональной графики, а Direct3D — это для игр.
Это заблуждение имеет историческую причину. OpenGL исходно разрабатывался как библиотека 3D графики, которая МОЖЕТ, но НЕ ОБЯЗАНА ускоряться аппаратно. Это также объясняет наличие некоторых функций, например рендеринг стерео-изображений, которые не нужны играм. Direct3D же разрабатывался гораздо позже, сразу с расчётом на ускорение на GPU. В момент появления многих пакетов профессиональной работы с графикой Direct3D просто не было.
Интересные нюансы
Microsoft поставляет вместе с Windows драйверы без поддержки OpenGL. OpenGL будет рендерить без ускорения, или эмулироваться через DirectX. Так что, если нужна поддержка OpenGL под Windows, нужно ставить драйвер с сайта производителя. Причины для такого неприятия OpenGL, скорее всего, опять чисто политические.
Так что же делать, как жить?
Примечание: А вот эта часть носит весьма субъективный характер.
Если Вы — разработчик, и решаете, какое API использовать, то задумайтесь над следующим:
За OpenGL — массовая кроссплатформенность, в частности, доступность всех новых функций и на Windows XP, где Direct3D 10/11 нет, и никогда не будет.
Против OpenGL — драйвера в Windows из коробки не имеют поддержки OpenGL, так что ставить их нужно с сайта производителя.
Если Вы — новичок в разработке 3D-приложений, и желаете освоить эту область, то я бы рекомендовал сделать так: сначала разобраться с Direct3D (причина тому проста — Microsoft предоставляет очень качественный SDK), а затем разобраться с OpenGL (это будет очень просто после Direct3D). К сожалению, такой вещи, как SDK, для OpenGL нет. Поэтому осваивать с нуля будет сложнее.