netlib.narod.ru< Назад | Оглавление | Далее >

Введение

DirectX API является мощным программным интерфейсом, позволяющим разработчикам писать быстродействующие приложения, используя стандартизированный набор интерфейсов. Первый выпуск DirectX совпал с выходом операционной системы Windows 95 и назывался «Game SDK». С тех пор было выпущено более восьми новых версий API; однако, они предназначались только для разработчиков, использующих языки программирования С и C++. Поэтому существовала целая группа разработчиков, которые не имели удобного доступа к функциональным возможностям DirectX.

История DirectX для управляемого кода

Первый выпуск DirectX для управляемого кода пришелся на 20 декабря 2002 года, вместе с выходом DirectX 9; однако проект еще некоторе время продолжал находиться в разработке. В конце цикла разработки DirectX 8.1, пока я работал над DirectX для Visual Basic, были начаты эксперименты с бета-версией Visual Studio .NET и средой времени выполнения .NET, и сразу стало очевидно, что это направление дальнейшего развития. Я начал работу над прототипом DirectX .NET, который впоследствии стал называться DirectX для управляемого кода.

Вначале предполагалось, что DirectX будет столь же мощным, как и базовый API, с небольшими накладными расходами. Ранее пользователи DirectX для Visual Basic не могли создавать приложения, сравнимые по качеству с приложениями, использующими базовый DirectX API. Частично это было связано непосредственно со средой выполнения Visual Basic, а частично с высокими накладными расходами, вызванными интерфейсными DLL. В DirectX 8 мы попробовали устранить некоторые из этих узких мест, удалив интерфейсные уровни для большинства критичных к производительности API, таких как Direct3D. Вместо предоставления прокси-DLL, которые выполняли маршалинг данных, мы переместили Direct3D API непосредственно в библиотеку типов. Хотя это немного улучшило производительность, в большинстве случаев мы достигли лишь излишнего усложнения API, особенно для разработчиков на Visual Basic, которые и были нашей целевой аудиторией.

После выхода DirectX 8 стало очевидно, что API не совсем удобен в использовании. Примеры были сложны для понимания, и код не напоминал привычные приложения на Visual Basic. Большинство разработчиков, использующих Visual Basic, нашли API слишком сложным в применении, а разработчики на C++ не хотели менять API, поскольку не видели в этом пользы. Мы были интересны только домашним энтузиастам, а студии-разработчики компьютерных игр даже не знали о нашем существовании. Наш новый API должен был решить эти проблемы. Он должен был быть быстрым, простым в использовании и у разработчиков должны появиться причины перейти к нему от того кода на С++, который они писали. Концепция DirectX для управляемого кода родилась; теперь оставалось только воплотить ее.

На Конференции Разработчиков Компьютерных Игр (GDC) в Сан-Хосе в 2002 г. была представлена первая альфа-версия DirectX для управляемого кода. Она была основана на базе версии DirectX 8.1., и написана исключительно на С#. В ней имелось большинство базовых компонентов DirectX, включая DirectMusic, который был исключен из окончательной версии DirectX для управляемого кода. Единственными компонентами DirectX, не представленными в первой альфа-версии, были DirectDraw и DirectShow, главным образом вследствие того, что мы не решили окончательно, включать эти компоненты или нет. Оглядываясь назад, на ту версию, я все еще поражаюсь, сколько было сделано. В действительности я не обращался ни к одной из проблем, выявленных DLL Visual Basic; все что я сделал — это перенос DirectX API в C#. Это было отображение один в один каждой функции, константы и структуры в DirectX.

Этот выпуск был очень полезен для нас. Он продемонстрировал возможность создания среды выполнения DirectX для управляемого кода и полученные отзывы были на удивление позитивны. Одна из первых вещей, которые выпуск показал нам, явно недостаточная производительность этого слоя. В ряде случаев мы могли бы получить производительность сопоставимую с исходным API, но даже в простых сценариях (таких, как пример с кубической текстурой) частота кадров в управляемой версии была примерно на 40% ниже, чем у версии на С++. У нас появилась над чем работать.

Мы потратили еще несколько месяцев на подготовку следующего варианта — первой бета-версии DirectX 9. Мы сосредоточили внимание на самых острых проблемах производительности, добавили поддержку DirectDraw, удалили поддержку DirectMusic и начали усовершенствования, направленные на упрощение использования. Мы также включили в команду разработчиков, знакомых с С# и управляемым кодом. Они фактически использовали API, чтобы оценить делаем ли мы его проще. Полученные отзывы были быстрыми и однозначными — производительность была прекрасной, а вот дизайн API оставлял желать лучшего. DirectX для управляемого кода резко отличался от других управляемых API и напоминал скорее интерфейс COM API. Все компоненты среды выполнения .NET выглядели и ощущались одинаково, и только DLL DirectX для управляемого кода полностью отличались. У проекта было две цели: сделать API быстрым и сделать его простым для использования. Первая цель была достигнута, а вторая, очевидно, нет.

Полная перестройка API началась сразу после выхода первой бета-версии. Мы обсуждали необходимые вопросы с командой разработчиков .NET и с пользователями бета-версии. Мы собирали отзывы изо всех источников, которые могли указать нам, что неправильно в текущем дизайне и о способах его исправления. Я написал набор основополагающих принципов проекта, которых должны придерживаться все компоненты, и началась работа по приведению текущего API в соответствие с этими документами. Некоторые изменения, такие как смена регистра, реализовать было просто. В DirectX (и COM вообще) имена констант и структур обычно записываются заглавными буквами, а в среде .NET заглавные только начальные буквы слов. Другие изменения были по своей природе более глубоки, например, добавление поддержки перечислений к классам. Мы выпустили вторую бета-версию и с тревогой ожидали отзывов пользователей.

К счастью, отзывы были положительными. Мы предприняли шаги в правильном направлении, и API продвигался к осуществлению намеченных целей. В оставшееся время бета-цикла разработки мы то здест, то там выполняли небольшие изменения, для более полного соответствия нашего API и сформулированных принципов. За месяц до появления финальной версии DirectX 9 один из вариантов бета-версии был представлен публике. Это были только библиотеки времени выполнения DirectX, а не полный SDK, но они включал в себя API DirectX для управляемого кода. Слухи о DirectX для управляемого кода уже ходили какое-то время, и вот состоялось первое представление API широкому кругу разработчиков. Смогут ли люди использовать его неимея ни примеров, ни документации? Это было серьезным испытанием для нас. Важно не только смогут ли люди выяснить как использовать API, но и начнт ли они использовать его тогда. Полученные отзывы были только положительные. Люди отправляли на Web-сайты статьи, рассказывающие, как использовать API. Заключительная версия вышла в декабре и стало ясно, что мы добились желаемого результата.

Включенные пространства имен

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


Таблица 1. Пространства имен DirectX для управляемого кода



Microsoft.DirectX Родительское пространство имен, содержит весь общий код.
Microsoft.DirectX.Direct3D Графический API Direct3D вместе с вспомогательной библиотекой D3DX.
Microsoft.DirectX.DirectDraw Графический API DirectDraw.
Microsoft.DirectX.DirectPlay Сетевой API DirectPlay.
Microsoft.DirectX.DirectSound Звуковой API DirectSound.
Microsoft.DirectX.DirectInput API пользовательского ввода DirectInput.
Microsoft.DirectX.AudioVideoPlayback API для простого воспроизведения аудио и видео.
Microsoft.DirectX.Diagnostics Простой API диагностики.
Microsoft.DirectX.Security Базовые структуры безопасности для кода DirectX.
Microsoft.DirectX.Security.Permissions Классы разрешений безопасности для кода DirectX.


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

Начинаем

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

Первое, что потребуется — редактор исходного кода и среда времени выполнения. Я рекомендую Visual Studio .NET 2003, так как именно ее поддерживает Microsoft. Независимо от того, какой редактор вы будете использовать, вам понадобится версия 1.1 среды времени выполнения .NET, которую можно установить с прилагаемого компакт-диска (она также автоматически устанавливается вместе с Visual Studio .NET 2003).

Также понадобится установить DirectX 9.0 SDK. Я рекомендую устанавливать DirectX 9.0 Software Development Kit, находящийся на прилагаемом компакт-диске. Помимо среды разработки и выполнения он содержит также множество примеров и документацию по DirectX для управляемого кода.

Примеры из первых глав будут работать практически на любой современной видеокарте. Однако последующие примеры требуют наличия более сложной видеокарты, поддерживающей вершинные и пиксельные шейдеры. Для этих примеров должны подходить видеокарты GeForce 3 и выше, но я настоятельно рекомендую видеокарты, которые могут использовать модель шейдеров версии 2.0 (Radeon 9700 и выше).

Переходя к описанию программирования DirectX для управляемого кода, я предполагаю, что у вас уже есть некоторые знания. Если вы только знакомитесь с основами программирования, эта книга, скорее всего, не для вас. Книга предназначена тем разработчикам, которые уже имеют опыт программирования и ищут информацию о построении богатых мультимедийных приложений с использованием DirectX для управляемого кода. В тексте книги для примеров используется язык C#, но на диске вы найдете те же примеры, написанные на Visual Basic .NET.

Прилагаемый компакт-диск содержит DirectX 9.0 SDK, а также все обсуждаемые в книге исходные коды на языках C# и Visual Basic .NET. Также там находится библиотека времени выполнения .NET версии 1.1. При желании вы можете загрузить DirectX 9 SDK и среду выполнения .NET с сайта http://msdn.microsoft.com.

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


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz