Microsoft DirectX — это набор интерфейсов прикладного программирования (API) для решения задач, связанных с мультимедиа , особенно с программированием игр и видео, на платформах Microsoft . Первоначально все имена этих API начинались с «Direct», например Direct3D , DirectDraw , DirectMusic , DirectPlay , DirectSound и т. д. Название DirectX было придумано как сокращение для всех этих API (буква X обозначает имена конкретных API) и вскоре стало названием коллекции. Когда позже Microsoft приступила к разработке игровой консоли, буква X использовалась в качестве основы названия Xbox , чтобы указать, что консоль основана на технологии DirectX. [3] Начальная буква X была перенесена в имена API, разработанных для Xbox, таких как XInput и Cross-platform Audio Creation Tool (XACT), тогда как шаблон DirectX был продолжен для API Windows, таких как Direct2D и DirectWrite .
Direct3D (API 3D-графики в DirectX) широко используется при разработке видеоигр для Microsoft Windows и линейки консолей Xbox . Direct3D также используется другими программными приложениями для задач визуализации и графики, таких как проектирование CAD/CAM. Поскольку Direct3D является наиболее широко разрекламированным компонентом DirectX, имена «DirectX» и «Direct3D» часто используются как синонимы.
Комплект разработки программного обеспечения DirectX (SDK) состоит из библиотек времени выполнения в распространяемой двоичной форме, а также сопроводительной документации и заголовков для использования при кодировании. Первоначально среды выполнения устанавливались только играми или непосредственно пользователем. Windows 95 не запускалась с DirectX, но DirectX был включен в Windows 95 OEM Service Release 2. [4] Windows 98 и Windows NT 4.0 поставлялись с DirectX, как и все выпущенные с тех пор версии Windows. SDK доступен для бесплатной загрузки. Хотя среды выполнения являются проприетарным программным обеспечением с закрытым исходным кодом, для большинства образцов SDK предоставляется исходный код. Начиная с выпуска Windows 8 Developer Preview, DirectX SDK был интегрирован в Windows SDK. [5]
В конце 1994 года Microsoft была готова выпустить Windows 95 , свою следующую операционную систему . Важным фактором, определяющим ценность, которую потребители будут придавать этому устройству, были программы, которые смогут на нем работать. Сотрудник Microsoft Алекс Сент-Джон обсуждал с различными разработчиками игр вопрос о том, насколько вероятно, что они перенесут свои игры для MS-DOS на Windows 95, и нашел ответы в основном отрицательными; программисты обнаружили, что среда Windows не предоставляет необходимых функций, которые были доступны в MS-DOS с использованием процедур BIOS или прямого доступа к оборудованию. [6] Были также сильные опасения по поводу совместимости; примечательным примером этого был анимационный сборник рассказов Диснея: Король Лев , который был основан на программном интерфейсе WinG . [7] Из-за многочисленных несовместимых графических драйверов от новых компьютеров Compaq , которые не были протестированы с интерфейсом WinG, поставляемым в комплекте с игрой, на многих настольных системах происходили сбои так часто, что родители завалили телефонные линии помощи Disney . [8] [9]
Сент-Джон осознал, что сопротивление разработке игр под Windows будет ограничением, и нанял двух дополнительных инженеров, Крейга Эйслера и Эрика Энгстрома , чтобы разработать лучшее решение, позволяющее привлечь больше программистов к разработке игр для Windows. Проект имел кодовое название «Манхэттенский проект», как и одноименный проект времен Второй мировой войны , и идея заключалась в том, чтобы заменить разработанные японцами игровые консоли персональными компьютерами под управлением операционной системы Microsoft. [8] Первоначально в качестве логотипа использовался символ радиации , но Microsoft попросила команду изменить логотип. [8] Руководство не согласилось на проект, поскольку уже списывало Windows со счетов как игровую платформу, но все трое взялись за развитие этого проекта. [9] Их мятежный характер побудил Брэда Сильверберга , старшего вице-президента Microsoft по офисным продуктам, назвать трио «Beastie Boys». [10]
Большая часть работы этими троими была проделана среди других порученных проектов, начиная примерно с конца 1994 года. [9] В течение четырех месяцев при участии нескольких производителей оборудования команда разработала первый набор интерфейсов прикладного программирования (API), которые они представлено на конференции разработчиков игр 1995 года . [9] SDK включал библиотеки, реализующие DirectDraw для растровой графики, [11] DirectSound для звука, [12] и DirectPlay для связи между игроками по сети. [13] Кроме того, расширенный API-интерфейс джойстика, уже присутствующий в Windows 95, был впервые задокументирован как DirectInput, [14] а также описание того, как реализовать немедленный запуск процедуры установки программного обеспечения после вставки его компакт-диска. , функция под названием AutoPlay также была частью SDK. [15] «Прямая» часть библиотеки была названа так, поскольку эти процедуры обходили существующие базовые процедуры Windows 95 и получали доступ к компьютерному оборудованию только через уровень абстракции оборудования (HAL). [16] Хотя команда назвала его «Game SDK» ( комплект для разработки программного обеспечения ), название «DirectX» пришло от одного журналиста, который высмеивал схему именования различных библиотек. Команда решила продолжить использовать эту схему именования и назвать проект DirectX. [8]
Первая версия DirectX была выпущена в сентябре 1995 года как Windows Games SDK. Его компонент DirectDraw был заменой Win32 API -интерфейсов DCI [17] и WinG для Windows 3.1 . [18] DirectX позволял всем версиям Microsoft Windows, начиная с Windows 95, включать высокопроизводительный мультимедиа. Эйслер писал об безумном стремлении создать DirectX 1–5 в своем блоге. [19]
Чтобы привлечь больше разработчиков к использованию DirectX, Microsoft обратилась к Джону Кармаку из id Software и предложила бесплатно портировать Doom и Doom 2 с MS-DOS на DirectX, при этом id сохранит за собой все права на публикацию игры. Кармак согласился, и проект портирования возглавил Гейб Ньюэлл из Microsoft . Первая игра была выпущена как Doom 95 в августе 1996 года и стала первой опубликованной игрой DirectX. Microsoft активно продвигала игру, а Билл Гейтс появлялся в рекламе этой игры. [8]
DirectX 2.0 стал компонентом самой Windows с выпусками Windows 95 OSR2 и Windows NT 4.0 в середине 1996 года. Поскольку Windows 95 сама по себе была еще новой и для нее было выпущено мало игр, Microsoft активно продвигала DirectX среди разработчиков, которые в целом не доверяли способности Microsoft создать игровую платформу на Windows. Алекс Сент-Джон, евангелист DirectX, организовал на конференции разработчиков компьютерных игр 1996 года тщательно продуманное мероприятие , которое разработчик игр Джей Барнсон назвал римской темой, включая настоящих львов , тоги и что-то напоминающее карнавал в помещении. [20] Именно на этом мероприятии Microsoft впервые представила Direct3D и продемонстрировала многопользовательскую игру MechWarrior 2, в которую можно играть через Интернет.
Перед командой DirectX стояла непростая задача тестирования каждой версии DirectX на множестве компьютерного оборудования и программного обеспечения . В каждой бета-версии и финальной версии тестировались различные видеокарты, звуковые карты, материнские платы, процессоры, устройства ввода, игры и другие мультимедийные приложения. Команда DirectX также разработала и распространила тесты, которые позволили производителям оборудования подтвердить, что новые конструкции оборудования и выпуски драйверов будут совместимы с DirectX.
До появления DirectX Microsoft добавила OpenGL в свою платформу Windows NT . [21] OpenGL был разработан компанией Silicon Graphics, Inc. как кросс-платформенный, независимый от оконной системы программный интерфейс для графического оборудования, чтобы сделать программирование трехмерной графики основным направлением прикладного программирования. Кроме того, его также можно было использовать для 2D-графики и изображений, и он контролировался Советом по обзору архитектуры (ARB), в который входила Microsoft. [22] [23] Direct3D задумывался как управляемая Microsoft альтернатива OpenGL, изначально ориентированная на использование в играх. По мере развития 3D-игр разработчики игр обнаружили, что OpenGL можно эффективно использовать для разработки игр. [24] В этот момент началась «битва» между сторонниками кроссплатформенного OpenGL и Direct3D, предназначенного только для Windows. [25] Кстати, OpenGL поддерживался в Microsoft командой DirectX. Если разработчик решил использовать API 3D-графики OpenGL в компьютерных играх , другие API DirectX, помимо Direct3D, часто комбинировались с OpenGL, поскольку OpenGL не включает в себя все функции DirectX (например, поддержку звука или джойстика).
В версии для консолей DirectX использовался в качестве основы для консольных API Microsoft Xbox , Xbox 360 и Xbox One . API был разработан совместно Microsoft и Nvidia , которые разработали специальное графическое оборудование, используемое в оригинальной Xbox. API Xbox был похож на DirectX версии 8.1, но не подлежал обновлению, как и другие консольные технологии. Кодовое название Xbox было DirectXbox, но коммерческое название было сокращено до Xbox. [26]
В 2002 году Microsoft выпустила DirectX 9 с поддержкой использования гораздо более длинных программ шейдеров, чем раньше с пиксельными и вершинными шейдерами версии 2.0. С тех пор Microsoft продолжает обновлять пакет DirectX, представив Shader Model 3.0 в DirectX 9.0c, выпущенном в августе 2004 года.
В апреле 2005 года DirectShow был удален из DirectX и вместо этого перенесен в Microsoft Platform SDK .
Было подтверждено, что DirectX присутствует в Windows Phone 8 от Microsoft . [27]
Трассировка лучей в реальном времени была анонсирована как DXR в 2018 году. В том же году поддержка компиляции HLSL в SPIR-V была также добавлена в компилятор шейдеров DirectX. [28]
DirectX состоит из нескольких API:
Microsoft объявила устаревшими следующие компоненты:
Функциональность DirectX предоставляется в виде объектов и интерфейсов в стиле COM . Кроме того, управляемые объекты , хотя и не являются компонентами DirectX, были построены поверх некоторых частей DirectX, таких как Managed Direct3D [31] и графическая библиотека XNA [32] поверх Direct3D 9.
Microsoft распространяет инструмент отладки DirectX под названием «PIX». [33]
DirectX 9 был выпущен в 2002 году для Windows 98, Me, 2000 и XP, и в настоящее время [ когда? ] поддерживается всеми последующими версиями. Microsoft продолжает вносить изменения в DirectX 9.0c, в результате чего поддержка некоторых из вышеупомянутых операционных систем была прекращена. По состоянию на январь 2007 г. требуется Windows 2000 или XP. Также была представлена Shader Model 2.0, содержащая Pixel Shader 2.0 и Vertex Shader 2.0. Windows XP SP2 и новее включают DirectX 9.0c, [34] , но может потребоваться более новая распространяемая установка среды выполнения DirectX для приложений DirectX 9.0c, скомпилированных с помощью DirectX 9.0 SDK от февраля 2005 г. или новее.
DirectX 10, являющееся крупным обновлением DirectX API, поставляется и доступен только с Windows Vista (выпущенной в конце 2006 года) и более поздних версиях. Предыдущие версии Windows, такие как Windows XP, не могут запускать эксклюзивные приложения DirectX 10. Скорее, программы, которые запускаются в системе Windows XP с аппаратным обеспечением DirectX 10, просто используют путь кода DirectX 9.0c, последнюю версию, доступную для компьютеров с Windows XP. [35]
Изменения в DirectX 10 были обширными. Многие прежние части API DirectX были признаны устаревшими в последней версии DirectX SDK и сохранены только для совместимости: DirectInput был объявлен устаревшим в пользу XInput , DirectSound был объявлен устаревшим в пользу системы Cross-platform Audio Creation Tool (XACT) и дополнительно потерял поддержку Звук с аппаратным ускорением, поскольку аудиостек Vista воспроизводит звук программно на ЦП. DirectPlay DPLAY.DLL также был удален и заменен на dplayx.dll; игры, использующие эту DLL, должны дублировать ее и переименовывать в dplay.dll.
Для достижения обратной совместимости DirectX в Windows Vista содержит несколько версий Direct3D: [36]
Direct3D 10.1 — это дополнительное обновление Direct3D 10.0, которое поставлялось вместе с Windows Vista Service Pack 1 , выпущенным в феврале 2008 года, и требовало его . [37] Этот выпуск в основном устанавливает несколько дополнительных стандартов качества изображения для поставщиков графики, одновременно предоставляя разработчикам больше возможностей. контроль над качеством изображения. [38] Он также добавляет поддержку массивов кубических карт, отдельные режимы наложения для каждого MRT, экспорт маски покрытия из пиксельного шейдера, возможность запуска пиксельного шейдера для каждого сэмпла, доступ к буферам глубины с множественной выборкой [39] и требует, чтобы видео Карта поддерживает шейдерную модель 4.1 или выше и 32-битные операции с плавающей запятой. Direct3D 10.1 по-прежнему полностью поддерживает оборудование Direct3D 10, но для использования всех новых функций требуется обновленное оборудование. [40]
Microsoft представила DirectX 11 на мероприятии Gamefest 08 в Сиэтле. Последнее обновление платформы было выпущено для Windows Vista 27 октября 2009 г., то есть через неделю после первого выпуска Windows 7 , который был выпущен с Direct3D 11 в качестве базового стандарта.
Основные запланированные функции, включая поддержку GPGPU ( DirectCompute ) и Direct3D 11 с поддержкой тесселяции [41] [42] и улучшенной поддержкой многопоточности , чтобы помочь разработчикам видеоигр в разработке игр, которые лучше используют многоядерные процессоры. [43] Части нового API, такие как многопоточная обработка ресурсов, могут поддерживаться на оборудовании класса Direct3D 9/10/10.1. Для аппаратной тесселяции и Shader Model 5.0 требуется оборудование, поддерживающее Direct3D 11. [44] С тех пор Microsoft выпустила техническую предварительную версию Direct3D 11. [45] Direct3D 11 — это строгая расширенная версия Direct3D 10.1 — все аппаратные функции и функции API версии 10.1 сохраняются, а новые функции добавляются только при необходимости для раскрытия новых функций. Это помогает сохранить обратную совместимость с предыдущими версиями DirectX.
Было выпущено четыре обновления для DirectX 11:
DirectX 12 был анонсирован Microsoft на GDC 20 марта 2014 года и официально запущен вместе с Windows 10 29 июля 2015 года.
Основной особенностью новой версии DirectX было введение усовершенствованных API-интерфейсов низкоуровневого программирования для Direct3D 12 , которые могут снизить нагрузку на драйверы. Теперь разработчики могут реализовывать свои собственные списки команд и буферы в графическом процессоре, что позволяет более эффективно использовать ресурсы посредством параллельных вычислений . Ведущий разработчик Макс МакМаллен заявил, что основная цель Direct3D 12 — добиться «эффективности на уровне консоли на телефоне, планшете и ПК». [55] Выпуск Direct3D 12 сопровождается другими инициативами в области графических API с низкими издержками, включая Mantle от AMD для видеокарт AMD, Metal от Apple для iOS и macOS и кроссплатформенный Vulkan от Khronos Group .
Поддержка мультиадаптеров будет реализована в DirectX 12, что позволит разработчикам использовать несколько графических процессоров в системе одновременно; Поддержка нескольких графических процессоров ранее зависела от реализаций поставщиков, таких как AMD CrossFireX или NVIDIA SLI . [56] [57] [58] [59]
DirectX 12 поддерживается на всех графических процессорах Fermi и более поздних версиях Nvidia, на чипах AMD на базе GCN , а также на графических модулях процессоров Intel Haswell и более поздних версий. [60]
На SIGGRAPH 2014 компания Intel выпустила демо-версию, показывающую сгенерированное компьютером поле астероидов , в которой было заявлено, что DirectX 12 на 50–70% более эффективен, чем DirectX 11, в скорости рендеринга и энергопотреблении процессора. [61] [62]
Ashes of the Singularity была первой общедоступной игрой, в которой использовался DirectX 12. Тестирование, проведенное Ars Technica в августе 2015 года, выявило небольшое снижение производительности в режиме DirectX 12 по сравнению с режимом DirectX 11 для Nvidia GeForce 980 Ti , тогда как AMD Radeon R9 290x добилась стабильного улучшения производительности. до 70% под DirectX 12, а в некоторых сценариях AMD превосходила более мощную Nvidia под DirectX 12. Расхождения в производительности могут быть связаны с плохой оптимизацией драйверов Nvidia для DirectX 12 или даже с аппаратными ограничениями карты, оптимизированной для последовательное исполнение DirectX 11; однако точная причина остается неясной. [63]
Улучшения производительности DirectX 12 на Xbox не такие существенные, как на ПК. [64]
В марте 2018 года было объявлено о DirectX Raytracing (DXR), способном выполнять трассировку лучей в реальном времени на поддерживаемом оборудовании [65] , а API DXR был добавлен в обновление Windows 10 за октябрь 2018 года.
В 2019 году Microsoft объявила о появлении DirectX 12 в Windows 7 , но только в качестве плагина для некоторых игр. [66]
Microsoft представила DirectX 12 Ultimate в марте 2020 года. DirectX 12 Ultimate будет объединен в общую библиотеку как на компьютерах с Windows 10, так и на Xbox Series X и других консолях Xbox девятого поколения. Среди новых функций Ultimate — DirectX Raytracing 1.1 , шейдинг с переменной скоростью, который дает программистам контроль над уровнем детализации затенения в зависимости от выбора дизайна, Mesh Shaders и Sampler Feedback. [67] [68]
Номер версии, сообщаемый инструментом Microsoft DxDiag (версия 4.09.0000.0900 и выше), использует формат x.xx.xxxx.xxxx для номеров версий. Однако на странице MSDN DirectX и Windows XP утверждается, что реестр всегда имел формат x.xx.xx.xxxx. Таким образом, если в приведенной выше таблице указана версия «4.09.00.0904», инструмент Microsoft DxDiag может иметь ее как «4.09.0000.0904». [93]
Различные выпуски Windows включали и поддерживали различные версии DirectX, позволяя новым версиям операционной системы продолжать запускать приложения, разработанные для более ранних версий DirectX, до тех пор, пока эти версии не будут постепенно заменены более новыми API, драйверами и оборудованием. [94]
Такие API, как Direct3D и DirectSound, должны взаимодействовать с оборудованием, и они делают это через драйвер устройства . Производители оборудования должны написать эти драйверы для интерфейса драйвера устройства конкретной версии DirectX (или DDI) и протестировать каждую отдельную часть оборудования, чтобы сделать их совместимыми с DirectX. Некоторые аппаратные устройства имеют только драйверы, совместимые с DirectX (другими словами, для использования этого оборудования необходимо установить DirectX). Ранние версии DirectX включали в себя обновленную библиотеку всех доступных в настоящее время драйверов, совместимых с DirectX. Однако эта практика была прекращена в пользу веб- системы обновления драйверов Центра обновления Windows , которая позволяла пользователям загружать только драйверы, относящиеся к их оборудованию, а не всю библиотеку.
До DirectX 10 среда выполнения DirectX была разработана с учетом обратной совместимости со старыми драйверами, а это означает, что новые версии API были разработаны для взаимодействия со старыми драйверами, написанными на основе DDI предыдущей версии. Программисту приложения приходилось запрашивать доступные аппаратные возможности, используя сложную систему «битов», каждый из которых привязан к определенной аппаратной функции. Direct3D 7 и более ранние версии будут работать на любой версии DDI, для Direct3D 8 требуется минимальный уровень DDI 6, а для Direct3D 9 требуется минимальный уровень DDI 7. [95] Однако среда выполнения Direct3D 10 в Windows Vista не может работать на старом оборудовании. драйверы из-за значительно обновленного DDI, который требует унифицированного набора функций и отказывается от использования «максимальных битов».
В Direct3D 10.1 представлены « уровни функций » 10_0 и 10_1, которые позволяют использовать только аппаратные функции, определенные в указанной версии Direct3D API. В Direct3D 11 добавлены уровни 11_0 и «10 Уровень 9» — подмножество API Direct3D 10, предназначенное для работы на оборудовании Direct3D 9, которое имеет три уровня функций (9_1, 9_2 и 9_3), сгруппированные по общим возможностям «низкий», «средний». и видеокарты «высокого класса»; среда выполнения напрямую использует Direct3D 9 DDI, включенный во все драйверы WDDM. Уровень функций 11_1 был представлен в Direct3D 11.1 .
В 2002 году Microsoft выпустила версию DirectX, совместимую с Microsoft .NET Framework , что позволило программистам использовать преимущества функциональности DirectX из приложений .NET, используя совместимые языки, такие как управляемый C++ или язык программирования C# . Этот API был известен как « Managed DirectX » (или сокращенно MDX) и утверждал, что его производительность составляет 98% от производительности базовых API DirectX. В декабре 2005 г., феврале 2006 г., апреле 2006 г. и августе 2006 г. Microsoft выпустила последовательные обновления этой библиотеки, кульминацией которых стала бета-версия под названием Managed DirectX 2.0. Хотя Managed DirectX 2.0 объединил функциональные возможности, которые ранее были разбросаны по нескольким сборкам, в одну сборку, тем самым упростив зависимости от нее для разработчиков программного обеспечения, разработка этой версии впоследствии была прекращена, и она больше не поддерживается. Срок действия библиотеки Managed DirectX 2.0 истек 5 октября 2006 г.
Во время GDC 2006 Microsoft представила XNA Framework , новую управляемую версию DirectX (похожую, но не идентичную Managed DirectX), которая предназначена для помощи в разработке игр, упрощая интеграцию DirectX, HLSL и других инструментов в один пакет. Он также поддерживает выполнение управляемого кода на Xbox 360. RTM XNA Game Studio Express была доступна для бесплатной загрузки 11 декабря 2006 г. для Windows XP. В отличие от среды выполнения DirectX, Managed DirectX , XNA Framework или API-интерфейсы Xbox 360 (XInput, XACT и т. д.) не поставляются как часть Windows. Ожидается, что разработчики будут распространять компоненты среды выполнения вместе со своими играми или приложениями.
Ни один продукт Microsoft, включая последние выпуски XNA, не обеспечивает поддержку DirectX 10 для .NET Framework.
Другой подход к использованию DirectX в управляемых языках — использование сторонних библиотек, таких как:
Существуют альтернативы семейству API DirectX : OpenGL , его преемник Vulkan , Metal и Mantle , обладающие большинством функций, сравнимых с Direct3D . Примеры других API включают SDL , Allegro , OpenMAX , OpenML, OpenAL , OpenCL , FMOD , SFML и т. д. Многие из этих библиотек являются кроссплатформенными или имеют открытые базы кода. Существуют также альтернативные реализации, целью которых является предоставление того же API, например, в Wine . Более того, разработчики ReactOS пытаются переопределить DirectX под названием «ReactX».
Windows должна поддерживать;
... – Перелистывание страниц – Вертикальная пустая синхронизация – Плотное микширование звука – Точная синхронизация звуковых и видео событий – Высокая производительность – Возможность установки графического режима…
Например, программное обеспечение Lion King — это приложение WinToon.
... Как и WinToon, в этом примере для рисования в DIB используется WinG.
На смену DMO пришли Media Foundation Transforms (MFT).