DirectDraw¶
DirectDraw — это компонент программного интерфейса Microsoft DirectX, предназначенный для аппаратно-ускоренного вывода двумерной (2D) графики на экран. DirectDraw обеспечивал прямой доступ к видеопамяти, позволяя разработчикам игр и мультимедийных приложений манипулировать графическими поверхностями, выполнять блиттинг (перенос блоков пикселей), управлять палитрами и синхронизировать вывод с вертикальной развёрткой монитора. Впервые был представлен в 1995 году как часть DirectX 1.0 для операционной системы Windows 95, став ключевым элементом перехода от MS-DOS к Windows как платформе для игр.
¶История
¶Предпосылки создания
В середине 1990-х годов операционная система Windows 95 обладала ограниченными возможностями для работы с графикой. Основным графическим интерфейсом был GDI (Graphics Device Interface), который работал через процессор, не поддерживал аппаратное ускорение и не обеспечивал прямого доступа к видеопамяти. Разработчики игр были вынуждены использовать MS-DOS, где можно было напрямую обращаться к видеокарте через VGA-режимы. Microsoft стремилась сделать Windows полноценной игровой платформой, для чего требовался интерфейс, обеспечивающий производительность, сопоставимую с DOS.
¶Разработка и выпуск
Проект по созданию DirectX, в состав которого вошёл DirectDraw, возглавил инженер Microsoft Крейг Эйслер. Разработка велась под кодовым названием «Manhattan Project». Первая версия DirectX 1.0 была выпущена 30 сентября 1995 года. DirectDraw стал основным компонентом для 2D-графики, в то время как Direct3D (появившийся в DirectX 2.0) отвечал за трёхмерную графику. DirectDraw сразу же получил поддержку со стороны производителей видеокарт, таких как S3 Graphics, Matrox и ATI, которые выпускали драйверы, совместимые с новым интерфейсом.
¶Эволюция и упадок
DirectDraw активно развивался до версии DirectX 7.0 (1999 год), в которой были добавлены возможности работы с текстурами и аппаратным ускорением 2D-операций. Однако с ростом популярности трёхмерной графики и появлением Direct3D, который стал основным инструментом для рендеринга, значение DirectDraw начало снижаться. В DirectX 8.0 (2000 год) функции DirectDraw были объединены с Direct3D в единый интерфейс, а в DirectX 9.0 (2002 год) DirectDraw был объявлен устаревшим. Окончательно поддержка DirectDraw была прекращена в Windows 8 (2012 год), где он был удалён из состава DirectX Runtime, хотя для обратной совместимости в некоторых версиях Windows оставался доступен через эмуляцию.
¶Архитектура и принципы работы
¶Основные объекты
DirectDraw оперировал несколькими ключевыми объектами, которые управляли графическим выводом:
- DirectDraw — главный объект, представляющий устройство вывода (видеокарту). Он создавал другие объекты и управлял режимами работы.
- DirectDrawSurface — поверхность, представляющая область видеопамяти (или системной памяти), в которую можно было рисовать. Поверхности могли быть первичными (отображаемыми на экране), вторичными (для внеэкранной буферизации) или текстурами.
- DirectDrawPalette — палитра, используемая для поверхностей с индексированными цветами (8-битный цвет).
- DirectDrawClipper — объект для отсечения областей при блиттинге, позволяющий избежать вывода за пределы экрана или окна.
¶Блиттинг и переключение страниц
Основной операцией в DirectDraw был блиттинг (Bit Block Transfer) — перенос прямоугольного блока пикселей из одной поверхности в другую. Функция Blt выполняла эту операцию с возможностью аппаратного ускорения, если драйвер видеокарты его поддерживал. Для создания плавной анимации использовалась техника двойной или тройной буферизации: приложение рисовало кадр во вторичную поверхность, а затем выполняло переключение страниц (page flipping), при котором первичная и вторичная поверхности менялись местами. Это устраняло мерцание и разрывы изображения (tearing).
¶Синхронизация с вертикальной развёрткой
DirectDraw предоставлял возможность синхронизировать вывод с вертикальной развёрткой монитора (V-Sync). При включении этой опции операция переключения страниц выполнялась только во время обратного хода луча, что предотвращало разрывы изображения, но могло снижать частоту кадров.
¶Классификация поверхностей
Поверхности в DirectDraw классифицировались по нескольким признакам:
| Тип поверхности | Описание |
|---|---|
| Первичная | Отображается на экране. Может быть одна или несколько (для режимов двойной/тройной буферизации). |
| Вторичная | Используется для внеэкранного рендеринга. Не видна на экране до переключения страниц. |
| Текстурная | Используется как источник текстуры для 3D-рендеринга (в Direct3D). |
| Системная | Хранится в оперативной памяти, а не в видеопамяти. Доступна для операций, не требующих высокой скорости. |
| Видеопамять | Хранится в памяти видеокарты. Обеспечивает максимальную производительность. |
¶Применение
¶Игры
DirectDraw стал основой для тысяч игр, выпущенных в конце 1990-х — начале 2000-х годов. Среди наиболее известных проектов, использовавших DirectDraw:
- Diablo (1996) — Blizzard Entertainment использовала DirectDraw для изометрического рендеринга.
- Age of Empires (1997) — Ensemble Studios применяла DirectDraw для отрисовки 2D-карт и юнитов.
- StarCraft (1998) — Blizzard Entertainment использовала DirectDraw для управления графикой в реальном времени.
- Command & Conquer: Red Alert 2 (2000) — Westwood Studios использовала DirectDraw для анимации и интерфейса.
¶Мультимедиа
DirectDraw применялся не только в играх, но и в мультимедийных приложениях, таких как проигрыватели видео (например, Windows Media Player), программы для редактирования изображений и графические редакторы. Он позволял выводить видео с аппаратным ускорением и поддерживал наложение нескольких слоёв.
¶Эмуляция и ретро-гейминг
С прекращением поддержки DirectDraw в современных версиях Windows, для запуска старых игр используются эмуляторы и обёртки (wrappers), такие как dgVoodoo и DxWnd, которые преобразуют вызовы DirectDraw в современные API (Direct3D 9/11/12 или Vulkan). Это позволяет сохранить совместимость с классическими играми на новых операционных системах.
¶Критика и ограничения
¶Отсутствие аппаратного ускорения 2D
В ранних версиях DirectDraw аппаратное ускорение блиттинга было необязательным и зависело от драйвера видеокарты. Многие производители не реализовывали полную поддержку, что приводило к тому, что операции выполнялись программно через процессор, снижая производительность.
¶Сложность разработки
API DirectDraw был относительно низкоуровневым, что требовало от разработчиков глубоких знаний архитектуры видеопамяти и управления поверхностями. Это усложняло создание игр и приводило к ошибкам, связанным с утечками памяти и некорректной синхронизацией.
¶Ограниченная поддержка в современных ОС
Начиная с Windows Vista, DirectDraw был переведён в режим эмуляции через Windows Display Driver Model (WDDM), что привело к снижению производительности и совместимости. В Windows 8 и более новых версиях DirectDraw полностью удалён из состава DirectX Runtime, хотя некоторые приложения могут использовать его через библиотеки совместимости.
¶Наследие
DirectDraw сыграл ключевую роль в становлении Windows как игровой платформы, предоставив разработчикам инструменты для создания высокопроизводительных 2D-игр. Его архитектура повлияла на последующие графические API, такие как Direct2D (появившийся в Windows 7), который предлагает более современный и высокоуровневый подход к 2D-графике. Несмотря на устаревание, DirectDraw остаётся важной частью истории компьютерной графики и используется в ретро-гейминге для запуска классических игр.
¶Источники
- Microsoft DirectX SDK Documentation (1995-2002)
- «Game Programming Gems» — Charles River Media, 2000
- «DirectDraw: An Inside Look» — Dr. Dobb's Journal, 1996
- «The History of DirectX» — Gamasutra, 2004
- «Windows Display Driver Model (WDDM) Overview» — Microsoft TechNet, 2006
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →

