Двадцать лет спустя. Эволюция API Microsoft DirectX

API Microsoft DirectX

Кoмпaния Microsoft oфициaльнo объявила о том, что осенью 2015 года состоится релиз новой операционной системы Windows 10.

А вместе с ней и включение 12-го поколения DirectX.

С момента появления этого API прошло почти двадцать лет, поэтому в этот раз мы решили оглянуться и вспомнить, как создавалась и развивалась программная оболочка для компьютерной графики на протяжении этого длинного отрезка.

Сегодня DirectX, разрабатываемый компанией Microsoft, уже воспринимается как должное. Все привыкли, что этот API является неотъемлемой частью Windows. Новая итерация оси под номером 10 не стала исключением.

Ещё осенью прошлого года Microsoft анонсировала двенадцатое поколение DirectX. Этому событию предшествовало пять лет почти полной тишины из стана Microsoft.

Группа ограничивалась только плановыми обновлениями API, и никакой определенности насчет будущего DirectX не было. Масла в пламень подливало и то, что многие компании-разработчики в открытую поддерживали конкурирующую технологию OpenGL.

В их цифра входила, например, компания Valve. Вдобавок ко всему, компания AMD представила наш низкоуровневый программный интерфейс Mantle, тот, что должен был собрать конкуренцию как OpenGL, так и DirectX.

К счастью, Microsoft не вышла из игры, и все это момент разработчики компании упрямо трудились над созданием DirectX 12, который станет частью анонсированной в январе операционной системы Windows 10. Релиз десятки запланирован на ближайшую осень, а это значит, что уже в конце 2015 (либо в начале 2016) мы увидим первые игры, поддерживающие свежеиспеченный API.

DirectX

Чтобы негусто скрасить период ожидания, мы предлагаем вам вспомнить, как создавался и развивался DirectX на протяжении последних 20 лет.

С чего все начиналось. DirectX 1.0

История появления DirectX берет близкое зачин в первой половине 1990-х годов, когда компания Microsoft занималась разработкой операционной системы Windows 95, которая должна была прийти на смену MS-DOS. Главным преимуществом MS-DOS было то, что она пользовалась популярностью у разработчиков игр.

По мнению трех программистов Microsoft — Крэйга Эйслера (Craig Eisler), Алекса Сен-Джона (Alex St. John) и Эрика Энгстрома (Erik Engstrom) — даже следом выхода Windows 95 многие разработчики могли воротить предпочтение MS-DOS как больше подходящей для создания игр платформе.

Чем же дос так нравился программистам? Все занятие в том, что, программируя под MS-DOS, разработчики обращались напрямую к железу, то есть имели прямой доступ к видеокарте, клавиатуре, мыши, звуковым устройствам и другим частям системы.

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

Разработчики игр

Так или иначе, но обращаться напрямую к аппаратной части компьютера в Windows 95 стало невозможно. Причиной этого была новая защищенная модель памяти, которая запретила прямой доступ к устройствам.

Шел 1994 год, Windows 95 была на подходе, и Microsoft требовалось быстрое и эффективное заключение возникшей проблемы. Им стал API DirectX, за создание которого отвечали как раз Эйслер, Сен-Джон и Энгстром. Релиз DirectX версии 1.0 состоялся 30 сентября 1995 года под названием Windows Games SDK.

Первая итерация DirectX была крайне упрощена сравнительно своих будущих версий. Она поддерживала вывод двухмерной графики, звуков, а ещё обрабатывала данные, поступающие с различных манипуляторов.

Windows 95

Разработчики игр встретили DirectX достаточно прохладно. Во-первых, они не были уверены, что Microsoft будет помогать API на протяжении долгого времени.

Недоверие к Microsoft возросло вслед за тем того, как компания свернула поддержку API WinG, который рассматривался как один из помощников в портировании игр с DOS на Windows. Во-вторых, девяносто пятая была требовательней к аппаратной части, из-за чего производительность в играх, как правило, снижалась в сравнении с MS-DOS. Ну и в-третьих — у DOS было огромное число энтузиастов, которые ни в какую не хотели программировать под Windows.

Стоит сказать, что к моменту появления DirectX разработчикам игр уже был доступен API OpenGL, разработанный компанией Silicon Graphics Inc и представленный в 1992 году. Но в Microsoft решили сходить своим путем. В дальнейшем противостояние DirectX и OpenGL было похоже на битву Давида супротив Голиафа.

Microsoft, раньше всего, брала своей финансовой мощью, а Silicon Graphics — репутацией и техническим опытом. Так, отбор в пользу OpenGL тогда сделал создатель Doom и Quake Джон Кармак (John Carmack). Он считал, что программный код DirectX чрезмерно непростой для программирования, и вследствие этого в открытую поддерживал более дружелюбный интерфейс OpenGL.

Конечно же, на планы Microsoft это никак не повлияло, но прохладная саммит DirectX со стороны разработчиков ясно дала понять, что работы у инженеров компании единый непочатый край.

программный код DirectX

В роли догоняющего. DirectX 2.0 и далее

Следующее поколение API DirectX было представлено в середине 1996 года. Наконец-то в состав программного интерфейса были включены пакеты Direct3D и DirectPlay. С тех пор API состоял из следующих компонентов:

  • DirectDraw. Использовался для отрисовки двухмерной графики.
  • Direct3D (D3D). Использовался для отрисовки трехмерной картинки.
  • DirectPlay. Представлял собой сетевой программный интерфейс.
  • DirectInput. Использовался для обработки данных, поступающих с различных манипуляторов.
  • DirectX Media. Представлял собой комплект API для работы с мультимедиа.
  • DirectMusic. Использовался для проигрывания музыки.
  • DirectSound. Использовался для записи и воспроизведения звука.
  • DirectSound3D. Предназначен для работы с пространственным звуком.
  • DirectX Media Objects. Потоковые объекты, такие как энкодеры, декодеры и эффекты.
  • DirectSetup. Отвечал за установку всех компонентов DirectX.

DirectX 2.0 предназначался для операционных систем Windows 95 и Windows NT 4.0. С момента выпуска первой ОС прошло окончательно всего ничего времени, потому для этой версии было выпущено сильно немного игр. Microsoft воспользовалась моментом и начала энергично продвигать API посреди разработчиков.

С целью этого во час конференции GDC в 1996 году Microsoft даже устроила специальное мероприятие, где представила некоторые новые возможности DirectX.

Вскоре затем появления второго поколения API свет увидел и DirectX 3.0. Это случилось в сентябре 1996 года. Ближе к концу года были представлены дополнения в виде версий 3.0a и 3.0b. В сравнении со второй итерацией API третье поколения получило лишь незначительные изменения, которые так и не смогли повлиять на положение DirectX среди девелоперов.

DirectX 5.0

Немного исправить ситуацию получилось у DirectX 5.0, который появился в августе 1997 года. А что же случилось с четвертым поколением? Дело в том, что разработка 4-й и 5-й итераций API началась одновременно. DirectX 4.0 рассматривался как решение на самое ближайшее время.

Оно не должно было привнести каких-либо кардинальных изменений в сравнении с версией 3.0 — только несколько новых «фич». В то же время пятая версия разрабатывалась с прицелом на перспективу. Однако разработчики не проявили интереса к новым возможностям DirectX 4.0, Microsoft свернула проект. Во избежание путаницы было решено пропустить версию 4.0 и сразу выпустить DirectX 5.0.

Главным достоинством пятой итерации DirectX стал намного упрощенный код. Писать программы с помощью API стало легче, и DirectX уже не вызывал у девелоперов такой неприязни, как поначалу. Главным же недостатком пятой «директрисы» было отсутствие поддержки технологии мультитекстурирования (multitexturing).

Суть этой технологии заключается в наложении на грань сразу нескольких текстур за один проход. Но тут Microsoft улыбнулась удача. В то время алгоритмы мультитекстурирования были не столь эффективны, а железо — недостаточно производительным для того, чтобы применять технологию без ущерба для производительности.

Чаще всего вместо нее разработчики использовали обычные многократные проходы, во время каждого из которых на грань накладывалась только одна текстура. Для девелоперов было важно, чтобы новые игры запускались и на старых машинах, поэтому в большинстве приложений мультитекстурирование не использовалось. Microsoft от этого лишь выиграла.

 GeForce 256

Главный недостаток DirectX 5.0 был исправлен уже в следующем поколении API под логичным номером 6. Эта итерация DirectX появилась в августе 1998 года и вновь получила улучшения в области создания программ — код стал еще проще и еще понятнее. Также DirectX 6.0 мог похвастаться поддержкой мультитекстурирования.

Но исправившись, Microsoft допустила очередную ошибку — новый API не поддерживал на аппаратном уровне технологию T&L (Transform and Lightning), которая предназначалась для обработки освещения и трансформации объектов в реальном времени. Как показало время, у Microsoft был еще год в запасе для реализации поддержки T&L. GeForce 256, первая видеокарта с движком T&L, появилась только в 1999 году.

Кстати, начиная с этой версии, DirectX стал своего рода мультиплатформенным продуктом. Microsoft пыталась продвинуть свою операционную систему Windows CE для консолей и вместе с «осью» поставляла специальную версию DirectX 6. Однако эксперимент, скажем прямо, не удался.

DirectX 7.0

DirectX 7.0 был выпущен в сентябре 1999 года и исправил главный недостаток своего предшественника, получив поддержку технологии T&L на аппаратном уровне.

Кроме этого, в рамках DirectX 7.0 Microsoft представила новый формат текстур с расширением .dds. Плюс новая версия API умела выделять вершинные буферы в видеопамяти. Это было первое существенное преимущество DirectX над OpenGL за все время существования API. И что важно, Microsoft продолжала гнуть свою линию по развитию мультитекстурирования.

В этой области DirectX 7.0 также получил несколько новшеств, но написание кода для использования мультитекстурирования все еще было очень и очень непростой задачей даже для опытных девелоперов.