5edf7c19

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 API были значительно улучшены чем, те что находятся в Game SDK. Следующий список кратко описывает главные усовершенствования:

Были добавлены интерфейсы IDirectDraw2 и  IDirectDrawSurface2 . Для большего количества информации, см. Интерфейс IDirectDraw2 и Интерфейс IDirectDrawSurface2.

Были добавлены следующие флажки :

DDBLT_DEPTHFILL                               DDCAPS_BLTDEPTHFILL       

DDCAPS_CANBLTSYSMEM                    DDCAPS_CANCLIP     

DDCAPS_CANCLIPSTRETCHED             DDCAPS2_NO2DDURING3DSCENE   

DDEDM_REFRESHRATES                       DDPCAPS_1BIT         

DDPCAPS_2BIT                                     DDPF_PALETTEINDEXED1    

DDPF_PALETTEINDEXED2                    DDSCAPS_ALLOCONLOAD     

DDSCAPS_MIPMAP                               DDSD_MIPMAPCOUNT          




DirectDraw - компонент системы Windows, который выполняет общие функции, требуемые и,  аппаратными средствами, и программным обеспечением DirectDraw. Также, DirectDraw - единственый пользователь DirectDraw аппаратного уровня абстракции (HAL). Прикладные программы должны писать в  DirectDraw. DirectDraw возвращает два набора возможностей, один для аппаратных возможностей и один для возможностей программной эмуляции. При использовании прикладная программа может легко определить то, что DirectDraw эмулирует и какие функциональные возможности обеспечиваются в аппаратных средствах и корректировать себя соответственно.

DirectDraw выполнен в виде библиотеки с динамической связью (DLL) DDRAW. Эта 32 битная DLL осуществляет все общие функциональные возможности, требуемые DirectDraw. Она выполняет все необходимые преобразования между Win32 и  HAL, а также  полною проверку правильности параметра.Она обеспечивает управление внеэкранной  памятью дисплея, и выполняет всю  логику, требуемую DirectDraw. Она  ответственна за обеспечение COM интерфейса для прикладной программе, сцепление hWnds, чтобы обеспечить отсекание списков, и все другие аппаратно-независимые функциональные возможности.



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