Microsoft DirectX 2

DirectDraw


Самое большое увеличение эффективности в DirectX 2 SDK происходит из-за DirectDraw, комбинации четырех моделей компонентных объектов (COM интерфейсов): IDirectDraw, IDirectDrawSurface, IDirectDrawPalette, и IDirectDrawClipper. Для большего количества информации относительно COM концепций см. Модель компонентных объектов

Объект DirectDraw, созданный использованием функции DirectDrawCreate, представляет собой плату адаптера дисплея. Один из методов объекта, IDirectDraw:: CreateSurface, создает основной объект DirectDrawSurface, который представляет память дисплея,  просматриваемую на мониторе. Из основной поверхности может быть создана вне экранная поверхность.

В наиболее общем случае, создается еще одна дополнительная буферная поверхность в дополнение к основной поверхности и обменивается изображениями с первичной поверхностью. В то время как экран занят показом изображения в основной поверхности, дополнительная поверхность заполняется фреймами. Это выполняется путем пересылки вне экранных растров, сохраненных в других объектах DirectDrawSurface в оперативной памяти дисплея. Метод IDirectDrawSurface:: Flip вызывается, когда фреймы размещены, регистры устанавливаются и происходит переключение, когда экран выполняет вертикальную развертку. Эта операция асинхронная, так что прикладная программа может продолжать обработку после вызова IDirectDrawSurface::Flip. (После того, как этот метод вызвался, обратный буфер автоматически блокирует запись до тех пор, пока не произойдет обмен .) После того как  произошел обмен, процесс продолжается: прикладная программа составляет следующий фрейм в обратном буфере, вызывает IDirectDrawSurface::Flip, и так далее.

DirectDraw эффективней чем GDI модель Windows 3.1. GDI модель Windows 3.1 не имела никакого прямого доступа к растрам в памяти дисплея. Бит-блиттинг всегда происходил в оперативной памяти системы и лишь затем перемещался в память дисплея, таким образом замедляя эффективность. В DirectDraw, вся обработка выполняется  на плате адаптера дисплея всегда, когда это возможно. DirectDraw также  эффективней GDI моделей Microsoft Windows 95 и Windows NT, которые используют функцию CreateDIBSection, чтобы разрешить аппаратную обработку.


Третий тип объектов DirectDraw - DirectDrawPalette. Так как физическая палитра дисплея обычно поддерживается в аппаратных средствах дисплея, то ее представляет и ей управляет этот объект. Интерфейс IDirectDrawPalette осуществляет доступ к палитре в аппаратных средствах. Этот обход стандартной палитры Windows  является  доступным только тогда, когда игра имеет исключительный доступ к аппаратным средствам дисплея. Объекты DirectDrawPalette также созданы из объектов DirectDraw.

Четвертый тип объектов DirectDraw - DirectDrawClipper. DirectDraw  используя этот объект управляет отсекаемыми областями памяти дисплея .

Прозрачный блиттинг - метод, при  котором растр перемещается на поверхность с некоторым цветом, или диапазоном цветов, определенных в растре, как прозрачные. Прозрачные биты известны как color key. Исходный color key определяет, какой цвет или диапазон цветов,  прозрачен и следовательно не будет скопирован в течение операции передачи. Результирующий color key определяет какой цвет или диапазон цветов, располагаемых на поверхности, будут покрыты пикселями того цвета или цветного диапазона в исходном растре.

В заключение, DirectDraw, поддерживает оверлеи аппаратных средств и эмуляцию программного обеспечения. Оверлеи представляют более простые средства работы со спрайтами и управления уровнями мультипликации. Объект  DirectDrawSurface может быть создан как оверлей со всеми возможностями любой другой поверхности, плюс возможности дополнительного пространства, связанные только с оверлеями. Эти возможности требуют дополнительной памяти дисплея , и если не возможны оверлеи в памяти дисплея, оверлеи поверхности могут существовать в системной памяти.

Color key  работает таким же образом и для прозрачного блиттинга оверлеев. Z-порядок оверлея автоматически обрабатывает манипулирование прозрачностью между оверлеями.


Содержание раздела