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] Также были сильные опасения по поводу совместимости; ярким примером этого была Disney's Animated Storybook: The Lion King , которая была основана на программном интерфейсе WinG . [7] Из-за многочисленных несовместимых графических драйверов от новых компьютеров Compaq , которые не были протестированы с интерфейсом WinG, который поставлялся в комплекте с игрой, она так часто вылетала на многих настольных системах, что родители заполонили телефонные линии поддержки Disney. [ 8] [9]
Сент-Джон осознал, что сопротивление разработке игр под Windows будет ограничением, и нанял двух дополнительных инженеров, Крейга Эйслера и Эрика Энгстрома , чтобы разработать лучшее решение, чтобы привлечь больше программистов для разработки игр для Windows. Проект имел кодовое название Manhattan Project, как и одноименный проект времен Второй мировой войны , и идея заключалась в том, чтобы заменить разработанные в Японии игровые консоли персональными компьютерами под управлением операционной системы 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] в то время как описание того, как реализовать немедленный запуск процедуры установки программного обеспечения после вставки его CD-ROM, функция, называемая AutoPlay, также была частью SDK. [15] «Прямая» часть библиотеки была так названа, поскольку эти процедуры обходили существующие основные процедуры Windows 95 и получали доступ к компьютерному оборудованию только через уровень абстракции оборудования (HAL). [16] Хотя команда назвала его «Game SDK» ( комплект для разработки программного обеспечения ), название «DirectX» пришло от одного журналиста, который высмеял схему именования различных библиотек. Команда решила продолжить использовать эту схему именования и назвать проект DirectX. [8]
Первая версия DirectX была выпущена в сентябре 1995 года как Windows Game SDK. Ее компонент DirectDraw был заменой Win32 для DCI [17] и WinG API для 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., чтобы вывести программирование 3D-графики в русло прикладного программирования. Кроме того, его можно было использовать для 2D-графики и обработки изображений, и он контролировался Советом по архитектурному обзору (ARB), в который входила компания Microsoft. [22] [23] Direct3D должен был стать контролируемой Microsoft альтернативой OpenGL, изначально ориентированной на использование в играх. По мере роста популярности 3D-игр разработчики игр обнаружили, что OpenGL можно эффективно использовать для разработки игр. [24] В этот момент началась «битва» между сторонниками кроссплатформенного OpenGL и Direct3D, предназначенного только для Windows. [25] Кстати, OpenGL в Microsoft поддерживался командой DirectX. Если разработчик решал использовать API трехмерной графики OpenGL в компьютерных играх , другие API DirectX, помимо Direct3D, часто объединялись с OpenGL, поскольку OpenGL не включает в себя все функциональные возможности DirectX (например, поддержку звука или джойстика).
В версии для консолей DirectX использовался в качестве основы для API консолей Xbox , Xbox 360 и Xbox One от Microsoft . 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]
Представленный Microsoft в 2002 году, DirectX 9 стал значимым релизом в семействе DirectX. Он принес много важных функций и улучшений в графические возможности Windows. На момент своего выпуска он поддерживал Windows 98 , Windows Me , Windows 2000 и Windows XP . По состоянию на август 2024 года он продолжает поддерживаться всеми последующими версиями Windows для обратной совместимости.
Одной из ключевых функций, представленных в DirectX 9, была Shader Model 2.0, которая включала Pixel Shader 2.0 и Vertex Shader 2.0. Они позволяли выполнять более сложную и реалистичную визуализацию графики. Она также принесла столь необходимые улучшения производительности за счет лучших возможностей аппаратного ускорения и лучшего использования ресурсов графического процессора. Она также представила HLSL , который предоставил разработчикам более доступный способ создания шейдеров.
DirectX 9.0c был обновлением оригинала и постоянно менялся на протяжении многих лет, что влияло на его совместимость со старыми операционными системами. С января 2007 года Windows 2000 и Windows XP стали минимально необходимыми операционными системами. Это означает, что поддержка Windows 98 и Windows Me была официально прекращена. С августа 2024 года DirectX 9.0c по-прежнему регулярно обновляется.
Windows XP SP2 и более поздние версии включают DirectX 9.0c, [34] но могут потребовать более новую установку распространяемого пакета среды выполнения DirectX для приложений DirectX 9.0c, скомпилированных с помощью пакета SDK DirectX 9.0 от февраля 2005 года или более поздней версии.
DirectX 9 оказал значительное влияние на разработку игр. Многие игры с середины 2000-х до начала 2010-х годов были разработаны с использованием DirectX 9, и он стал стандартной целью для разработчиков. Даже сегодня некоторые игры все еще используют DirectX 9 в качестве опции для старого или менее мощного оборудования.
Крупное обновление DirectX API, DirectX 10 поставляется с Windows Vista (выпущенной в конце 2006 года) и более поздними версиями и доступно только в них. Предыдущие версии Windows, такие как Windows XP, не могут запускать эксклюзивные приложения DirectX 10. Вместо этого программы, которые запускаются в системе Windows XP с оборудованием DirectX 10, просто прибегают к кодовому пути DirectX 9.0c, последнему из доступных для компьютеров Windows XP. [35]
Изменения для DirectX 10 были обширными. Многие бывшие части DirectX API были устарели в последнем DirectX SDK и сохранены только для совместимости: DirectInput был устарел в пользу XInput , DirectSound был устарел в пользу Cross-platform Audio Creation Tool system (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] и требует, чтобы видеокарта поддерживала Shader Model 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 Technical Preview. [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 , Variable Rate Shading, которая дает программистам контроль над уровнем детализации затенения в зависимости от выбора дизайна, Mesh Shaders и Sampler Feedback. [67] [68]
Номер версии, сообщаемый инструментом Microsoft DxDiag (версия 4.09.0000.0900 и выше), использует формат x.xx.xxxx.xxxx для номеров версий. Однако на странице DirectX и Windows XP MSDN утверждается, что реестр всегда был в формате x.xx.xx.xxxx. Поэтому, когда в приведенной выше таблице указана версия как «4.09.00.0904», инструмент Microsoft DxDiag может иметь ее как «4.09.0000.0904». [96]
Различные выпуски Windows включали и поддерживали различные версии DirectX, что позволяло более новым версиям операционной системы продолжать запускать приложения, разработанные для более ранних версий DirectX, пока эти версии не будут постепенно заменены на более новые API, драйверы и оборудование. [97]
API, такие как Direct3D и DirectSound, должны взаимодействовать с оборудованием, и они делают это через драйвер устройства . Производители оборудования должны писать эти драйверы для интерфейса драйвера устройства конкретной версии DirectX (или DDI) и тестировать каждую отдельную часть оборудования, чтобы сделать их совместимыми с DirectX. Некоторые устройства имеют только совместимые с DirectX драйверы (другими словами, необходимо установить DirectX, чтобы использовать это оборудование). Ранние версии DirectX включали актуальную библиотеку всех совместимых с DirectX драйверов, доступных в настоящее время. Однако эта практика была прекращена в пользу веб- системы обновления драйверов Windows Update , которая позволяла пользователям загружать только драйверы, соответствующие их оборудованию, а не всю библиотеку.
До DirectX 10 среда выполнения DirectX была разработана для обратной совместимости со старыми драйверами, что означает, что новые версии API были разработаны для взаимодействия со старыми драйверами, написанными для DDI предыдущей версии. Программист приложения должен был запрашивать доступные аппаратные возможности, используя сложную систему «cap bits», каждый из которых был привязан к определенной аппаратной функции. Direct3D 7 и более ранние версии работали на любой версии DDI, Direct3D 8 требует минимальный уровень DDI 6, а Direct3D 9 требует минимальный уровень DDI 7. [98] Однако среда выполнения Direct3D 10 в Windows Vista не может работать на старых аппаратных драйверах из-за значительно обновленного DDI, который требует унифицированного набора функций и отказывается от использования «cap bits».
Direct3D 10.1 вводит « уровни функций » 10_0 и 10_1, которые позволяют использовать только аппаратные функции, определенные в указанной версии Direct3D API. Direct3D 11 добавляет уровень 11_0 и «10 уровня 9» — подмножество Direct3D 10 API, разработанное для работы на оборудовании 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. XNA Game Studio Express RTM стала доступна 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 должна поддерживать; ... – Перелистывание страниц – Вертикальная синхронизация пустых кадров – Плотное микширование звука – Плотная синхронизация звуковых и видеособытий – Производительность Raw blting – Возможность установки графического режима ...
, программное обеспечение Lion King — это приложение WinToon. ... Как и WinToon, этот пример использует WinG для рисования на DIB.
DMO были заменены Media Foundation Transforms (MFT).