Что такое dx 9
Перейти к содержимому

Что такое dx 9

Обзор DirectX9.

В этой статье я постараюсь рассмотреть большинство интересных нововведений (насколько мне это позволит мой воспалённый житейскими неурядицами и радостями разум) DirectX 9, по возможности разбавляя сухие выдержки из прилагаемой с СДК документации своими собственными наблюдениями. Эта статья будет также полезна и для новичков, так как я постараюсь затронуть некоторые общие аспекты, без которых приведённое описание для человека впервые начавшего заниматься компьютерной графикой и DirectX в частности, будет неполным. Тем не менее, это всего лишь первый беглый взгляд, обзор возможностей. и обзор субъективный.

Если ранее можно было сомневаться на счёт будущего DirectX, когда скажем в версии DX 3.0, DirectInput представлял из себя враппер над Win32 функциями, то сейчас, когда с каждой новой версией объём возможностей расширяется, а написание программного обеспечения упрощается, ни у кого уже не возникает сомнения, ставить ли новую версию DirectX библиотек или нет. Тем более, вряд ли у кого-то из разработчиков, если конечно они не ориентируются на конкретную версию с определенной целью, возникнет сомнение на счёт перехода на новую версию SDK. Впрочем, ещё раз подчеркну, что это лишь моё субъективное мнение 🙂

Это страшное слово DirectX

Знатоки могут пропустить следующие несколько абзацев. Что же такое DirectX? Это набор мультимедийных драйверов, которые зачастую в обход стандартных сервисов ОС позволяют напрямую обращаться к конечному оборудованию используя по все его аппаратные возможности. Более того, некоторые Win32 сервисы используют DirectX ядро для своих собственных нужд. Набор мультимедийных АПИ и драйверов высокого уровня — пожалуй, это будет наилучшим определением. Высокого, потому что в цепочке между самим DirectX и конечным оборудованием стоят ещё и драйвера производителя конкретного оборудования. Всегда следует помнить обобщенную схему взаимодействия конечного приложения с аппаратным обеспечением: Приложение — DirectX — Драйвера — Оборудование.

DirectX состоит из нескольких компонент. Каждая из компонент обеспечивает функциональность в определенном направлении, как-то:

· DirectX Graphics — 2D/3D графика.
· DirectShow — Потоковое видео.
· DirectInput — Различные устройствами ввода.
· DirectSound и DirectMusic — Звук.
· DirectPlay — Стандартный интерфейс для создания сетевого взаимодействия на базе различных сетевых протоколов и провайдеров (Под провайдером, конечно, понимается не та фирма у которой ты дорогой читатель приобретаешь доступ в интернет :).

Примечание: Среди выше перечисленных компонент не упомянут DirectSetup — небольшой API для работы с установкой DX на конечном компьютере.

Большая часть функциональности девятой и предыдущих версий DX строится на основе COM объектов, доступ к которым мы получаем через интерфейсы. Если коротко — COM модель представляет собой более жесткое определение объектно-ориентированной модели. С COM объектами мы работаем только через интерфейсы. Каждая компонента DirectX будь то, к примеру, DirectInput или DirectSound содержит некоторое количество интерфейсов с использованием функций которых мы получаем доступ к возможностям объекта. Грубо говоря, интерфейс представляет собой класс, содержащий в себе указатели на функции, с помощью которых и происходит взаимодействие с объектом.

DirectX ни первая попытка MS сделать Windows игровой платформой! Первой попыткой исправить положение с созданием игр под новоявленную линейку операционных систем Windows был WinG API. Занимался он исключительно растровой графикой и особого распространения не получил, хотя под него было написано некоторое количество игр (например ремейк под Windows первой Цивилизации). Попробуем выстроить общую хронологию. Приблизительно в 1995 году после выхода ОС Windows 95 Microsoft выпускает Game SDK — первая версия DirectX. Основной упор — растровая двумерная графика. Кроме этого работа со звуком, сетью и устройствами ввода. 1996 год вместе с выходом Microsoft Developers Kit ознаменовывается появлением уже DirectX 2. Первые шаги в составе DirectX делает Direct3D. Всё тот же 96 — DirectX 3 можно назвать самым универсальным из всех имеющихся DirectX’ов на планете 🙂 Его функциональность доступна даже на NT 4.0. Пятая версия (ну не любят они цифру 4 🙂 выходит в 98 году и радует обновленной DirectInput компонентой которая по сути стала самостоятельной, а не враппером над Win32 функциями. Всё тот же 98 — шестая версия Direct3D (DirectX 6) уже поддерживает мультитекстурирование,stencil и w-buffer’ы. Конец 1999 года — по-своему революционная версия DirectX 7. Ура — золотая эра в компьютерной графике, о которой так долго говорили Кармаки, началась. T&L (аппаратные трансформации и освещение) и видео карты. Поддержка T&L в DirectX 7. Размышления над фиксированным конвейером. Конец 2000 года — на сцену победно выступает DirectX 8 — программируемый конвейер, шейдеры, как средство программирования (заветам Pixar мы верны!) очередной шаг от компьютерной графики к реальности. DirectDraw умер. Да здравствует DirectX Graphics!

Почему именно DirectX?

Собственно, в своем старом обзоре на примере DirectX 7 я привел доводы в пользу использования DirectX или хотя бы части его компонент. Стремление разработчиков абстрагироваться от конечного конкретного оборудования понятно — никто сейчас не хотел бы изучать спецификации работы с каждой конкретной видео или звуковой картой. Чёткое разделение области системного и прикладного программирования (в первом случае я говорю о разработчиках драйверов и соответствующих DDK (Driver Development Kit) с которым мы прикладные программисты не сталкиваемся вообще, во втором это наш DirectX SDK), жестко определенный для каждой новой версии стандарт, гарантированность работы с предыдущими версиями (по стандарту, будучи однажды определенным, COM интерфейс не может меняться — оно и понятно почему) это и есть сущность DirectX. Альтернатив DirectX не существует — существуют отдельные компоненты, но лишь OpenGL можно назвать полностью самостоятельно заменой Direct3D. Я не буду сравнивать и спорить что лучше — у меня иная цель. Кто-то может сказать — "А вот если взять стремительно развивающийся OpenAL? Чем не альтернатива DirectSound?" Проблема в том, что OpenAL под Windows не что иное, как надстройка над тем же DirectSound — просто более универсальная и удобная в использовании, а отнюдь не полноценный собственный API. Здесь решать только вам — использовать библиотеки врапперы или использовать напрямую DirectX. Прежде чем использовать тот или иной API внимательно изучите его спецификации, посмотрите импорты в DLL-ках, а самое главное прикиньте производительность — возможно, это совсем не то, что вам действительно нужно.

«Вот, наконец, настал тот час. »

Процесс распаковки закончен, и я имею удовольствие лицезреть новую версию DirectX (далее просто DX) SDK. Отмечу — DirectX рантайм не существует для Windows 95 и NT. Для NT DirectX "умер" ещё на цифре три, последней официально поддерживаемой версии для этой операционной системы (необходимо установить как минимум третий сервис пак). Отказ от поддержки ’95 назревал достаточно давно и вот, наконец-то, это свершилось. Достаточно типичная структура каталогов. Слегка пополневший набор Мастеров-Визардов (App Wizard) и утилит в /bin/Util- ничего примечательного. Главный мастер для создания DX приложения претерпел минимальные изменения — в нём добавили возможность работы с меню и реестром. Первое что бросается в глаза — наличие примеров под C#. Теперь каждый, при желании конечно, без особых проблем с реализацией и потери времени для написания вспомогательных библиотек врапперов или же создания своего собственного скриптового языка может повторить опыт разработчиков Ил-2 или Blade of Darkness (первые использовали Sun Java Runtime, вторые — Python) и реализовать всю логику игры на основе более высокоуровневого языка.

Что день грядущий нам готовит

Прежде всего, как утверждает документация, основная причина выхода DX 9 на свет это именно DirectX Graphics. Впрочем, то же самое было сказано и в DX 8.1 SDK. Для тех, кто умудрился пропустить несколько версий DX’а с прискорбием сообщаю, что DirectDraw почил нас своим присутствием и отошел в мир иной. Будучи поглощенным Direct3D, DirectDraw с версии DX 8.0 образовал DirectX Graphics. В DX 9 он вернулся, но скорее в виде истлевшей тушки, о чём немного позже.

Попробуем рассмотреть все компоненты DX начиная с наименее «пострадавших» от изменений, при этом кратко для новичков обсудим для чего каждая из компонент предназначена:

· DirectInput основными изменения стала работа над улучшением совместимости, изменений в самом API нет.
· DirectMusic увеличение производительности; несколько новых Визардов (App Wizards) для Developer Studio.
· DirectSound частота звуковых буферов поднята до 200 КГц, проведена работа над увеличением производительности, некоторое количество незначительных изменений.
· DirectPlay парочка новых провайдеров; а также поддержка Windows Powered Pocket PC 2002, куча мелких изменений и усовершенствований в API.
· DirectShow новые примеры; новые фильтры; расширенная поддержка фильтров для различных версий ОС Windows.
· DirectXGraphics поддержка пиксельных и вершинных шейдеров реализована теперь через COM интерфейсы; изменения при работе с вершинными шейдерами; поддержка карт смещения (displacement maps); антиалиазинг линий; версия 2.0 и 3.0 пиксельных и вершинных шейдеров; 2D возможности; HLSL (High-Level Shader Language); двусторонние операции со стенсил буфером (Two-Sided Stencil Ops — полезно при рендеринге теней с использованием теневых объёмов); адаптивная тесселяция.

Возвращаясь к акценту Microsoft на DX Graphics, начинаешь склоняться к мысли, что это действительно так. Если проанализировать в данный момент положение вещей на игровых фронтах, то можно отметить следующую тенденцию — для работы с графикой и устройствами ввода разработчики обычно используют DX интерфейсы или OpenGL напрямую, без использования дополнительных библиотек (или при их минимальном вмешательстве в критические по производительности части кода), в то время как при работе с сетью, звуком и видео, в первом случае большинство использует функциональность самой ОС, а во втором и третьем библиотеки третьих фирм. Почему так? DirectPlay по сути представляет собой универсальную обёртку (пусть и достаточно тонкую) над сервисами операционной системы. Основное его достижение, это наверное стандартизация работы. Кроме того — архитектурно вам эта обёртка может просто не подойти или быть избыточной. Во втором случае — развитые вспомогательные библиотеки, по сути, сами используют DX для своих нужд, однако, кроме того, сочетают в себе дополнительные вспомогательные функции будь то аудио компрессия, 3D эффекты, или же, к примеру, расширенная функциональность — не поддерживается эта версия DirectSound на данном компьютере, попробую другую; не сработает она — воспользуюсь вызовами ядра. С видео приблизительно та же ситуация. В результате чего в сфере звука и видео уже начинают определяться свои лидеры — работа с аудио это конечно Miles Sound System и бесплатные FMOD (для некоммерческого использования), OGG или OpenAL. Вспоминая о видео нельзя не упомянуть SMK/BNK форматы и библиотеки для работы с ними.

Как видите, основное число изменений действительно коснулось именно работы с графикой. Кратко рассмотрим наиболее интересные аспекты. С этой версии разработчикам доступен HLSL (High-Level Shader Language) — высокоуровневый язык работы с шейдерами. В качестве его альтернативы можно вспомнить соответствующее предложение от NVidia, а именно Cg. Сложно предсказать дальнейшее развитие обоих языковых платформ. Скорее всего, оба языка будут существовать и продолжать развиваться, как и в случае D3D vs OpenGL. Хотя в данном случае за спиной Cg стоит только NVidia. Программно реализована поддержка второй и третьей версии (!) пиксельных и вершинных шейдеров. Со второй версии вершинных шейдеров, поддержка которых представлена в DX 9, появился контроль над исполнением хода шейдера — условия if/else/endif, циклы loop/endloop и подпрограммы. Взаимодействие с контекстом GDI, а также IDirect3DDevice9::StretchRect() на пару с IDirect3DDevice9::ColorFill(), смахивает на попытку поднятия из могилы недавно положенного туда DirectDraw. Воистину неисповедимы пути Майкрософта 🙂 Впрочем, заверения о полной интеграции этих возможностей в 3D конвейер и освобождение программиста от написания небольшой обёртки для взаимодействия с 2D через 3D несомненно похвально. Формат пикселя с 10 битным каналом на каждую цветовую компоненту и 2 битами на альфа канал может показаться временным выходом из ситуации для жаждущих 64-битного представления цвета, тем не менее, аппаратная поддержка, а также в некоторых случаях совместимость оставляют желать лучшего. Карты смещения (Displacement Maps) — модификация базовой геометрии полигона вдоль нормали к нему. Карта смещения, по сути, представляет собой определенного вида текстуру. (Кто сталкивался с картами высот при рендеринге ландшафтов — это почти оно :)) В данном случае это та же текстура, с которой работает вершинный пайплайн. На данный момент небольшое количество видеокарт могут похвастаться аппаратной поддержкой этой фишки, так что в ближайшее время польза от неё сомнительна, однако как и водится достаточно соблазнительна. «Многоголовость» (MultiHead ;)) последней версии позволяет работать с адаптерами обладающими несколькими DAC’ами и позволяющими подключать несколько мониторов. Не будем обсуждать ценовой барьер конечного пользователя ;). Сам по себе панорамный обзор на несколько мониторов может быть ещё одним робким шажком в сторону глубокого погружения пользователя в игру. D3DX, если сравнивать его с тем же GLU в OpenGL, однозначно выигрывает по возможностям и функциональности. Я предпочитаю OpenGL и очень завидую этому 🙂 Наверняка в интернете найдётся подобная библиотека для OpenGL, однако факт остаётся фактом — всегда приятно осознавать, что столько возможностей находятся в стандартной поставке и полностью совместимы с самим DirectX. Остаётся желать только одного — чтобы при всей своей функциональности она не превратилась в монстроидальную поделку, половина функций которой останется не востребованными.

В целом охарактеризовать выход DX 9 можно одним простым и ёмким словом — успех 🙂 Акцент на графику как наиболее стремительно развивающуюся область и оптимизация в других компонентах как мне кажется, является правильным направлением на данный момент. Ждём DirectX 10 🙂

Что такое DirectX и как он работает

Для чего нужен DirectX в Windows

DirectX – совокупность средств (библиотек), которые позволяют программам, в основном компьютерным играм, получать прямой доступ к аппаратным возможностям видеокарты. Это значит, что вся мощь графического чипа может быть использована максимально эффективно, с минимальными задержками и потерями. Такой подход позволяет отрисовывать очень красивую картинку, а значит, разработчики могут создавать более сложную графику. Особенно заметна работа DirectX при добавлении в сцену реалистичных эффектов, таких как дым или туман, взрывы, брызги воды, отражения объектов на различных поверхностях.

Версии DirectX

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

Визуальные отличия картинки в играх в зависимости от редакции DirectX

Отличия заметны, хоть и не кардинальные. Если игрушка была написана под DX9, то изменения с переходом на новую версию будут минимальными.

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

Файлы

Файлы DirectX представляют собой документы с расширением dll и располагаются в подпапке «SysWOW64» («System32» для 32-битных систем) системной директории «Windows». Например, d3dx9_36.dll.

Расположение файлов библиотек DirectX в системной папке Windows

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

Расположение файлов библиотек DirectX в папке с установленной игрой для минимизации проблем с совместимостью

Поддержка DirectX графическими адаптерами и ОС

Максимальная поддерживаемая версия компонентов DX зависит от поколения видеокарты — чем новее модель, тем моложе редакция.

Во всех операционных системах Windows уже встроены необходимые библиотеки, и их версия зависит от того, какая ОС используется. В Windows XP может быть установлен DirectX не новее 9.0с, в семерке – 11 и неполная редакция 11.1, в восьмерке – 11.1, в Windows 8.1 – 11.2, в десятке – 11.3 и 12.

Заключение

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

ЗакрытьМы рады, что смогли помочь Вам в решении проблемы.
ЗакрытьОпишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Сравниваем DirectX 9 и Direct 11 | Важные отличия

Даже покупаемые «для учёбы» компьютеры то и дело используются для игр. И разработчики операционной системы Windows прекрасно это понимают, интегрируя прямо в код ядра библиотеки и механизмы взаимодействия с видеокартой. И DirectX – как раз такой инструмент.

Вообще, DirectX – это набор интерфейсов прикладного программирования, которые предназначены для взаимодействия приложений с «железом». Например, входящий в него пакет алгоритмов Graphics нужен для работы с видеокартой, а DirectMusic – со звуковой картой. В целом, в него входят девять пакетов интерфейсов, направленных на воспроизведение и вывод различного мультимедийного контента.

DirectX развивается одновременно с операционной системой Windows. Каждые 1-3 года выходят новые его версии, направленные на улучшение работы периферийного оборудования. И поэтому многим начинающим геймерам может быть непонятно, чем отличается одна итерация от другой.

Разберёмся, чем отличается Direct 9 от DirectX 11 и других версий.

DirectX 9

Интерфейс DirectX 9 был представлен одновременно с операционной системой Windows Server 2003 и входит в неё в качество основного API взаимодействия с графическим и звуковым оборудованием.

Главным достоинством интерфейса стала поддержка шейдеров. Шейдеры – это специальные подпрограммы, которые необходимы для определения геометрических свойств объекта. Так, благодаря ним предметы в играх могут отбрасывать реалистичные тени, в них могут отражаться другие вещи и так далее. Шейдеры делают игры более красивыми и кинематографичными, виртуальные миры кажутся более натуральными.

Пока не особо понятно, почему компания Microsoft решила имплементировать DX9.0 в серверную операционную систему. Однако в 2004 году она же выпустила Windows XP SP2, и этот API входил в неё. Именно так и началось распространение DX9.0 среди домашних пользователей.

По сути, все игры, выпущены в период с 2004 года по 2009 год, ориентированы на использование DirectX 9. Это же справедливо и для видеокарт. Как настольные, так и мобильные (предназначенные для ноутбуков), они предназначены для работы именно с этим интерфейсом.

Достоинства

Повышенная производительность на очень старых компьютерах.

Недостатки

Сравнительно узкое распространение (нативно встроен только в Windows XP SP2);

Ограниченная производительность за счёт не самой правильной работы с многопоточностью.

Кстати! Казалось бы, куда делся DirectX 10? А он никуда и не девался, он есть. Десятая версия интерфейса вышла в 2006 году вместе с операционной системой Windows Vista. Но сама эта среда была настолько «тормознутой» и «глючной», что о ней предпочли побыстрее забыть и создатели, и разработчики игр.

DirectX 11

Интерфейс DirectX 11 был представлен в 2009 году вместе с операционной системой Windows 7 и тут же «принят на вооружение» как производителями видеокарт, так и разработчиками компьютерных игр. Причина такой популярности очень проста – многопоточность.

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

После реализации этого интерфейса многоядерные видеокарты стали производиться чаще и активнее. Например, у NVIDIA в последних моделях графических ускорителей вычислительный блок может состоять из 3-4 тысяч ядер CUDA! Благодаря этому скорость обработки визуальной информации увеличивается многократно.

В целом, главными преимуществами одиннадцатой версии интерфейса стали:

Поддержка многопоточности на многоядерных графических ускорителях;

Увеличение КПД одноядерных и старых видеокарт;

Снижение интенсивности нагрева графических ускорителей.

Кроме того, это API принесло нативную поддержку «вытянутых» мониторов формата 16:9. Благодаря этому внешний вид операционной системы в целом и рабочего стола в частности стал намного привлекательнее. Иконки перестали наезжать друг на друга!

Однако для работы DX11 требуется больше ресурсов. Поэтому в некоторых случаях на старых играх производительность с DX11 будет ниже, чем с DX9 – если, конечно, игра позволяет выбрать интерфейс, через который будет взаимодействовать.

Достоинства

Повышенная производительность при использовании многоядерных видеокарт;

Повышение КПД при работе со старыми и слабыми графическими ускорителями;

Поддержка новых визуальных эффектов.

Недостатки

Повышенное потребление ресурсов компьютера, не связанных с графической подсистемой – например, процессора или оперативной памяти;

Отсутствие обратной совместимости – предыдущие версии «винды» не поддерживают одиннадцатое поколение даже после установки распространяемого пакета.

Преемником DX11 стал DirectX 12. Этот интерфейс был представлен вместе с операционной системой Windows 10 в 2005 году и принёс поддержку шейдерной модели 5.1, которая обеспечивала ещё большую реалистичность при отображении текстур, теней и свечения.

Различия между DirectX 9 и DirectX 11 – и что выбрать

Итак, основным различием между DX9 и DX11 стала поддержка многопоточных вычислений. Впрочем, этим разница не ограничивается.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *