Загрузка...
 
Печать
ИГРОКОДИНГ  »  ИГРОКОДИНГ: Учебный курс  »  Введение (общее)  »  Эволюция DirectX. От версии к версии (обзор)

Эволюция DirectX. От версии к версии (обзор)


Программирование игр для MS DOS

Ultima IV: Quest of the Avatar (1985, ORIGIN systems)
Ultima IV: Quest of the Avatar (1985, ORIGIN systems)

Первая версия операционной системы MS DOS (Microsoft Disc Operating System) вышла в свет в 1981 году. Она являлась предшественницей семейства ОС Windows и предоставляла программисту абсолютную свободу действий. Графических API в то время не было вовсе. Игры были аппаратно зависимыми. То есть, программист самостоятельно создавал в игре необходимые процедуры (чаще всего на низкоуровневом языке Ассемблер) для доступа к графическому адаптеру, устройствам ввода и звуковым устройствам. Ситуация осложнялась ещё и тем, что модели от разных производителей этих устройств программировались по-разному. Причём, даже в тех случаях, когда они относились к одному и тому же стандарту (CGA, EGA, VGA, SVGA). Таким образом программист тратил уйму времени на написание процедур сначала для одной видеокарты, затем для другой, затем для разных звуковых устройств и т.д. Тем не менее, игры под ОС MS DOS появлялись и с каждым годом их становилось всё больше.
Стандарт VESA, появившийся в начале 1990-х годов, значительно улучшил ситуацию. Несмотря на это, даже при включении в игру поддержки VESA, к ней обязательно прилагался список несвоместимого оборудования.

Программирование игр для MS Windows

Первую версию MS Windows компания Microsoft показала на международной компьютерной выставке в 1985 году. Одна из главных целей нового семейства ОС от софтверного гиганта стала аппаратная независимость. Согласно замыслу, программа в среде Windows не работает с устройством напрямую. Это делает операционная система, которая получает всю информацию от специального драйвера устройства, поставляемого производителем. С этих пор обязанность по созданию аппаратно-независимых драйверов устройств легла на плечи создателей этих устройств. Что вполне справедливо. Microsoft же, в свою очередь, сконцентрировалась на развитии мультимедийных функций ОС Windows. Об играх под Windows тогда, вроде, речи не шло (Microsoft ориентировала свою ОС преимущественно на нужды бизнеса).

Graphics Device Interface (GDI)

Параллельно с развитием ОС MS Windows, совершенствовался и инструментарий для управления графикой в ней. GDI (Graphics Device Interface) являлся первым набором библиотек для программирования графических приложений. Он включает в себя огромное количество функций самой разной направленности (рисование в "канве", поддержка шрифтов True Type и т.д.). Основным его недостатком было низкое быстродействие. Именно поэтому долгое время игры под Windows представляли собой всевозможные карточные паьянсы.

Microsoft делала попытку исправить положение с помощью библиотеки WinG, которая впервые появилась ещё в Windows 3.x и должная была стать графическим стандартом. Но из-за крайне узкой специализации и небольших возможностей она также не получила широкого распространения среди игрокодеров.
Более подробно о Windows GDI читаем здесь: Вывод графики средствами Windows GDI

Windows Game SDK (сентябрь 1995 г.)

Именно так называлась первая версия DirectX SDK. Содержала компоненты:

  • DirectDraw (отвечает за графику в играх),
  • DirectPlay (отвечает за сетевые соединения),
  • DirectSound (отвечает за звук в играх),
  • DirectInput (обрабатывает пользовательский ввод; например с клавиатуры, мыши или джойстика),
  • DirectSetup (создаёт красивую оболочку для инсталляции игр).

Большинство компонентов являлись обычными надстройками над Windows API (Win32 API).
Компонент DirectDraw обладает следующими преимуществами:

  • Уровень аппаратной абстракции (Hardware Abstraction Level - HAL) предоставляет интерфейсы для прямого доступа к видеопамяти, что значительно увеличивает производительность программ.
  • DirectDraw распознаёт все возможности видеоадаптеров и использует их. К примеру, если видеоадаптер поддерживает аппаратное копирование данных, DirectDraw обязательно будет пользоваться этой возможностью. При отсутствии такой поддержки, данная функция будет эмулироваться программно на уровне аппаратной эмуляции (Hardware Emulation Level - HEL), часто с существенной потерей производительности.
  • DirectDraw предназначен для работы в среде MS Windows и поэтому предоставляет 32-битный доступ к памяти и использование её "плоской" модели.
  • Поддержка переключения видеостраниц. При этом допускается создание нескольких вторичных страниц и их последующее размещение как в видео-, так и в системной памяти.
  • Поддержка полноэкранных режимов, трёхмерных Z-буферов, динамических палитр, изменение разрешения экрана.
  • DirectDraw существенно упрощает создание графических приложений. Все действия программиста сводятся к получению информации о видеоадаптере и копированию данных на экран или в системную память. В то же время DirectDraw можно использовать одновременно с GDI.

DirectX 2.0

Многочисленные изменения во всех компонентах. Появился новый компонент Direct3D (для работы с трёхмерной графикой). Больше всего нововведений появилось в компоненте DirectDraw:

  • Добавлены интерфейсы IDirectDraw2 и IDirectDrawSurface2.
  • Функция IDirectDraw2::SetDisplayMode() теперь имеет на 2 параметра больше. Это dwRefreshRate (указывает частоту обновления монитора) и dwFlags, задающий флаги.
  • Добавлена функция IDirectDraw2::EnumDisplayModes(), перечисляющая рабочие видеорежимы.
  • Добавлена функция IDirectDraw2::GetAvailableVidMem(), возвращающая через параметры размер свободной для использования видеопамяти.
  • Количество интерефейсов IDirectDraw, которые можно создавать одновременно, теперь неограничено (теоретически). Причём каждый созданный интерфейс будет абсолютно независим от других.
  • Улучшена работа с цветовыми палитрами.
  • Множество других изменений.

DirectX 3.0

Макрос INITGUID теперь не требуется опеределять. Вместо этого необходимо включать в проект файл dxguid.lib. Многочисленные изменения и улучшения во всех компонентах. Самые значительные изменения - в DirectPlay:

  • Переименован библиотечный файл DirectPlay: с "play.lib" на "playx.lib".
  • Добавлен новый системный провайдер, использующий протокол TCP/IP.
  • Создан новый интерфейс IDirectPlayLobby, предназначенный для поиска игроков в сети, предоставления им возможности совместно играть и общаться.
  • Одноранговые соединения получили возможность изменять сервер имён (например в случае, когда текущий сервер по какой-либо причине покинул сеанс).
  • Появилась рассылка данных игрока. При каждом изменении статуса любого из игроков другие участники сеанса автоматически информируются об этом при помощи системных сообщений.

Кроме этого:

  • В DirectDraw создание интерфейса IDirectDraw2 при помощи функции CoCreateInstance() отныне невозможно. Вместо него рекомендуется использовать для этого метод QueryInterface() из предыдущей версии интерфейса IDirectDraw. Кроме того, Microsoft заявила о возникновении ошибки при переключении поверхностей функцией IDirectDraw2::Flip(). Для этого рекомендовалось применять IDirectDraw::Flip().
  • В DirectSound появилась поддержка объёмного звука при помощи DirectSound3D. Помимо этого, новый компонент был дополнен новым флагом DBSCAPS_GLOBALFOCUS (режим "глобального звука").
  • В DirectInput добавлена поддержка клавиатуры и мыши! Для этого в функции IDirectInput::CreateDevice() достаточно указать параметры GUID_SysKeyboard и GUID_SysMouse соответственно. До этого в DirectInput поддерживались одни лишь джойстики.

DirectX 5.0

Вышла после DirectX 3.0 (четвёртой версии не было). Значительные изменения во всех компонентах, связанные, в основном, с подддержкой новых аппаратных устройств.
В DirectDraw:

  • Появился новый интерфейс IDirectDrawSurface3, предназначенный для работы с поверхностями.
  • Для поддержки аппартаных видеопортов введены интерфейсы IDirectDrawVideoPort и IDDVideoPortContainer, которые предоставляют возможность перенаправлять поток данных, полученного с видеопорта, на поверхность DirectDraw.
  • Для перечисления стандартных видеорежимов VGA был введён новый флаг DDEDM_STANDARTVGAMODES. Стандартными видеорежимами называют режимы, которые инициализируются с помощью VGA BIOS (например, режим 13h - 320x200x8).
  • Появилась поддержка набора команд процессора MMX. DirectDraw проверяет наличие поддержки MMX, и если она есть, использует её для увеличения производительности работы с поверхностями.
  • Новый метод IDirectDrawSurface3::SetSurfaceDesc() применяется для изменения парметров поверхности.
  • Новый интерфейс IDirectDrawColorControl используется для изменения параметров отображения цветов в непалитровых режимах, без изменения первичной поверхности.
  • DirectDraw теперь позволяет создавать внеэкранные поверхности большей ширины, чем первичная. Эта возможность должна поддерживаться видеоадаптером, о чём можно узнать с помощью флага DDCAPS2_WIDESURFACES структуры DDCAPS.
  • Появилась поддержка AGP (Advanced Graphics Port - расширенный графический порт). Использование AGP можно указать при помощи поля DDCAPS_LOCALVIDMEM структуры DDCAPS (только в ОС MS Windows 98 и более поздних).
  • Появилась поддержка использования нескольких мониторов одновременно (только в ОС MS Windows 98 и более поздних).

В DirectSound:

  • Новый интерфейс IKsPropertySet предназанчен для использования расширенных возможностей звуковых карт, которые были определены их производителями.
  • Новый интерфейс DirectSoundCapture предназначен для захвата звука со входа звуковой карты.
  • Появилась система оповещения (notification) предназначенная для отслеживания состояния проигрывания звука в DirectSound. Она устанавливает событие всякий раз, когда проигрывание данных из буфера достигает указанной метки.
  • Появилась аппаратная поддержка DirectSound3D, что существенно увеличило быстродействие. Это также позволило снизить загрузку процессора при микшировании трёхмерного звука.
  • Теперь при обработке трёхмерного звука учитывается количество колонок, их вид и расположение. Для этого в DirectSound3D были добавлены новые алгоритмы. Конфигурация звуковых динамиков берётся из пользовательских настроек, которые производятся в Панели управления MS Windows.

В DirectPlay:

  • Добавлены интерфейсы IDirectPlay3 и IDirectPlayLobby3.
  • Появилась возможность подавлять стандартные диалоги системных провайдеров при помощи IDirectPlayLobby.
  • Функция IDirectPlay3;:EnumSessions() теперь поддерживает асинхронный метод перечисления открытых в сети сеансов (сессий).
  • Появился новый тип соединения - с повышенной безопасностью. Для идентификации пользователя может использоваться провайдер безопасности NTLM. Это позволяет интегрировать DirectPlay в локальную сеть Microsoft.

В DirectInput:

  • Добавлен COM-интерфейс для работы с джойстиками, что существенно расширило его возможности.
  • Добавлена поддержка устройств с обратной связью(external link) (Force Feedback).

DirectX 6.0

Добавлено мультитекстурирование.
В DirecDraw:

  • Новые интерфейсы IDirectDraw4 и IDirectDrawSurface4 для работы с видеоадаптерами.
  • Новые структуры DDSCAPS2 и DDSURFACEDESC2 применяются для упрощения получения информации о совместимости.
  • Новая функция IDirectDrawSurface4::TestCooperativeLevel(), возвращающая статус уровня кооперации. Данная функция очень полезна для предотвращения ошибочных попыток восстановить потерянные поверхности (например, после того, как приложение было свёрнуто, а затем восстановлено).
  • Добавлен интерфейс IDirectDrawGammaControl, который позволяет изменять уровень цветов на первичной поверхности без её измеения.

В DirectSound:

  • Документация по DIrectSound была дополнена новыми обзорами и примерами.

В DirectPlay:

  • Добавлены интерфейсы IDirectPlay4 и IDirectPlayLobby3.
  • Новый протокол DirectPlay выполняет проверку доставки для всех сетевых пакетов.
  • Появилась поддержка асинхронных сообщений. При их отправке система не дожидается ответа о доставке сообщения, а сразу возвращает управление программе. Если сообщение было успешно доставлено, приложение получает соответствующее системное сообщение.
  • Введена возможность постоянно проверять связь между клиентом и сервером. Если связь оборвётся, информация об этом будет получена немедленно, а не при следующей попытке отправки сообщения.
  • Появилась опция искусственного сокащения скорости исходящего трафика: так называемый throttling (англ. - "удушение"). Это полезно для сетей с низкой пропускной способностью и для предупреждения переполнения очереди сообщений на получающем компьютере.
  • В IDirectPlayLobby3 все клиенты информируются о миграции сервера.
  • Новые функции IDirectPlayLobby3
    RegisterApplication и IDirectPlayLobby3
    UnregisterApplication применяются для регистрации и удаления лобби-ориентированных приложений. Кроме того, лобби-клиенты получили возможность передавать все данные для соединения уже запущенным программам.

В DirectInput:

  • Была немного изменена документация.

DirectX 6.1

Добавлен новый компонент DirectMusic, позволяющий управлять MIDI-секвенсором, встроенным в большинство дискретных звуковых карт (либо его программной версией, встроенной в MS Windows). Поддерживается управление как на высоком, так и на самом низком уровне.

DirectX 7.0

Microsoft делает бОльшую ставку на язык программирования Visual Basic. В состав включены необходимые компоненты и документация для использования DirectX совместно с Visual Basic. Добавлена аппаратная поддержка обрезания, преобразований и освещения.

В DirectDraw:

  • Для создания нового экземпляра объекта IDirectDraw7 теперь рекомендуется использовать функцию DirectDrawCreateEx().

В DirectSound:

  • Появилась аппаратная поддержка голосового управления.
  • Введена возможность выбора одного из трёх алгоритмов просчёта трёхмерного звука: NO_VIRTUALIZATION, HRTF_LIGHT, HRTF_FULL.
  • В MS Windows 98 SE и MS Windows 2000 появилась возможность создавать и проигрывать многоканальные звуковые буферы, используя для этого WDM-драйверы.
  • При использовании Debug (отладочной) версии DirectSound, во время проигрывания звукового буфера к нему добавляется статический шум. Это помогает определить, осуществляется ли воспроизведение звука, если буфер не содержит звуковых данных.

В DirectMusic:

  • Добавлена поддержка DLS второго уровня.

В DirectPlay:

  • Добавлена поддержка так называемого "разделённого запуска" (когда одно приложение запускается при помощи другого). Данная функция обеспечивает более высокий уровень безопасности.

В DirectInput:

  • Введена возможность отключать дополнительные клавиши Windows при использовании эксклюзивного режима кооперации.
  • Добавлен Fedit и новые интерфейсы для упрощения управления устройствами.

DirectX 8.0

Значительные изменения во всех компонентах. Самое заметное - увеличение производительности аппаратного 3D-ускорения при работе с трёхмерной графикой. Новый компонент DirectX Audio - результат объединения DirectSound и DirectMusic. Компонент DirectDraw полностью вошёл в состав Direct3D (теперь это один общий компонент Direct3D, отвечающий за всю графику в играх). Добавлена шейдерная модель 1.1 .

В Direct3D:

  • Все 3D devices заменены на три: HAL Device, Pure HAL Device и Reference Rasterizer.
  • Index Buffer (в дополнение к Vertex Buffer).
  • Pixel Shader, Vertex Shader.

Компания Microsoft придумала некий псевдо-ассемблер для программирования мультитекстурных эффектов. Он (псевдо-ассемблер) включает в себя следующие понятия:

  • registers (vertex color registers, factor registers and temporary registers),
  • инструкции (add, sub, mult, madd(mult + add и 3 arguments), blend, dp3 (dot product 3), cmul ((ARG0.A > 0.5 ? ARG2 : ARG1*ARG2) ),
  • Texture Address Operations (ie Perturbations): texcoord (sample texture directly at given texcoords), kill (mask out pixel if any texcoord <0), bumpenvmap (2x2 scene-wide-matrix multiply, add, and dependent read), beml (above with luminance correction), indexar (use specified input as texcoords to this stage), indexgb (use specified input as texcoords to this stage), mat2x3 (2x3 interpolated matrix multiply/read), mat3x3 (3x3 interpolated matrix multiply/read), reflect (reflection calculation),
  • модификаторы инструкций (bias/unbias (+0.5/-0.5), 2x, 4x, 8x, 1/2, 1/4, 1/8),
  • модификаторы аргументов инструкций (inv (1-color for each component), alpha (replicate alpha), blue (use blue component as alpha channel)).

Теперь multitexture effect ограничен только фантазией автора… + в некоторых случаях это может спасти текстурное пространство, т.к. порой делались промежуточные текстуры для реализации эффектов, а теперь они не понадобятся.

  • Поддержка нескольких input geometry streams (несколько VB+IB на входе и один на выходе).
  • Z-buffer отделён от render surface.

С DX6 появилась интересная функциональная возможность — render to texture. Но для использования её надо было создавать для текстуры свой собственный z-buffer (если z-buffer использовался и для основного rendering). Это было неудобно и криво. Теперь в DX8 z-buffer уже не является принадлежностью render surface, они объединяются вместе вызовом функции SetRenderTarget, в которую передаётся z-buffer и render surface. Теперь можно при одном и том же z-buffer'е менять render target!

  • Добавлен debug device.

Эта функциональность введена исключительно для отладки программы с DX. Debug device позволяет устанавливать break points на события внутри драйверов и получать всяческие внутренние переменные.

В DirectX Audio:

  • Поддержка эффектов для буферов DirectSound.
  • Поддержка DLS2 и "аудиопутей" ( audiopath(external link)) для программирования звуковых эффектов.
  • Поддержка сценариев для управления звуками.
  • Интеграция с DirectPlay! Теперь игроки могут переговариваться голосом во время игры, а не только обмениваться письменными сообщениями.

В DirectPlay:

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

DirectX 8.1

Улучшена стабильность работы. Добавлен ряд функций по работе с динамическими тенями. Поддержка пиксельных шейдеров 1.4 и вершинных шейдеров 1.1 .

DirectX 9.0

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

  • DirectX Graphics: сочетает в себе возможности интерфейсов DirectDraw и Direct3D предыдущих версий, предназначенных для программирования графики. Мы будем изучать возможности именно этого компонента.
  • DirectInput: предоставляет возможности по обработке пользовательского ввода с самых разнообразных устройств — таких, как игровые манипуляторы и "мыши".
  • DirectPlay: содержит средства для создания сетевых приложений (например, многопользовательских игр).
  • DirectX Audio (в этот компонент объединены DirectSound, DirectMusic и DirectX Media Objects) предоставляют средства программирования звука и MIDI-музыки.
  • DirectShow: средства для захвата и воспроизведения мультимедийных потоков. В версии 9.0 впервые появились DirectShow Editing Services (DES): набор объектов, позволяющих легко создавать программы для нелинейного монтажа или проигрывателей аудио и видео с применением real-time эффектов и красивых переходов между роликами.
  • DirectSetup: программный интерфейс, позволяющий настраивать установку DirectX на системах пользователей.
  • DirectX Diagnostics: программный интерфейс для диагностики драйверов и оборудования.

DirectX 9.0b

Поддержка пиксельных шейдеров 2.0b и вершинных шейдеров 2.0 .

DirectX 9.0c

Поддержка шейдерной модели 3.0

DirectX 9.0L

Версия DirectX 9.0 для Windows Vista.

DirectX 10

Основной упор сделан на увеличение детализации и реалистичности анимированных изображений. Разработан специально для операционной Windows Vista. Поддержка шейдерной модели 4.0 (только Windows Vista и выше)

  • Более реалистичная анимация шерсти меха и растений.
  • Более мягкие и более чёткие тени.
  • Более насыщенные ландшафты с более сложной окружающей обстановкой.
  • Значительно более тщательно прорисованный лес, более масштабные и детальные сцены баталий.
  • Более динамичные и чаще меняющиеся по ходу событий сценарии игр.
  • Больший реализм и уменьшение смазывания движущихся объектов.
  • Объёмные эффекты.
  • Уточнённый, более реалистичный дым и облака.
  • Более реалистичные отражения и преломления на отражающих поверхностях - воде, автомобилях, стекле и др.
  • Снижение загрузки CPU, перераспределение обсчёта ряда процессов на GPU, снижение вероятности подтормаживания и зависания системы при сложном геймплее.

DirectX 10.1

Поддержка шейдерной модели 4.1 (только Windows Vista и выше).

DirectX 11

Поддержка шейдерной модели 5.0 (только Windows Vista и выше).

DirectX 11.1

Поддержка шейдерной модели 5.0 (только Windows 7 SP1 и выше).

DirectX 11.2

Поддержка шейдерной модели 5.0 (только Windows 8.1)

...


ИГРОКОДИНГ  »  ИГРОКОДИНГ: Учебный курс  »  Введение (общее)  »  Эволюция DirectX. От версии к версии (обзор)

Contributors to this page: slymentat .
Последнее изменение страницы Воскресенье 10 / Июль, 2016 12:15:47 MSK автор slymentat.

Последние комментарии

No records to display

Хостинг