DirectX SDK
Директ Икс СДК представляет собой набор необходимого программного обеспечения для разработчиков, предназначенный для создания софта с использованием тех или иных возможностей библиотеки DirectX. То есть этот комплект будет полезным исключительно для интересующихся в подобного рода вещах людей, например, разработчиков компьютерных игр и т. д. Для рядовых пользователей он совсем не нужен. В данной статье мы разберемся с его особенностями. В конце будет размещена инструкция, как и где скачать DirectX SDK.
Подробности
Три английские буквы в названии – сокращение от Software Development Kit. Дословный перевод здесь – «набор средств разработки». То есть он нужен не для банального запуска игр, а для их создания, а также других программ на базе библиотеки Директ Икс от компании Microsoft. Разумеется, совместимость у него только с операционной системой Windows.
Это основные моменты, которые стоит знать, остальная информация будет иметь сугубо технический характер. Так что мы переходим к основной части статьи – непосредственно инсталляции.
Инсталляция
Мы постарались вкратце объяснить, что это такое – DirectX SDK. Загрузить данный набор выйдет с официального сайта Microsoft. Процедура довольно простая:
В меню «Пуск» появится новый раздел с именем «Microsoft DirectX SDK…», в котором и будут все требуемые ярлыки.
Где находится пакет SDK для DirectX?
начиная с Windows 8, пакет SDK DirectX входит в состав Windows SDK.
Мы первоначально создали пакет SDK DirectX как высокопроизводительную платформу для разработки игр на Windows. По мере разработки технологий DirectX они стали важны для более широкого спектра приложений. Сегодня доступность оборудования Direct3D на компьютерах, в том числе традиционных настольных приложений, для использования аппаратного ускорения графики. В параллельном режиме технологии DirectX интегрируются с Windows. Теперь DirectX является основной частью Windows.
поскольку Windows SDK является основным пакетом SDK для разработчиков Windows, теперь в него включен DirectX. теперь вы можете использовать Windows SDK для создания отличных игр для Windows. чтобы скачать пакет sdk Windows 8. x или пакет sdk для Windows 10, см. раздел Windows SDK и emulator archive.
следующие технологии и средства, ранее являющиеся частью пакета SDK для DirectX, теперь являются частью Windows SDK.
| Технология или инструмент | Описание |
|---|---|
| Windows Графические компоненты | заголовки и библиотеки для Direct3D и других Windows графических интерфейсов api, таких как Direct2D, доступны в Windows SDK.
|
| Компилятор HLSL (FXC.EXE) | компилятор HLSL — это инструмент в соответствующем подкаталоге архитектуры в папке bin в Windows SDK.
Сведения о разработке DirectX 12 см. в статье новейшее поколение PIX на Windows |
| XAudio2 для Windows | API XAudio2 теперь является системным компонентом в Windows 8. x и Windows 10. заголовки и библиотеки для XAudio2 доступны в Windows SDK. сведения о поддержке Windows 7 см. в разделе XAudio2Redist. |
| Ксинпут для Windows | API ксинпут 1,4 теперь является системным компонентом в Windows 8. x и Windows 10. заголовки и библиотеки для ксинпут доступны в Windows SDK.
|
| кснамас | Последняя версия КСНАМАС, которая обновляется для новых наборов инструкций, а также ARM/ARM64, теперь директксмас. заголовки для директксмас доступны в Windows SDK и в GitHub. |
| Панель управления DirectX и средство просмотра возможностей DirectX | служебные программы directx для панели управления и средства просмотра возможностей directx включены в соответствующий подкаталог архитектуры в папке bin в Windows SDK. Средство просмотра возможностей DirectX также доступно на GitHub. |
| XACT | Средство для работы с Xbox Audio Cross Platform (активной платформы) больше не поддерживается для Windows. |
| Обозреватель игр и гдфмакер | API обозревателя игр представляет собой игры для пользователей Windows. API обозревателя игр поддерживается только в Windows Vista и Windows 7. используйте средство студии файла определения игр (GDFMAKER.EXE), чтобы объявить рейтинги игр для приложений Windows Store. средство студии файла определения игр (GDFMaker.exe) включено в подкаталог x86 в папке bin в Windows SDK и поддерживает приложения Windows магазина и классические приложения Win32. Пакет SDK для DirectX не устанавливается, если у вас уже установлена определенная версия распространяемого пакета Visual C++ 2010. Дополнительные сведения о и решении для устранения этой проблемы см. в разделе об ошибке «S1023» при установке пакета SDK DirectX (июнь 2010). Использование проектов DirectX SDK с Visual Studioпримеры из пакета SDK DirectX за июнь 2010 поддерживаются с номерами sku premium Visual Studio (Microsoft Visual Studio Professional 2012, Microsoft Visual Studio Ultimate 2012, Microsoft Visual Studio Professional 2013 или Microsoft Visual Studio Ultimate 2013) на Windows 7, а также Windows 8 и более поздних версий. из-за перехода заголовков и библиотек DirectX в Windows SDK изменения параметров проекта необходимы для правильной сборки этих примеров с учетом того, как пакет SDK Windows 8 и более поздних версий упакован с номерами sku premium Visual Studio. Эти действия также применяются к собственным проектам, которые зависят от пакета SDK DirectX. Пакет SDK для DirectX не устанавливается, если у вас уже установлена определенная версия распространяемого пакета Visual C++ 2010. Дополнительные сведения о и решении для устранения этой проблемы см. в разделе об ошибке «S1023» при установке пакета SDK DirectX (июнь 2010). убедитесь, что используется один из номеров sku premium Visual Studio. Microsoft Visual Studio Express 2012 для Windows 8 или Microsoft Visual Studio Express 2013 для Windows не будет создавать Windows 8 и более поздние настольные приложения, такие как примеры пакета SDK для DirectX. чтобы установить один из sku Visual Studio premium, перейдите по ссылке: Visual Studio downloads и следуйте инструкциям. Используйте пример браузера DirectX SDK для установки файлов проекта для требуемого примера. откройте файл решения, совместимого с Microsoft Visual Studio 2010 (с суффиксом _ 2010). при открытии образца в системе, в которой установлены только Microsoft Visual Studio 2012 или Microsoft Visual Studio 2013, появляется следующее сообщение: «это решение содержит один или несколько проектов, использующих более раннюю версию VC++ компилятора и библиотек. каждый проект можно обновить для использования VC++ компилятора и библиотек (v110). Выберите параметр Обновить в этом диалоговом окне, чтобы обновить его перед открытием проекта. в противном случае можно обновить компилятор и библиотеки Visual Studio 2012 или Visual Studio 2013 C++ 11 после загрузки, щелкнув решение правой кнопкой мыши и выбрав пункт обновить VC++ проекты. D3DX не считается каноническим API для использования Direct3D в Windows 8 и более поздних версий и, следовательно, не входит в соответствующие Windows SDK. Изучите альтернативные решения для работы с API Direct3D. для проектов предыдущих версий, таких как примеры sdk для directx Windows 7 (и более ранних версий), необходимо выполнить следующие действия для создания приложений с помощью D3DX с использованием пакета sdk directx: измените каталоги VC++ проекта следующим образом, чтобы использовать правильный порядок для заголовков и библиотек пакета SDK. iv. Щелкните Применить. Удалите все ссылки на Дксгитипе. h в проекте. этот заголовок не существует в Windows SDK, и версия пакета SDK для DirectX конфликтует с новым winerror. h. Все библиотеки DLL D3DX устанавливаются на компьютер разработчика при установке пакета SDK для DirectX. Убедитесь, что необходимые зависимости D3DX перераспределяются с любым примером или с приложением, если оно перемещается на другой компьютер. Имейте в виду, что технологии замены для текущего использования D3DX11 включают директкстекс, директкстк, директксмеши уватлас. D3DXMath заменяется на директксмас. Убедитесь, что вы используете новую версию компилятора шейдеров HLSL, просматривая следующие условия: изменение исполняемого каталога на шаг 5 приведет к тому, что сборки проекта будут использовать FXC из Windows SDK установки. Имейте в виду, что файлы HLSL теперь официально распознаются Visual Studio. Их можно добавить как файлы проекта и задать параметры компилятора с помощью системы проектов. При вызове компиляции во время выполнения с помощью устаревшей библиотеки DLL D3DX будет использоваться неправильная старая версия компилятора HLSL. Замените все ссылки на * API D3DXCompile, D3DX10Compile * и D3DX11Compile * в коде на функцию D3DCompile в D3DCOMPILER _46.DLL или D3DCOMPILER _47.DLL. 47.DLL D3DCOMPILER _46.DLL или D3DCOMPILER _ из Windows SDK не является системным компонентом и не должны копироваться в системный каталог Windows. Эту библиотеку DLL можно распространить на другие компьютеры с помощью приложения в качестве параллельной библиотеки DLL. любой проект, использующий API ксинпут и предназначенный для работы в Windows 7 или более ранних версиях Windows должен использовать либо устаревшую версию (9.1.0), либо явно включать заголовки и библиотеки для этого компонента из пакета SDK DirectX. Заголовок Ксинпут и КСИНПУТ. LIB, включенный в Windows SDK, предназначен только для версии (1,4), которая поставляется в составе Windows 8 и более поздних версий. Один и тот же заголовок можно использовать с XINPUT9 _ 1 _ 0. lib для использования устаревшей версии, которая включена в более ранние версии Windows. Устаревшая версия Ксинпут не обнаруживает полные возможности или поддерживает аудио, интегрированную с контроллером, поэтому, если требуется поддержка этих функций, необходимо использовать DirectX SDK версии (1,3). Чтобы использовать Полнофункциональный API-интерфейс нижнего уровня Ксинпут, вы должны #include напрямую воспользоваться заголовком ксинпут из пакета SDK DirectX: . а в параметрах компоновщика для дополнительных зависимостей выполните прямую ссылку на библиотеку DirectX SDK Ксинпут: % Дкссдк _ dir% include \ \ ксинпут. lib _двоичный3.DLL XINPUT1 устанавливается в каталоги Windows систем с помощью установки пакета SDK DirectX на компьютере разработчика. Вам потребуется повторно распространить этот двоичный файл с помощью приложения, используя установку DirectX из пакета SDK DirectX. любой проект, использующий API XAudio2 и предназначенный для работы в Windows 7 или более ранних версиях Windows должен использовать либо более старую версию (9.1.0), либо явно включать заголовки и библиотеки для этого компонента из пакета SDK DirectX. заголовки XAudio2 и библиотеки, включенные в Windows SDK предназначены только для версии (2,8), которая входит в состав Windows 8. Например, при использовании XAudio2 необходимо #include напрямую заXAudio2 заголовки из пакета SDK DirectX: . а в параметрах компоновщика для дополнительных зависимостей выполните прямую ссылку на библиотеку DirectX SDK XAudio2: % Дкссдк _ dir% include \ \ XAudio2. lib _двоичный7.DLL XAUDIO2 устанавливается в каталоги Windows систем с помощью установки пакета SDK DirectX на компьютере разработчика. Эти библиотеки необходимо распространить вместе с приложением с помощью установки DirectX из пакета SDK DirectX. если полученное приложение поддерживает Windows Vista с пакетом обновления 2 (sp2), а также Windows 7 и Windows 8 и более поздних версий, установите определение препроцессора с именем _ WIN32 _ WINNT в 0x600. если он поддерживает только Windows 7 и Windows 8 и более поздних версий, задайте для него значение 0x601. Связанные темыЗаписи блога, посвященные играм для Windows и DirectX SDK Microsoft DirectX – это очень просто!Microsoft DirectX – это очень просто! О чем пойдет речь в статье: Когда говорят о “Microsoft DirectX”, то разные категории людей могут вкладывать в это различные понятия. Давайте разберемся, что может иметься в виду и что это такое на самом деле, для чего он нужен и чем же отличаются последние версии DirectX друг от друга. Microsoft DirectX – это очень просто! О чем пойдет речь в статье:
Для чего нужен DirectX? Что входит в DirectX? Что такое шейдер? Зачем нужны шейдеры? Конвейер и шейдерная модель Что дает пользователю компьютера очередная версия DirectX? DirectX 10. Эволюционное обобщение пройденного DirectX 10.1 Как же теперь жить? И пара слов об OGL Когда говорят о “Microsoft DirectX”, то разные категории людей могут вкладывать в это различные понятия. Давайте разберемся, что может иметься в виду и что это такое на самом деле, для чего он нужен и чем же отличаются последние версии DirectX друг от друга. Обратимся к первоисточнику – самой Microsoft: http://msdn2.microsoft.com/en-us/library/bb219737.aspx Учитывая, что API (Application Programming Interface) – это интерфейс разработки программ, буквальный перевод звучит так: “DirectX – это набор низкоуровневых программных интерфейсов для создания игр и других высокопроизводительных приложений. Он включает в себя поддержку высокопроизводительной 2D и 3D графики, звука и устройств ввода”. В действительности, Microsoft предоставляет это определение для разработчиков программного обеспечения, следовательно, само собой под DirectX подразумевается APIs DirectX. А с точки зрения пользователя все выглядит несколько иначе. Поэтому дадим более общее определение, хотя оно при этом будет подлиннее. DirectX – это технология Microsoft для операционных систем семейства Windows, предоставляющая разработчику программного обеспечения интерфейсы (то есть, комфортную среду интерактивного взаимодействия) для создания программ, эффективно использующих графические, мультимедийные устройства и устройства ввода, и обеспечивающая низкоуровневые утилиты (то есть эффективные высокооптимизированные программы) для взаимодействия этих устройств с прикладной программой и операционной системой через соответствующие драйверы. Другими словами, вполне логично различать понятия DirectX как технологии в целом, как наборов программных интерфейсов при создании программного обеспечения и как программной составляющей операционной системы, отвечающей за поддержку мультимедийных и графических устройств, а также устройств ввода. Для поддержки разработчиков программного обеспечения Microsoft предоставляет DirectX SDK (Software Developing Kit) – набор программ и утилит разработчика программного обеспечения под технологию DirectX, а для системных программистов и разработчиков компьютерного оборудования есть WDK (Windows Driver Kit )– набор программ и утилит для разработки драйверов. Оба этих программных продукта распространяются свободно и доступны для скачивания с сайта Microsoft. К слову сказать, по прилагаемой к DirectX SDK лицензии, все графические и мультимедийные файлы и компьютерные модели разрешается использовать в своих программах для демонстрационных некоммерческих целей. Теперь можно смело утверждать, что если моя видеокарта поддерживает DirectX, то это означает, что она способна выполнять программы, созданные с использованием API DirectX, при условии наличия соответствующего драйвера и поддержки со сороны операционной системы. Сегодня уже трудно найти видеоадаптер, не поддерживающий хотя бы DirectX 7, поэтому для нормальной работы приложения, разработанного в соответствии с конкретной спецификацией DirectX, нужно, во-первых, чтобы операционная система поддерживала эту версию (плюс к тому были установлены соответствующие или более новые библиотеки DirectX в виде dll – файлов, которые обычно автоматически устанавливаются при инсталляции программы, если на компьютере установлены более старые версии библиотек), во-вторых, чтобы видеокарта была с поддержкой соответствующего DirectX и, в третьих, чтобы был установлен подходящий драйвер видеокарты. Несоблюдение первых двух условий не позволит приложению запуститься, а в случае с драйвером может оказаться так, что самый последний доступный драйвер не является лучшим для конкретного приложения (вплоть до полной неработоспособности программы), хотя, в целом, действует правило, что лучше использовать самые свежие версии драйверов и рекомендуется этого правила придерживаться. Несколько слов о том, что явилось катализатором появления DirectX. Безусловно, в первую очередь, это компьютерные игры. Персональные компьютеры и сейчас далеки от вычислительной мощности, позволяющей кинематографически реалистично воспроизводить на экране монитора с высоким разрешением полноценное интерактивное 3D действие в реальном режиме времени, тем более это им было не под силу двадцать лет назад. Поэтому программисты всегда боролись за каждый байт и мегагерц компьютерных ресурсов (а основные ресурсы – это процессорное время и оперативная память), выжимая все из топовых аппаратных решений, доступных на рынке. И в эпоху, когда основной ОС домашних компьютеров была DOS, очень много игр писалось на языке Ассемблер, что было достаточно трудоемко, но в умелых руках позволяло использовать 100% возможностей техники, так как позволяло напрямую программирвать видеокарту, модель распределения памяти и управлять системными ресурсами. Для тех, кто не застал это время, поясню, что, в отличие от Windows, MS-DOS (наиболее распространенная ОС того времени) – это однозадачная ОС, то есть запускаемая программа забирала все компьютерные ресурсы себе. Чтобы запустить другую программу, первую нужно было обязательно завершить, что часто делалось простой перезагрузкой компьютера. Производители видеокарт тоже включились в эту гонку, выпуская новые и новые видеокарты, которые частенько и опережали свое время, и оказывались впоследствии тупиковым направлением развития. Но это уже совсем другая история. Появление новой ОС – Windows 3.х привело к противоречию между конкретной программой, требующей в свое распоряжение максимальное количество ресурсов, и многозадачной ОС, делящей эти ресурсы по “справедливости” между приложениями. Кроме того, драйверы устройств перестали быть доступны программе напрямую – появилась прослойка в виде виртуальных драйверов. Несмотря на имеющуюся иерархию приоритетов у выполняемых в ОС программ, в первых версиях Windows быстродействие игр оказывалось неудовлетворительным. Поэтому долгое время DOS, которой разработчики игр отдавали предпочтение, сосуществовала параллельно с Windows. Но такое положение вещей не вписывалось в стратегию развития Microsoft и привело к интенсификации усилий по решению имеющихся проблем с быстродействием. Так появилcя Game SDK, впоследствии сменивший название на DirectX, призванный сделать программную прослойку от выполняемой программы до мультимедийного и графического оборудования универсальной, не требующей детального знания оборудования (это – дело производителя, задача которого – написать функциональный драйвер), легко создаваемой и сопровождаемой, минимальной по длине и максимальной по быстродействию. Мы выяснили, что означает, фраза “моя карта поддерживает DirectX”. Впрочем, тут есть один нюанс. DirectX – это собирательное понятие набора программных компонент, и, хоть графическая часть и есть его наиболее существенная, сложная и объемная составляющая, там присутствует и поддержка оборудования, отличного от видеокарт. К примеру, видеокарта вряд ли поддерживает DirectInput (хотя технически ничто не мешает, например, установить на ней пару USB-разъемов для подключения джойстика или геймпада). Поэтому, правильно говорить о поддержке видеокартой компоненты DirectGraphics (которая, на самом деле, только “прикрывает” настоящие компоненты – Direct3D и Direct3DХ), составной части DirectX, но маркетинг – он и в Африке маркетинг – поэтому не только короче, но и гораздо солиднее звучит именно вариант поддержки DirectX целиком! И никаких гвоздей! Поэтому от этого стереотипа уже практически не избавиться. Мы ведь живем, по большей части, в демократических государствах, и, раз большинство считает, что поддерживает, то несколько голосов за правду утонут в общем хоре негодования. Чтобы не прослыть белой вороной, заявляем – наши видеокарты поддерживают DirectX! Однозначно и в полном объеме! То, что в этом случае видеокарты также должны поддерживать DirectInput, призванный обеспечить работу устройств ввода, таких как клавиатура, мышь, джойстики и другие манипуляторы, уже упомянуто. Все же, для полноты картины, перечислим все компоненты, которые входят в современную версию DirectX:
DirectSound DirectInput
Главная цель создания DXGI – управление низкоуровневыми задачами, которые не требуют включения в библиотеку исполнения DirectX – речь идет о более рациональном разделении установочных и исполняемых процедур. Последняя версия DirectX SDK на момент написания статьи (Август 2007) добавляет еще одну компоненту, The Windows Vista Game Explorer, Слово «шейдер» очень часто употребляют неправильно, не понимая что это такое и отождествляя его с частью компьютерного оборудования. Но это понятие не относится к категории «hardware». Зачем нужны шейдеры? Конвейер и шейдерная модель Было время, когда о шейдерах никто и не думал. Хорошее было время! Откуда же они свалились на нашу голову? Для того, чтобы понять это, надо знать, как работает современная видеокарта и графический процессор и как это было в то далекое время, когда дети, увидев морскую волну, не кричали радостно “Шейдеры! Шейдеры!”. Поэтому будет уместно сделать маленькое лирическое отступление от непосредственной темы DirectX и разобраться в этом. Я постарался максимально упростить технические детали, насколько это мне удалось – судить вам. Попробуем упрощенно описать, как функционирует видеокарта. Тут удобно применить технологию “черного ящика”, широко используемую в автоматике. У ящика есть вход и выход, внутренняя функциональность нас интересует весьма приблизительно, причем не интересует, как это происходит на самом деле, а важно лишь то, как это видится снаружи “черного ящика”. Этим черным ящиком и будет выступать видеокарта. Мы должны узнать, что подается на вход, что является выходом и в общих чертах понять, что происходит внутри этого “черного ящика”. Что является выходом, большинству сразу понятно – к видеокарте подключается монитор и то, что мы на нем видим, и есть выход. Пока будем считать, что так оно и есть, хотя это является истиной далеко не всегда – карта может работать ведомой в SLI или CF без монитора, видеокарта может производить неграфические вычисления и также не подключаться к монитору, выполняя полезную работу как сопроцессор к ЦПУ, либо часть процессорного времени ГПУ может отдаваться задачам, не связанным непосредственно с графикой. Таким образом, данные о вершинах хранятся в памяти, в буфере вершин, и периодически поступают на обработку в видеокарту. Что происходит с ними дальше – зависит от того, какую версию DirectX поддерживает видеокарта и какую версию DirectX поддерживает программа. Грамотное DirectX приложение при старте проверяет, удовлетворяют ли возможности видеокарты требованиям программы, и только при положительном ответе (после опроса системных данных) разрешает работу. Теперь самое время обсудить, что такое “графический конвейер”. Тут – почти полная аналогия с заводским конвейером. От входа до выхода бежит лента транспортера, на которую поступают входные детали. И пока они на этой ленте направляются к концу конвейера, все, кто работает за конвейером, в соответствии с порученными технологическими операциями, производят соответствующие манипуляции, кто-то что-то привинчивает, или наоборот, отвинчивает, и в итоге начальную деталь вообще не узнать, ибо, как принято говорить, с конвейера уже сходит готовый продукт. Представьте, что конвейер стал автоматизированным. Все операции выполняются роботами – станками и манипуляторами. Роботы запрограммированы раз и навсегда на выполнение конкретной операции в технологической цепочке. Если на транспортер конвейера ставили более мощный двигатель или рядом ставили еще один конвейер, оказывалось, что старые роботы уже сдерживают увеличение пропускной способности конвейера, независимо от числа линий. Поэтому в таких случаях каждый раз приходится менять роботов на более современных. Опять же, замена требовалась, если хотя бы чуть-чуть менялась технология обработки деталей. Со временем инженеры так доработали роботов, что теперь стало возможно автоматически, во время работы, оперативно изменять их программу, в зависимости от того, какие детали находятся на конвейере и какие операции требуется выполнять. Кроме того, за процессом работы линий конвейеров стал наблюдать диспетчер, который следит за тем, правильно ли распределена загрузка входными деталями в соответствии с текущей производительностью роботов. Диспетчер сразу исправляет ситуацию так, чтобы не было ни простоев, ни завалов. Поэтому производительность труда на современных конвейерах многократно выросла. Новая эпоха шейдерного графического программирования принесла не только улучшение качества графики, но и головную боль программистам и покупателям видеокарт. Мало того, что программист должен был учитывать множество спецификаций, он должен был еще программировать физический опрос возможностей карты (так называемых capable bits) независимо от заявленной поддержки производителем карты на красочной суперобложке, чтобы убедиться, какую же программу подсунуть именно этой карте. На этом месте статьи я остановился, никак не получалось решить – стоит ли описывать текстурирование, что повлечет необходимость более детального описания пиксельного шейдера, блендинга и фильтраций. Честно говоря, статья и так отняла много времени, поэтому после некоторых колебаний, я решил пропустить эти моменты, так как изначально все-таки стояла цель вводного ознакомления с DirectX, написанного простым языком. И, к тому же, есть масса доступных источников в интернете. Но, если появятся вопросы, – я постараюсь на них ответить. Может возникнуть вопрос, если на видеокарте, поддерживающей DirectX 9, запускается старая программа, написанная без шейдеров и требующая наличия блока “T&L”, как она выполняется, ведь современные карты уже не содержат аппаратного “T&L”? Очень просто. Драйвер видеокарты различает такую ситуацию и имеет для этих целей простейшие шейдеры с обработкой в стиле а-ля “T&L”, что обеспечивает полную совместимость со старыми приложениями. Что дает пользователю компьютера очередная версия DirectX? Теперь, когда мы знаем, что такое DirectX, попробуем разобраться, с точки зрения пользователя-непрограммиста, а что нам дает каждая новая версия DirectX? Чтобы раскрыть такой потенциал, нужно немало усилий по изучению нового API и возможностей видеокарт, написанию и отладке кода и его оптимизации, постоянное отслеживание производительности десятков типов видеокарт под последними драйверами, часто вносящими хаос в уже отлаженный под предыдущий драйвер код, нужно умение и способность выкроить чуть – чуть ресурсов для создания нового эффекта, под который их нехватило в предыдущей версии движка под предыдущую версию API. иначе зачем новый API, если все-будет выглядеть по старому? И стоит только выкроить полмиллисекунды на кадр, ее тут же забирают под дополнительные полигоны в сцене, и начинается все сначала. Проходит время. Уже анонсирована следующая версия DirectX. А в это время в деревне Виллариба программисты под OpenGL радуются и веселятся – смена поколения видеокарт не принесла им никах проблем со сменой API, только лишь возросло быстродействие! И они только что сделали классную новую игру! И не хуже последней игры, выпущенной в деревне Виллабаджо под DirectX! Конечно, два предыдущих абзаца – шутка. Но в ней очень много правды. Можно поставить вопрос и по-другому, а чего не хватало программистам или в целом команде разработчиков в предыдущих версиях DirectX? Что же такого особенного дают новые версии, кроме беспокойства владельцу недавно купленной видеокарты? DirectX 10. Эволюционное обобщение пройденного Здесь уже не обойтись без упоминания некоторых технических деталей, и я коротко перечислю существенные моменты, понимание которых не требует знания DirectX. Внедрена новая модель драйвера Windows Vista Display Driver Model (WDDM). Чем стала плоха старая модель WDM, использовавшаяся в прежних версиях Windows, можно узнать по ссылке: Краткий комментарий. Появилась возможность переключения задач на ГПУ. Теперь есть возможность прервать выполнение основной графической задачи и быстро выполнить в фоне, к примеру, расчет какого-нибудь физического взаимодействия объектов. Причем предоставляется возможность и прерывания выполнения работы над примитивом или посреди выполнения шейдера, если это поддерживается видеокартой (так как это не является требованием DirectX 10). WDDM разрешает совместное использование поверхностей DirectX между процессами, тоже очень неплохо, что появилась официальная поддержка. Теперь вернемся к DirectX 10. Начнем с того, что у всех на слуху. Если теперь производитель карты заверяет, что его видеокарта поддерживает DirectX 10, то этому уже, наверное, можно поверить. По новой спецификации, такая поддержка означает полное соответсвие API – все, что запрограммировано правильно, должно выполняться на любом DirectX 10 железе. Другое дело, что карты все равно разные и обеспечивают разные возможности. К примеру, Радеоны включили аппаратную тесселяцию, что скоро станет требованием DirectX, а видеокарты Nvidia 86хх имеют несколько аппаратных отличий, выгодно отличающих их (конечно, временно, до выхода нового поколения карт) от топовых решений 88хх (к примеру, это позволяет им обращаться к атомам в технологии CUDA, чего лишены их более старшие собратья, есть и другие преимущества. Впрочем, это вряд ли компенсирует владельцам этих карт банальный разрыв в быстродействии). Появилась новая стадия в конвейере – стадия исполнения геометрического шейдера. Что можно интересного запрограммировать в коде геометрического шейдера? Как и вершинный шейдер, он на входе получает вершины и вершины же выдает на выход, но появляются существенные отличия. Входными данными уже являются не обезличенные вершины в потоке, а вершины примитивов, то есть вершины треугольника, линии или точки, а также соответствующие примыкающие вершины (три на треугольник и две на линию). В выходном потоке стадия геометрического шейдера может генерировать дополнительные вершины, образующие коллекцию вершин (point list), ломаную линию (line strip), либо группу связанных треугольников (tristrip). Безусловно, операция крайне процессороемкая (имея в виду ГПУ) в плане создания на лету высокополигональной геометрии (особенно, если делать ее за один присест). Примеры работы геометрического шейдера владельцы видеокарт последних серий могут посмотреть, скачав свежие SDK на сайтах производителей своих видеокарт. Шейдерная модель получила номер 4.0. Произошла унификация подхода к используемым ресурсам – все ресурсы могут быть деривативами только от текстуры или буфера памяти. Соответствуют ли изменения от DirectX 9 к DirectX 10 революционному обновлению? Мое скромное мнение – нет, это большой шаг вперед, но по значимости он не дотягивает до действительно революционного скачка от DirectX 7 к DirectX 8. Тем более очень интересная особенность – динамическая смена задач на ГПУ – не относится к DirectX. Что мы, как обычные пользователи, вправе ожидать от технологии DirectX, присутствующей на рынке 8 месяцев плюс год открытого предварительного тестирования? Увы. Мое мнение такое. Самые новые игры под DirectX 9 напрягали соответствующие топовые видеокарты под завязку. Новые возможности API, теоретически давая очень интересный инструмент в руки разработчика, не позволят реализовать его полный потенциал на существующих топовых DirectX видеокартах (имеется в виду Nvidia 8800 и AMD 2900) так, чтобы это было играбельно. Но есть и хорошие моменты. Кстати, еще пара слов о конкурирующем стандарте графического API – OpenGL. Его глобальное обновление, с точки зрения временных рамок, вторично по отношению к DirectX, так как он уже ориентируется на те аппаратные изменения, которые производители делают для соответствия спецификации DirectX. Поскольку аппаратное обеспечение и при OpenGL и DirectX одинаково, принципиально эти технологии примерно равноценны, если говорить о потенциальном качестве картинки, а различия проявляются на уровне самого API, открытости кода, мультиплатформенности, способе принятия расширений стандарта и еще нескольких менее важных для конечного пользователя моментов. Перевожу с английского, документация DirectX SDK за август 2007 года: Direct3D 10.1 добавляет 3 новых API интерфейса. Они добавлены в Direct3D.1 DLL (D3D10_1.DLL и D3D10Core.dll), и будут доступны в Windows Vista Service Pack 1, а именно: Соответственно, появляется SM 4.1 для поддержки дополнительного метода работы с субресурсами и массивами кубических текстур. Правда, к выходу Windows Vista Service Pack 1 список изменений может быть дополнен. Думается, что если бы Microsoft знала, какую волну подымет анонс и какой это найдет резонанс в среде технических дилетантов, она бы анонсировала его только вместе с выходом Windows Vista Service Pack 1, тем более, что всем кто следит за DirectX, о выходе версии DirectX 10.1 было известно давным-давно. Ни один разработчик не будет поддерживать DirectX 10.1 эксклюзивно, и если хочется поддерживать оба варианта, то никаких усилий для этого прикладывать не надо. При написании статьи ни один сайт или любой другой информационный ресурс не пострадал от копипэйста или плагиата, за исключением нескольких строк, любезно предоставленных для цитирования компанией Microsoft. Все написанное автором выражает только его личную точку зрения, которая может не соотвествовать объективной реальности. Свою точку зрения (по любому вопросу) автор с радостью и благодарностью изменит, если найдет ваши аргументы убедительными. Эти аргументы, критику, предложения и любые мысли вслух, имеющие какое-нибудь отношение к рассматриваемым вопросам, можно изложить здесь |




