Сравнение OpenGL и Direct3D - Comparison of OpenGL and Direct3D
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
Direct3D и OpenGL конкурируют интерфейсы прикладного программирования (API), которые можно использовать в приложениях для рендеринга 2D и 3D компьютерная графика. По состоянию на 2005 год[Обновить], графические процессоры (GPU) почти всегда реализуют одну версию обоих этих API. Примеры включают: DirectX 9 и OpenGL 2 около 2004 г .; DirectX 10 и OpenGL 3 примерно 2008 г .; и совсем недавно DirectX 11 и OpenGL 4 около 2011 года. Графические процессоры, поддерживающие более свежие версии стандартов, обратно совместимы с приложениями, использующими старые стандарты; например, можно запускать старые игры с DirectX 9 на более позднем графическом процессоре, сертифицированном для DirectX 11.
Доступность
Direct3D разработка приложений нацелена на Майкрософт Виндоус Платформа.
OpenGL API - это открытый стандарт, что означает, что производители оборудования и разработчики операционных систем могут свободно создавать реализацию OpenGL как часть своей системы. Реализации OpenGL существуют для самых разных платформ. В частности, OpenGL является доминирующим графическим API Unix-подобных компьютерных систем.
С точки зрения разработчика приложений Direct3D и OpenGL одинаково открыты; полная документация и необходимые инструменты разработки доступны без ограничений.
API | Рабочий стол поддерживать | Встроенная система поддерживать | Лицензия |
---|---|---|---|
Direct3D | Майкрософт Виндоус, Xbox[нужна цитата ] | Windows Embedded,[1] Windows CE (через Direct3D Mobile )[нужна цитата ] | Проприетарный[2] |
OpenGL | Кроссплатформенность[3] | Кроссплатформенность через OpenGL ES[4] | Открытый стандарт,[3] некоторые функции запатентованы |
Более подробно, это два API компьютерной графики:
- Direct3D это проприетарный[2][5] API к Microsoft[6] который предоставляет функции для визуализации двухмерной (2D) и трехмерной (3D) графики и использует аппаратное ускорение, если оно доступно на видеокарте. Он был разработан Корпорация Майкрософт для использования на Windows Платформа.
- OpenGL является открытый стандарт API[7] который предоставляет множество функций для рендеринга 2D и 3D графики и доступен на большинстве современных операционные системы в том числе, но не ограничиваются Windows, macOS, и Linux.[8]
Обратите внимание, что многие важные OpenGL расширения и методы, хотя и задокументированы, также запатентованы, что создает серьезные юридические проблемы для их реализации (см. проблемы с Меса[9]).
И OpenGL, и Direct3D реализованы на дисплее. драйвер устройства. Однако существенное отличие состоит в том, что Direct3D реализует API в общей среде выполнения (предоставляемой Microsoft), которая, в свою очередь, обращается к низкоуровневому интерфейс драйвера устройства (DDI). С OpenGL каждый поставщик реализует полный API в драйвере. Это означает, что некоторые функции API могут немного отличаться от одного поставщика к другому. Компиляторы шейдеров GLSL от разных производителей также демонстрируют несколько разное поведение. Ниже приводится сравнение двух API, структурированных вокруг различных соображений, наиболее важных для разработки игр.
Портативность
Собственный Direct3D официально реализован только в операционных системах семейства Microsoft Windows, включая встроенные версии, используемые в Xbox семья игровые приставки и Sega с Dreamcast. Некоторые в основном функциональные реализации Direct3D API были сделаны третьими сторонами, такими как Вино, проект по переносу распространенных Windows API на Unix-подобный операционные системы и Cedega, фирменная вилка Wine. Однако этому процессу все больше препятствуют из-за взаимозависимости DirectX на многие другие проприетарные компоненты Windows, и поскольку проприетарный характер Direct3D требует сложного процесса разобрать механизм с целью понять, как это работает.
OpenGL имеет реализации, доступные на многих платформах, включая Microsoft Windows, Unix -системы, такие как Mac OS X, Linux. Nintendo и Sony разработали собственные библиотеки, похожие, но не идентичные OpenGL.[нужна цитата ] Подмножество OpenGL было выбрано в качестве основной графической библиотеки для Android, Ежевика, iOS, и Symbian в OpenGL ES форма.
Драйвер Microsoft OpenGL обеспечивает аппаратное ускорение в Windows Vista; поддержка была прекращена в Windows XP,[нужна цитата ] вскоре после того, как они не смогли доставить Графический API по Фаренгейту низкоуровневая поддержка слияния OpenGL и Direct3D в конце 1990-х. Аппаратное ускорение OpenGL в Windows достигается при первой установке пользователями устанавливаемые клиентские драйверы (ICD) разработан GPU производители.[10] Эти ICD практически во всех случаях поставляются в комплекте со стандартным пакетом загрузки драйверов из поставщик оборудования (IHV), поэтому для обеспечения аппаратной поддержки OpenGL достаточно установить последние графические драйверы.[11]
Совсем недавно Google Почти нативный графический движок (УГОЛ ) проект предоставляет средства для преобразования OpenGL ES 2.0 приложение обращается к DirectX 9.[12] Это сделано для того, чтобы WebGL (вариант подмножества OpenGL для Интернета) может работать в общей среде выполнения Direct3D, а это означает, что между поставщиками будет меньше различий.
Легкость использования
Direct3D
Первая версия Direct3D в 1996 году вызвала широкую критику, потому что даже простые операции, такие как изменение состояния, требовали создания и отправки объектов, называемых выполнить буферы. Напротив, в OpenGL большинство изменений состояния можно выполнить с помощью одного вызова функции. Модель Direct3D разочаровала многих программистов. Известная жалоба поступила от известного разработчика игр. Джон Д. Кармак в его .строить планы
файл, в котором он призвал Microsoft отказаться от Direct3D в пользу OpenGL.[13] Крис Хеккер сделал аналогичный запрос в «Открытом письме в Microsoft» в выпуске журнала Game Developer Magazine за апрель-май 1997 года.[14]
Версия 5 (вторая версия, названная так, чтобы отразить ее выпуск как часть DirectX 5) заменила буферы выполнения новым API DrawPrimitive, но все еще считалась громоздкой. В «Открытом письме в Microsoft» Криса Хеккера DrawPrimitive назван «незрелым и плохо спроектированным клоном OpenGL, в котором отсутствуют некоторые архитектурные решения, которые делают OpenGL быстрым».[14]
Несмотря на разногласия, Microsoft продолжала развивать API. Подробная история выпусков и добавленных функций представлена на сайте Microsoft. Direct3D веб-страница.
Некоторые бывшие критики Direct3D признают, что теперь Direct3D не хуже, если не лучше OpenGL, по возможностям и простоте использования. В январе 2007 года Джон Кармак сказал, что «… DX9 действительно неплохой API уровень. Даже с Direct3D сторона вещей, где я знаю, что у меня есть долгая история людей, думающих, что я против этого. Microsoft проделала очень, очень хорошую работу, разумно развивая его на каждом этапе - они не беспокоятся о нарушении обратной совместимости - и это довольно чистый API. Мне особенно нравится работа, которую я делаю над 360, и это, вероятно, лучший графический API, насколько это разумно разработанная вещь, с которой я работал ».
Некоторые конструктивные особенности Direct3D остались неизменными по сравнению с первой версией, в первую очередь его зависимость от Microsoft. Компонентная объектная модель (COM). Одним из преимуществ использования COM является то, что API можно использовать на любом языке, поддерживающем COM, в частности Object Pascal (Delphi ) и Microsoft Visual C ++, C #, и Visual Basic .NET.
OpenGL
OpenGL - это спецификация, реализованная в язык программирования C, хотя его можно использовать и на других языках. Он построен на концепции Государственный аппарат. Как API, OpenGL не зависит ни от одной функции языка программирования, и его можно сделать вызываемым практически из любого языка с соответствующими привязками. Такие привязки существуют для большинства современных языков программирования.[15]
Сравнение
В общем, Direct3D предназначен для виртуализации аппаратных 3D-интерфейсов. Direct3D освобождает программиста игр от необходимости размещать графическое оборудование. OpenGL, с другой стороны, разработан как система 3D-рендеринга с аппаратным ускорением, которую можно эмулировать в программном обеспечении. Эти два API-интерфейса в основном разработаны с учетом двух разных способов мышления.
Таким образом, существуют функциональные различия в том, как работают два API. Одно функциональное различие между API-интерфейсами заключается в том, как они управляют аппаратными ресурсами. Direct3D ожидает, что приложение сделает это, OpenGL заставляет реализацию делать это. Этот компромисс для OpenGL снижает сложность разработки для API, в то же время увеличивая сложность создания реализации (или драйвера), которая хорошо работает. Используя Direct3D, разработчик должен управлять аппаратными ресурсами независимо; однако реализация проще, и разработчики имеют возможность распределять ресурсы наиболее эффективным способом для своего приложения.
Примерно до 2005 года еще одним функциональным различием между API-интерфейсами был способ обработки текстур. Метод Direct3D (SetRenderTarget ()
) удобно, тогда как предыдущие версии OpenGL требовали манипулирования пиксельными буферами (P-буферами). Это было громоздко и рискованно: если кодовый путь, используемый в программе, отличался от того, который предполагал производитель драйвера, код возвращался к программному рендерингу, что приводило к существенному падению производительности. Однако широкая поддержка объекты кадрового буфера расширение, которое предоставляет OpenGL-эквивалент метода Direct3D, успешно устраняет этот недостаток, а цель рендеринга Функция OpenGL привела его к уровню Direct3D в этом аспекте.
За исключением нескольких незначительных функциональных различий, которые в основном решались на протяжении многих лет, два API обеспечивают почти одинаковый уровень функций. Производители аппаратного и программного обеспечения обычно быстро реагируют на изменения в DirectX, например, пиксельный процессор и шейдер требования в DirectX 9 к потоковые процессоры в DirectX 10, чтобы мозаика в DirectX 11. Напротив, новые функции в OpenGL обычно сначала внедряются поставщиками, а затем задним числом применяются к стандарту.
Спектакль
Вскоре после того, как Direct3D и OpenGL стали жизнеспособными графическими библиотеками (около 1995 г.), Microsoft и SGI занимается тем, что было названо "API Войны ». В основном споры вращались вокруг того, какой API предлагает лучшую производительность. Этот вопрос был актуален из-за очень высокой стоимости выделенные графические процессоры в то время, что означало, что потребительский рынок использовал программные рендеры реализован Microsoft как для Direct3D, так и для OpenGL.
Ранние дебаты
ДОС программное обеспечение для бизнеса, такое как AutoCAD и игры DOS, такие как id Программное обеспечение с Землетрясение изначально требовалось оптимизировать для работы на множестве различных графических чипсетов. Когда производители оборудования, такие как 3Dlabs (член Совет по обзору архитектуры OpenGL ) сделали совместимые с OpenGL графические ускорители (например, чип GLint), такие разработчики, как Джон Кармак из id Software, оптимизировали свои продукты для OpenGL. В качестве многозадачных пользовательских сред, таких как Windows и X Window System (X11) на Unix-подобный системы стали преобладающими, актуальность этого оборудования исчезла.
На основе внутреннего сравнения производительности этих двух программных библиотек Microsoft продвигала Direct3D как более быстрый. Дефицит производительности был вызван строгой спецификацией и соответствием, требуемым OpenGL. Это восприятие было изменено в 1996 г. Специальной группой по ГРАФИКЕ и интерактивным методам (СИГГРАФ ) конференция. В это время, Силиконовая Графика (SGI) бросили вызов Microsoft с их собственной оптимизированной программной реализацией OpenGL для Windows под названием CosmoGL которые в различных демонстрациях соответствовали или превосходили производительность Direct3D. Для SGI это была критическая веха, поскольку она показала, что низкая производительность программного рендеринга OpenGL связана с эталонной реализацией OpenGL от Microsoft, а не из-за предполагаемых недостатков дизайна в OpenGL.
Напротив, программный рендеринг с помощью 3D API не имел большого значения как для Direct3D, так и для OpenGL приложений. Не многие приложения DirectX использовали программный рендеринг Direct3D, предпочитая выполнять свой собственный программный рендеринг с использованием DirectDraw средства доступа к оборудованию дисплея. Что касается приложений OpenGL, ожидалась аппаратная поддержка, а оборудование было настолько быстрым, что отказ от программного обеспечения с помощью приложения OpenGL стал грубым сюрпризом для разработчика OpenGL.
В любом случае, к тому времени, когда SGI продемонстрировала, что производительность программного рендеринга OpenGL может быть конкурентоспособна с производительностью Direct3D, программный рендеринг быстро терял актуальность из-за широкой доступности недорогого оборудования для 3D-графики. К 1998 году даже S3 ViRGE графический ускоритель был существенно быстрее самого быстрого Pentium II работает Direct3D MMX растеризатор.
Маршаллинг
Более существенная и современная разница в производительности возникает из-за структуры аппаратных драйверов, предоставляемых разработчиками оборудования. Под DirectX, независимый поставщик оборудования (IHV) драйверы - это драйверы режима ядра, устанавливаемые в операционную систему. Часть API пользовательского режима обрабатывается средой выполнения DirectX, предоставляемой Microsoft. Однако в OpenGL драйвер IHV разделен на две части: часть пользовательского режима, которая реализует API OpenGL, и драйвер режима ядра, который вызывается частью пользовательского режима.
Это проблема, потому что для вызова операций режима ядра из пользовательского режима требуется выполнение системный вызов (т.е. перевод процессора в режим ядра). Это медленная операция, требующая порядка микросекунды завершить.[16] В это время ЦП не может выполнять никаких операций. Таким образом, минимизация количества повторений этой операции переключения улучшит производительность. Например, если буфер команд графического процессора заполнен данными рендеринга, API может просто сохранить запрошенный вызов рендеринга во временном буфере, а когда буфер команд почти пуст, он может выполнить переключение в режим ядра и добавить набор сохраненных команд в пакете. Это называется сортировка.
Поскольку драйверы Direct3D IHV работают в режиме ядра, а код пользовательского режима не находится в руках IHV, такая оптимизация невозможна. Поскольку среда выполнения Direct3D, часть пользовательского режима, реализующая API, не может иметь явных сведений о внутренней работе драйвера, она не может эффективно поддерживать маршаллинг. Это означает, что каждый вызов Direct3D, который отправляет команды оборудованию, должен выполнять переключение режима ядра, что опять же требует времени порядка микросекунд. Это привело к появлению нескольких вариантов использования Direct3D, наиболее важным из которых является необходимость отправки больших пакетов треугольников за один вызов функции.[17]
Поскольку в драйверах OpenGL IHV есть компонент пользовательского режима, у IHV есть возможность реализовать маршалинг, тем самым повышая производительность. Переключение режима ядра все еще существует, но теоретическое максимальное количество переключателей в реализациях OpenGL просто равно стандартному поведению Direct3D.
Direct3D 10, выпуск включен в Виндоус виста,[18] позволяет частям драйверов работать в пользовательском режиме, что позволяет IHV реализовывать маршаллинг, возвращая их к относительному паритету производительности. Mac OS X Система OpenGL очень похожа, где IHV реализуют более простую версию OpenGL API (с компонентами режима пользователя и ядра), а дополнения Apple к среде выполнения предоставляют прямой интерфейс к пользовательскому коду и некоторую базовую работу по созданию IHV. 'Работа проще.
Гонка до нуля для водителя
Внедрение AMD Mantle привело к усилению дискуссий о модернизации API и обновлении концепций абстракции, используемых всеми API, чтобы отразить графический процессор (GPU) операции. Поставщики Microsoft и OpenGL начали демонстрировать свои взгляды на ограничение или полное устранение накладных расходов на драйверы (объем работы, который процессор должен выполнить для подготовки команд графического процессора).
В марте 2014 года Microsoft представила основные предположения и цели для компонента DirectX12 3D (который будет готов к декабрю 2015 года).[19] Поставщики OpenGL использовали другой подход, и во время GDC 2014 представили набор функций, обязательных в OpenGL 4.3 и OpenGL 4.4 или уже расширениях ARB, чтобы показать быстрые пути, уже присутствующие в реализациях от Nvidia, AMD и Intel.[20] Позже AMD пожертвовала Мантия к Хронос Групп, API был переименован Вулкан и теперь это текущий кроссплатформенный API, предназначенный для уменьшения нагрузки на драйверы, а также лучшего распределения работы между несколькими ядрами ЦП и графического процессора с использованием единого управления вычислительными ядрами и графическими шейдерами.
Во время презентации апитест был представлен. Это новый инструмент для микробенчмаркинга конкретных решений заданных проблем с упором на изучение быстрых путей в текущих API. Поддерживаются как OpenGL 4.x, так и Direct3D 11. Собранные результаты показали, что современный OpenGL может быть во много раз быстрее Direct3D 11.[21]
Структура
OpenGL, изначально разработанный для мощных рабочих станций SGI, включает в себя множество функций, например стерео рендеринг и подмножество изображений, которые обычно считались ограниченными для использования в играх, хотя стереоскопические игры вызвали больший интерес с развитием 3D-дисплеев потребительского уровня. API в целом содержит около 250 вызовов, но только подмножество, возможно, из 100 полезно для разработки игр.[нужна цитата ] Однако никакого официального подмножества, специфичного для игр, так и не было определено. MiniGL, выпущенный 3Dfx в качестве временной меры для поддержки GLQuake, мог бы послужить отправной точкой, но дополнительные функции, такие как трафарет вскоре были приняты играми, и продолжалась поддержка полного стандарта OpenGL. Сегодня рабочие станции и потребительские машины используют одни и те же архитектуры и операционные системы, поэтому современные версии стандарта OpenGL по-прежнему включают эти функции, хотя только специальные видеокарты класса рабочих станций ускоряют их.
Расширения
OpenGL расширение Механизм, вероятно, является наиболее спорным различием между двумя API.[нужна цитата ] OpenGL включает механизм, с помощью которого любой драйвер может рекламировать свои собственные расширения API, таким образом вводя новые функции, такие как режимы наложения, новые способы передачи данных на графические процессоры или различные параметры упаковки текстур. Это позволяет быстро открывать новые функции, но может привести к путанице, если разные поставщики реализуют аналогичные расширения с разными API. Многие из этих расширений периодически стандартизируются Совет по обзору архитектуры OpenGL (ARB), а некоторые из них станут основной частью будущих версий OpenGL.
С другой стороны, Direct3D указан только одним поставщиком (Microsoft ), что приводит к более согласованному API, но запрещает доступ к функциям конкретных поставщиков. NVIDIA Например, технология UltraShadow отсутствует в стандартных API Direct3D на момент написания.[нужна цитата ][когда? ] Direct3D поддерживает расширения формата текстур (через FourCC ). Когда-то они были малоизвестными и редко использовались, но теперь используются для Сжатие текстур S3.
Когда видеокарты добавили поддержку пиксельные шейдеры (известный в OpenGL как «фрагментные шейдеры») Direct3D предоставляет один стандарт «Pixel Shader 1.1» (PS1.1), с помощью которого GeForce 3 и выше, и Radeon 8500 и выше, заявленная совместимость. В OpenGL к тем же функциям можно было получить доступ через множество настраиваемых расширений.
Теоретически подход Microsoft позволяет использовать один путь кода для поддержки карт обеих марок, тогда как в OpenGL программисты должны писать две отдельные системы.[требуется разъяснение ] В действительности, однако, из-за ограничений на обработку пикселей этих ранних видеокарт Pixel Shader 1.1 был не более чем версией на языке псевдо-ассемблера специфичных для NVIDIA расширений OpenGL. По большей части, единственными картами, заявляющими о функциональности PS 1.1, были NVIDIA, и это потому, что они изначально были созданы для нее. Когда была выпущена Radeon 8500, Microsoft выпустила обновление для Direct3D, которое включало Pixel Shader 1.4, который был не более чем версией псевдо-ассемблера. ATI -специфические расширения OpenGL. Единственными картами, которые заявили о поддержке PS 1.4, были карты ATI, потому что они были разработаны с точным оборудованием, необходимым для реализации этой функции.
Такая ситуация просуществовала недолго в обоих API. Карты затенения пикселей второго поколения функционировали гораздо более похоже, каждая архитектура развивалась в сторону одного и того же типа обработки пикселей. Таким образом, Pixel Shader 2.0 допускает унифицированный путь кода в Direct3D. Примерно в то же время OpenGL представил собственные расширения вершинных и пиксельных шейдеров, одобренные ARB (GL_ARB_vertex_program
и GL_ARB_fragment_program
), и оба набора карт также поддерживали этот стандарт.
Пользователи
Профессиональная графика
OpenGL всегда находил большее применение на рынке профессиональной графики, чем DirectX, тогда как DirectX используется в основном для компьютерных игр. (Период, термин профессиональный используется здесь для обозначения профессионального производства и отображения графики, например, в компьютерных анимационных фильмах и научной визуализации, в отличие от игр, в которых производимая графика предназначена для личного, а не профессионального использования конечного пользователя.) В настоящее время и OpenGL, и DirectX имеет достаточно большое перекрытие в функциональности, так что любой из них может использоваться для наиболее распространенных целей, причем операционная система часто является основным критерием, определяющим, какой из них используется; DirectX - это обычный выбор для Windows, а OpenGL - почти для всего остального. Некоторые эзотерические приложения по-прежнему разделяют применимость двух API: выполнение ускоренного 3D через сетевое соединение напрямую поддерживается только OpenGL с Расширение OpenGL для системы X Window (GLX ), Например.
В прошлом многие профессиональные видеокарты поддерживали только OpenGL. С 2010 года практически все профессиональные карты, работающие на платформе Windows, также будут поддерживать Direct3D. Частично это связано с переходом на рынок профессиональной графики с оборудования, в основном основанного на Unix, такого как SGI и Sun, на более дешевые системы на базе ПК, что привело к росту Windows в этом сегменте рынка и в то же время предоставило новый рынок. для программного обеспечения OpenGL в потребительских системах на базе Unix, работающих под управлением Linux или Mac OS X.
Основной исторической причиной доминирования OpenGL на профессиональном рынке была производительность. Многие профессиональные графические приложения (например, Softimage | 3D, Псевдоним PowerAnimator ) изначально были написаны на ИРИС GL для высокопроизводительных рабочих станций SGI, которые были гораздо более мощными, как графически, так и по мощности процессора, чем ПК того времени. Позже многие из них были перенесены на OpenGL, даже когда персональный компьютер развивался в систему, достаточно мощную, чтобы запускать некоторые профессиональные графические приложения. Пользователи смогли запустить майя, например, преемник Псевдоним PowerAnimator либо на SGI, либо на персональных компьютерах под управлением Windows (а сегодня на Linux, Mac OS X и Windows). Ценовая конкуренция в конечном итоге сломала доминирование SGI на рынке, но устоявшаяся база разработчиков программного обеспечения OpenGL и расширяющаяся база пользователей OpenGL в Apple, Linux и других операционных системах привели к появлению рынка, на котором и DirectX, и OpenGL являются жизнеспособными и широко распространенными API. .
Другой причиной исторического преимущества OpenGL был маркетинг и дизайн. DirectX - это набор API-интерфейсов, не предназначенных для профессиональных графических приложений. Более того, они даже не были предназначены для такого использования. DirectX был API, предназначенным для низкоуровневого высокопроизводительного доступа к широко доступному, низкопроизводительному и недорогому графическому оборудованию с целью разработки игр. OpenGL - это гораздо более универсальный 3D API, предназначенный для всего спектра графического оборудования, от недорогих видеокарт до профессиональных и научных графических визуализаций, выходящих за пределы диапазона среднего потребителя, и предоставляющий функции, которые не обязательно являются эксклюзивными для определенный тип пользователей.
Разработчики игр обычно не требовали такого широкого API, как профессиональные разработчики графических систем. Многие игры не нуждаются в наложении плоскостей, трафаретов и т. Д., Хотя это не мешает некоторым разработчикам игр использовать их, когда они доступны. В частности, разработчиков игр редко интересует пиксельная инвариантность, требуемая в определенных частях стандартов OpenGL, которые, наоборот, очень полезны для кино и компьютерного моделирования.
Однажды SGI и Microsoft предприняли попытку объединить OpenGL и DirectX. В Графический API по Фаренгейту был призван объединить как высокие возможности OpenGL, так и широкую низкоуровневую поддержку DirectX. В конце концов Microsoft отказалась от проекта, так и не выделив достаточно ресурсов для создания своей части механизма рендеринга. Этот шаг был широко распространен с целью обеспечить привязку разработчиков к платформе Windows-DirectX, которая была бы потеряна, если бы Fahrenheit API стал де-факто стандартным графическим API мира. Однако Fahrenheit привел ко многим улучшениям в DirectX, и главный архитектор Fahrenheit теперь работает в Microsoft над DirectX.[нужна цитата ]
Игры
На заре игр с 3D-ускорением производительность и надежность были ключевыми показателями, и несколько карт 3D-ускорителей соревновались друг с другом за доминирование. Программное обеспечение было написано для конкретной марки видеокарты. Однако со временем OpenGL и Direct3D появились как программные уровни над оборудованием, в основном из-за поддержки промышленностью кросс-аппаратной графической библиотеки. Конкуренция между ними росла, поскольку каждый разработчик игр выбирал либо одно, либо другое.
На заре игр с 3D-ускорением большинство производителей не поставляли полный драйвер OpenGL. Причина этого была двоякой. Во-первых, большинство ориентированных на потребителя ускорителей не реализовали достаточную функциональность для должного ускорения OpenGL. Во-вторых, многие производители изо всех сил пытались реализовать полный драйвер OpenGL с хорошей производительностью и совместимостью. Вместо этого они написали MiniGL драйверы, которые реализовали только подмножество OpenGL, достаточное для запуска GLQuake (а позже и других игр OpenGL, в основном основанных на движке Quake). Соответствующие драйверы OpenGL стали более распространенными по мере развития оборудования, и ориентированные на потребителя ускорители догнали системы SGI, для которых изначально был разработан OpenGL. Это было примерно во времена DirectX 6 или DirectX 7.
В мире консолей преобладают проприетарные собственные API-интерфейсы, при этом некоторые консоли (например, PS3) предоставляют оболочку OpenGL вокруг своего собственного API. Оригинальный Xbox поддерживал Direct3D 8.1 в качестве собственного API, а Xbox 360 поддерживает DirectX9.[22] в качестве собственного API. Большинство разработчиков консолей предпочитают использовать собственные API-интерфейсы для каждой консоли, чтобы максимизировать производительность, что делает сравнение OpenGL и Direct3D актуальным в основном для платформ ПК.
Мобильные телефоны и другие встраиваемые устройства
Эта секция нуждается в расширении. Вы можете помочь добавляя к этому. (Июль 2010 г.) |
OpenGL для встраиваемых систем, называемый OpenGL ES, это подмножество API трехмерной графики OpenGL, разработанное для встроенные устройства. Различные версии смартфон операционные системы поддержка OpenGL ES, например Android, iOS (iPad, iPhone, Ipod Touch ), Maemo (Nokia N900 ), и Symbian.
OpenGL ES доступен в 6 вариантах: OpenGL ES 1.0, 1.1, 2.0, 3.0, 3.1, 3.2. В выпуске 2.0 удалена обратная совместимость со старыми вариантами из-за обширных программируемых конвейерных функций, доступных в GL ES 2.0, по сравнению с фиксированными конвейерными функциями GL ES 1.0 и 1.1. OpenGL ES 3.0 нуждался в новом оборудовании по сравнению с OpenGL ES 2.0, в то время как OpenGL ES 3.1 задуман как обновление программного обеспечения, требующее только новых драйверов.
Direct3D Mobile, производная от Direct3D, поддерживается Windows CE.[23] В настоящее время все Windows Phone 7 устройства используют .NET Framework Пользовательский интерфейс ускорен с помощью Direct3D Mobile 9 на встроенных графических процессорах Adreno 200/205 от Qualcomm.
Windows Phone 8 реализует Direct3D 11 (ограниченный функциональным уровнем 9_3).[24]
Рекомендации
- ^ http://blogs.msdn.com/b/windows-embedded/archive/2009/06/25/component-tales-directx.aspx
- ^ а б «Лицензия Microsoft DirectX». legal.ubi.com. Получено 2015-07-21.
- ^ а б http://www.opengl.org/about/
- ^ https://www.khronos.org/opengles/
- ^ [1]
- ^ «Начало работы с Direct3D - разработка приложений для Windows». msdn.microsoft.com. Получено 2015-07-21.
- ^ «Логотипы, товарные знаки и правила Khronos». Хронос Групп. Хронос Групп. Июнь 2016. Получено 25 июля 2016.
- ^ Группа, Хронос. «Обзор OpenGL». www.opengl.org. Получено 2015-07-21.
- ^ idr: OpenGL 3 и Mesa: X.Org Wiki - События / XDC2009 / Примечания. Проверено 28 октября 2011 года.
- ^ Windows Vista и OpenGL - факты, Информационный бюллетень OpenGL Pipeline, том 003, 20 апреля 2007 г.
- ^ «Архивная копия». Архивировано из оригинал на 2011-09-13. Получено 2011-09-04.CS1 maint: заархивированная копия как заголовок (связь)
- ^ "ANGLE: Почти нативный графический слой". code.google.com. Получено 2015-07-21.
- ^ "План Джона Кармака от 23 декабря 1996 г.". 23 декабря 1996 г.
- ^ а б "Открытое письмо в Microsoft" Криса Хеккера Выпуск журнала Game Developer Magazine за апрель – май 1997 г.
- ^ Khronos Group - OpenGL - языковые привязки
- ^ Спинеллис, Диомидис (2006). Качество кода: перспектива открытого исходного кода. Эддисон Уэсли. С. 182–183. ISBN 0-321-16607-8.
- ^ Что лучше: использовать один вызов DrawPrimitive или несколько? В архиве 2006-09-06 на Wayback Machine Nexe
- ^ Графические API в Windows Vista
- ^ DirectX 12
- ^ https://www.khronos.org/assets/uploads/developers/library/2014-gdc/Khronos-OpenGL-Efficiency-GDC-Mar14.pdf Эффективность OpenGL: AZDO
- ^ http://www.slideshare.net/CassEveritt/approaching-zero-driver-overhead
- ^ http://blogs.msdn.com/b/chuckw/archive/2012/06/20/direct3d-feature-levels.aspx
- ^ Direct3D Mobile, Microsoft, 6 января 2010 г.
- ^ [2] Поддержка шейдерной модели для Windows Phone 8.