Microsoft DirectX 2

       

IDirectDrawPalette:: GetCaps


HRESULT GetCaps (LPDWORD lpdwCaps);

Возвращает возможности этого объекта палитры.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    



IDirectDrawPalette:: GetEntries


HRESULT

GetEntries (DWORD

dwFlags, DWORD dwBase,

DWORD

dwNumEntries, LPPALETTEENTRY lpEntries);

Запрашивает значения палитры из DirectDrawPalette.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    



IDirectDrawPalette:: Initialize


HRESULT Initialize (LPDIRECTDRAW lpDD, DWORD dwFlags,

LPPALETTEENTRY lpDDColorTable);



Инициализирует объект DirectDrawPalette.



IDirectDrawPalette Интерфейс


Объект DirectDrawPalette обеспечивается, чтобы допустить прямому манипулированию 16- и с 256 цветами палитрами. DirectDrawPalette резервирует входы 0 до 255 для палитр с 256 цветами; однако, это не резервирует никакие входы для палитр с 16 цветами. Это позволяет прямое манипулирование таблицей палитры как таблица. Эта таблица может содержать 16- или с 24 битами RGB входов, представляющие цвета, связанные с каждым из индексов. Для палитр с 16 цветами, таблица может также содержать индексы к другой палитре с 256 цветами.

Входы в этих таблицах могут быть восстановлены(отысканы) с IDirectDrawPalette:: GetEntries метод и изменяться с IDirectDrawPalette:: SetEntries метод. IDirectDrawPalette:: SetEntries метод имеет параметр dwFlags, который определяет, когда изменения для палитры должны воздействовать.

Объекты DirectDrawPalette обычно присоединяются к объектам DirectDrawSurface.

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



IDirectDrawPalette:: QueryInterface


HRESULT QueryInterface (REFIID riid, LPVOID FAR * ppvObj);

Определяет, поддерживает ли объект DirectDrawPalette COM интерфейс. Если поддерживает, то система увеличивает значение  ссылки на объект, и прикладная программа может начинать использовать тот интерфейс. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

riid

Идентификатор ссылки запрашиваемого интерфейса.

ppvObj

Адрес указателя, который получает указатель интерфейса если запрос успешен.

См. также IDirectDrawPalette:: AddRef, IDirectDrawPalette:: Initialize, IDirectDrawPalette:: Release



IDirectDrawPalette:: Release


ULONG

Release ();

Уменьшает счет ссылки объекта DirectDrawPalette на 1. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.

Возвращает новый счет ссылки объекта.

Объект DirectDrawPalette освобождает себя, когда счет ссылки достигает 0. Используйте IDirectDrawPalette:: AddRef,  чтобы увеличить счет ссылки объекта 1.

См. также IDirectDrawPalette:: AddRef, IDirectDrawPalette:: Initialize, IDirectDrawPalette:: QueryInterface



IDirectDrawPalette:: SetEntries


HRESULT SetEntries (DWORD

dwFlags,

DWORD

dwStartingEntry, DWORD

dwCount,

LPPALETTEENTRY lpEntries);

Изменяет входы в DirectDrawPalette немедленно. Палитра должна быть присоединена к поверхности, используя метод IDirectDrawSurface:: SetPalette прежде, чем IDirectDrawPalette:: SetEntries может использоваться.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_NOPALETTEATTACHED           DDERR_NOTPALETTIZED     



IDirectDrawSurface:: AddOverlayDirtyRect


HRESULT AddOverlayDirtyRect (LPRECT lpRect);

Формирует список из прямоугольников, которые должны модифицироваться при следующем вызове метода IDirectDrawSurface:: UpdateOverlayDisplay.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_UNSUPPORTED          DDERR_INVALIDSURFACETYPE       

lpRect

Адрес структуры RECT, которая должна модифицироваться.

Этот метод используется для реализации программной эмуляции. Это не необходимо, если оверлеи обеспечиваются аппаратными средствами.



IDirectDrawSurface:: AddRef


ULONG

AddRef ();

Увеличивает счет ссылки объекта DirectDrawSurface на 1. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.

Возвращает новый счет ссылки объекта.

Когда объект DirectDraw создан, счет ссылки установлен в 1. Каждый раз когда прикладная программа получает интерфейс к объекту или вызывает метод AddRef, счет ссылки объекта увеличивается на 1. Используйте метод  IDirectDrawSurface::Release, чтобы уменьшить счет ссылки объекта на 1.

См. также IDirectDraw:: CreateSurface, IDirectDrawSurface:: Initialize, IDirectDrawSurface:: QueryInterface, IDirectDrawSurface:: Release



IDirectDrawSurface:: Blt


HRESULT Blt (LPRECT lpDestRect,

LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect,

DWORD dwFlags, LPDDBLTFX lpDDBltFx);

Выполняет бит-блиттинговую (поблочную) пересылку.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_GENERIC         DDERR_INVALIDCLIPLIST   

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_INVALIDRECT             DDERR_NOALPHAHW           

DDERR_NOBLTHW       DDERR_NOCLIPLIST

DDERR_NODDROPSHW           DDERR_NOMIRRORHW        

DDERR_NORASTEROPHW       DDERR_NOROTATIONHW    

DDERR_NOSTRETCHHW          DDERR_NOZBUFFERHW       

DDERR_SURFACEBUSY           DDERR_SURFACELOST         



IDirectDrawSurface:: BltBatch


HRESULT BltBatch (LPDDBLTBATCH lpDDBltBatch,

DWORD dwCount, DWORD dwFlags);

Выполняет последовательность операций IDirectDrawSurface:: Blt от нескольких источников в одиночный адресат. В настоящее время этот метод не выполнен.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_GENERIC         DDERR_INVALIDCLIPLIST   

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_INVALIDRECT             DDERR_NOALPHAHW           

DDERR_NOBLTHW       DDERR_NOCLIPLIST

DDERR_NODDROPSHW           DDERR_NOMIRRORHW        

DDERR_NORASTEROPHW       DDERR_NOROTATIONHW    

DDERR_NOSTRETCHHW          DDERR_NOZBUFFERHW       

DDERR_SURFACEBUSY           DDERR_SURFACELOST         



IDirectDrawSurface:: BltFast


HRESULT BltFast (DWORD dwX, DWORD dwY,

LPDIRECTDRAWSURFACE lpDDSrcSurface,

LPRECT lpSrcRect, DWORD dwTrans);

Выполняет блиттинг исходной копии или прозрачный блиттинг с использованием color key источника или адресата. Этот метод всегда делает попытку асинхронного блиттинга, если это поддерживается аппаратными средствами.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_EXCEPTION    DDERR_GENERIC      

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_INVALIDRECT             DDERR_NOBLTHW    

DDERR_SURFACEBUSY           DDERR_SURFACELOST         



IDirectDrawSurface:: DeleteAttachedSurface


HRESULT DeleteAttachedSurface (DWORD dwFlags,

LPDIRECTDRAWSURFACE lpDDSAttachedSurface);

Отсоединяет две присоединенных поверхности. Отсоединяемая поверхность не уничтожается.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_CANNOTDETACHSURFACE  

DDERR_INVALIDPARAMS       DDERR_SURFACENOTATTACHED     



IDirectDrawSurface:: EnumAttachedSurfaces


HRESULT EnumAttachedSurfaces (LPVOID lpContext,

LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback);

Перечисляет все поверхности, присоединенные к данной поверхности.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    



IDirectDrawSurface:: EnumOverlayZOrders


HRESULT EnumOverlayZOrders (DWORD dwFlags,

LPVOID lpContext,

LPDDENUMSURFACESCALLBACK lpfnCallback);

Перечисляет оверлеи на определенном адресате. Оверлеи могут перечисляться в порядке back-to-front(из конца в начало) или front-to-back( из начала в конец).

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

dwFlags



IDirectDrawSurface:: GetAttachedSurface


HRESULT GetAttachedSurface (LPDDSCAPS lpDDSCaps,

LPLPDIRECTDRAWSURFACE FAR * lplpDDAttachedSurface);

Получает присоединенную поверхность, которая имеет определенные возможности.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_NOTFOUND     DDERR_SURFACELOST         

lpDDSCaps

Адрес структуры DDSCAPS, которая содержит аппаратные возможности поверхности.

lplpDDAttachedSurface

Адрес указателя на DirectDrawSurface, который будет присоединен к текущему DirectDrawSurface, определенному lpDDSurface и имеет возможности, которые соответствуют определенному параметру lpDDSCaps.

Присоединения используются, чтобы соединить многочисленные объекты DirectDrawSurface в сложные структуры, подобно 3D странице, переключающейся с z-буферами. Вызов метода будет неудачен, если присоединена больше чем одна поверхность, для запрошенных возможностей. В этом случае, прикладная программа должна использовать IDirectDrawSurface:: EnumAttachedSurfaces, чтобы получить неуникальные присоединенные поверхности.



IDirectDrawSurface:: GetBltStatus


HRESULT GetBltStatus (DWORD dwFlags);

Получает состояние блиттера. Этот метод возвращает DD_OK, если блиттер присутствует, DDERR_WASSTILLDRAWING, если блиттер занят, или DDERR_NOBLTHW, если не имеется никакого блиттера.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_NOBLTHW       DDERR_SURFACEBUSY        

DDERR_SURFACELOST            DDERR_UNSUPPORTED       



IDirectDrawSurface:: GetCaps


HRESULT GetCaps (LPDDSCAPS lpDDSCaps);

Возвращает возможности поверхности. Эти возможности не обязательно связаны с возможностями устройства дисплея.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

lpDDCaps

Адрес структуры DDCAPS, которая будет заполнена аппаратными возможностями поверхности.



IDirectDrawSurface:: GetColorKey


HRESULT GetColorKey (DWORD dwFlags,

LPDDCOLORKEY lpDDColorKey);

Возвращает color key для объекта DirectDrawSurface.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_NOCOLORKEYHW       DDERR_NOCOLORKEY          

DDERR_SURFACELOST            DDERR_UNSUPPORTED       

dwFlags

Определяет, какой color key запрошен.



IDirectDrawSurface:: GetDC


HRESULT GetDC (HDC FAR * lphDC);

Создает gdi-совместимый hDC для поверхности.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_DCALREADYCREATED            DDERR_GENERIC      

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_INVALIDSURFACETYPE          DDERR_SURFACELOST         

DDERR_UNSUPPORTED          DDERR_WASSTILLDRAWING           

lphDC

Адрес возвращенного hDC.

Этот метод использует внутреннюю версию IDirectDrawSurface::Lock, чтобы блокировать поверхность, и поверхность останется блокированной, пока не вызовется  метод IDirectDrawSurface:: ReleaseDC. Для большего количества информации, см. описание метода IDirectDrawSurface:Lock.



IDirectDrawSurface:: GetFlipStatus


HRESULT GetFlipStatus (DWORD dwFlags);

Указывает, закончила ли поверхность процесс переключения. Если поверхность не закончила процесс, возвращает DDERR_WASSTILLDRAWING.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_INVALIDSURFACETYPE          DDERR_SURFACEBUSY        

DDERR_SURFACELOST            DDERR_UNSUPPORTED       



IDirectDrawSurface:: GetOverlayPosition


HRESULT GetOverlayPosition (LPLONG lplX, LPLONG lplY);

Возвращает видимую, активную оверлейную поверхность ( набор флажков DDSCAPS_OVERLAY), этот метод возвращает дисплейные координаты поверхности.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_GENERIC         DDERR_INVALIDOBJECT      

DDERR_INVALIDPARAMS       DDERR_INVALIDPOSITION  

DDERR_NOOVERLAYDEST       DDERR_NOTAOVERLAYSURFACE     

DDERR_OVERLAYNOTVISIBLE            DDERR_SURFACELOST         

lplX

Адрес  x-координаты дисплея.

lplY

Адрес  y-координаты дисплея.

См. также IDirectDrawSurface:: SetOverlayPosition, IDirectDrawSurface:: UpdateOverlay



IDirectDrawSurface:: GetPixelFormat


HRESULT GetPixelFormat (LPDDPIXELFORMAT lpDDPixelFormat);

Возвращает цвет и формат пикселя поверхности.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    



IDirectDrawSurface:: GetSurfaceDesc


HRESULT GetSurfaceDesc (LPDDSURFACEDESC lpDDSurfaceDesc);

Возвращает структуру DDSURFACEDESC, которая описывает поверхность в текущем состоянии.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

lpDDSurfaceDesc

Адрес структуры DDSURFACEDESC, для заполнения  текущим описанием этой поверхности.



IDirectDrawSurface:: Initialize


HRESULT

Initialize (LPDIRECTDRAW lpDD,

LPDDSURFACEDESC lpDDSurfaceDesc);

Инициализирует DirectDrawSurface.



IDirectDrawSurface:: IsLost


HRESULT

IsLost ();

Определяет, была ли поверхностная память, связанная с DirectDrawSurface освобождена. Если память не была освобождена, этот метод возвратит DD_OK.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    



IDirectDrawSurface:: Lock


HRESULT

Lock (LPRECT

lpDestRect,

LPDDSURFACEDESC lpDDSurfaceDesc,

DWORD

dwFlags, HANDLE hEvent);

Получает указатель на поверхностную память.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_OUTOFMEMORY         DDERR_SURFACEBUSY        

DDERR_SURFACELOST            DDERR_WASSTILLDRAWING           

lpDestRect

Адрес структуры RECT, которая идентифицирует область поверхности которая блокируется.

lpDDSurfaceDesc

Адрес структуры DDSURFACEDESC для заполнения релевантными деталями относительно поверхности.

dwFlags



IDirectDrawSurface:: QueryInterface


HRESULT QueryInterface (REFIID riid, LPVOID FAR * ppvObj);

Определяет, поддерживает ли объект DirectDrawSurface COM интерфейс. Если поддерживает, то система увеличивает  ссылку на объект, и прикладная программа может начинать использовать этот интерфейс. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    



IDirectDrawSurface:: Release


ULONG

Release ();

Уменьшает счет ссылки объекта DirectDrawSurface на 1. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.

Возвращает новый счет ссылки объекта.

Объект DirectDrawSurface освобождает себя, когда счет ссылки достигает 0. Используйте IDirectDrawSurface:: AddRef, чтобы увеличить счет ссылки объекта 1.

См. также IDirectDrawSurface:: AddRef, IDirectDrawSurface:: Initialize, IDirectDrawSurface:: QueryInterface



IDirectDrawSurface:: ReleaseDC


HRESULT

ReleaseDC (HDC hDC);

Выпускает hDC, предварительно полученный  методом IDirectDrawSurface:: GetDC.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_GENERIC         DDERR_INVALIDOBJECT      

DDERR_INVALIDPARAMS       DDERR_SURFACELOST         



IDirectDrawSurface:: Restore


HRESULT

Restore ();

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

Возвраты DD_OK - успешное, или одно из следующих значений ошибки:

DDERR_GENERIC         DDERR_INCOMPATIBLEPRIMARY   

DDERR_IMPLICITLYCREATED             DDERR_INVALIDOBJECT      

DDERR_INVALIDPARAMS       DDERR_NOEXCLUSIVEMODE           

DDERR_OUTOFMEMORY         DDERR_UNSUPPORTED       



IDirectDrawSurface:: SetClipper


HRESULT SetClipper (LPDIRECTDRAWCLIPPER lpDDClipper);

Присоединяет объект DirectDrawClipper к объекту DirectDrawSurface.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_INVALIDSURFACETYPE          DDERR_NOCLIPPERATTACHED        

lpDDClipper

Адрес структуры DirectDrawClipper, представляющей DirectDrawClipper, который будет присоединен к DirectDrawSurface. Если NULL, текущий ограничитель будет отсоединен.

Этот метод прежде всего используется оверлейными поверхностями или осуществляют блиттинг на основную поверхность. Но этот метод  может использоваться на любой поверхности. Как только DirectDrawClipper был присоединен, и существует отсекающийся список, объект ограничителя будет использоваться для IDirectDrawSurface::Blt, IDirectDrawSurface::BltBatch, и операций IDirectDrawSurface::UpdateOverlay, включающих родительский DirectDrawSurface. Этот метод может также отсоединять текущий ограничитель DirectDrawSurface.



IDirectDrawSurface:: SetColorKey


HRESULT SetColorKey (DWORD dwFlags,

LPDDCOLORKEY lpDDColorKey);

Устанавливает значение color key для объекта DirectDrawSurface, если аппаратные средства поддерживают color key на поверхности.

Возвраты DD_OK - успешное, или одно из следующих значений ошибки:

DDERR_GENERIC         DDERR_INVALIDOBJECT      

DDERR_INVALIDPARAMS       DDERR_INVALIDSURFACETYPE       

DDERR_NOOVERLAYHW          DDERR_NOTAOVERLAYSURFACE     

DDERR_SURFACELOST            DDERR_UNSUPPORTED       



IDirectDrawSurface:: SetOverlayPosition


HRESULT SetOverlayPosition (LONG lX, LONG lY);

Изменяет дисплейные координаты оверлейной поверхности.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_GENERIC         DDERR_INVALIDOBJECT      

DDERR_INVALIDPARAMS       DDERR_SURFACELOST         



IDirectDrawSurface:: SetPalette


HRESULT SetPalette (LPDIRECTDRAWPALETTE lpDDPalette);

Присоединяет определенный DirectDrawPalette к поверхности. Поверхность использует эту палитру для всех последующих операций. Изменение палитры происходит немедленно, без ожидания обновления синхронизации.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_GENERIC         DDERR_INVALIDOBJECT      

DDERR_INVALIDPARAMS       DDERR_INVALIDSURFACETYPE       

DDERR_NOEXCLUSIVEMODE              DDERR_NOPALETTEATTACHED        

DDERR_NOPALETTEHW           DDERR_NOT8BITCOLOR       

DDERR_SURFACELOST            DDERR_UNSUPPORTED       

lpDDPalette

Адрес структуры DirectDrawPalette, которую эта поверхность должна использовать для будущих операций.



IDirectDrawSurface:: Unlock


HRESULT Unlock (LPVOID lpSurfaceData);

Сообщает DirectDraw, что прямые поверхностные изменения выполнены.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_GENERIC         DDERR_INVALIDOBJECT      

DDERR_INVALIDPARAMS       DDERR_INVALIDRECT          

DDERR_NOTLOCKED  DDERR_SURFACELOST         

lpSurfaceData

Адрес указателя, возвращенного методом IDirectDrawSurface::Lock.



IDirectDrawSurface:: UpdateOverlay


HRESULT

UpdateOverlay (LPRECT

lpSrcRect,

LPDIRECTDRAWSURFACE lpDDDestSurface,

LPRECT

lpDestRect, DWORD

dwFlags,

LPDDOVERLAYFX lpDDOverlayFx);

Повторно устанавливает или изменяет визуальные атрибуты оверлейной поверхности. Эта поверхность должна иметь набор значений DDSCAPS_OVERLAY.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_GENERIC         DDERR_HEIGHTALIGN         

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_INVALIDRECT             DDERR_INVALIDSURFACETYPE       

DDERR_NOSTRETCHHW          DDERR_NOTAOVERLAYSURFACE     

DDERR_SURFACELOST            DDERR_UNSUPPORTED       



IDirectDrawSurface:: UpdateOverlayDisplay


HRESULT UpdateOverlayDisplay (DWORD dwFlags);

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

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

DDERR_UNSUPPORTED          DDERR_INVALIDSURFACETYPE       

dwFlags

Определяет тип модификации.



IDirectDrawSurface:: UpdateOverlayZOrder


HRESULT UpdateOverlayZOrder (DWORD dwFlags,

LPDIRECTDRAWSURFACE lpDDSReference);

Устанавливает z-порядок оверлея. Z-порядок определяет, какой оверлей должен быть перекрыт, когда многочисленные оверлеи отображаются одновременно. Оверлейные позиции относительны и не имеют никакого истинного z-значения.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    



IDirectDrawSurface2:: GetDDInterface


HRESULT GetDDInterface(LPVOID FAR *lplpDD);

Возвращает интерфейс объекту DirectDraw, который использовался для создания поверхности.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_INVALIDOBJECT         DDERR_INVALIDPARAMS    

lplpDD

Адрес указателя, который будет заполнен имеющим силу DirectDraw указателем если обращение успешно.

Чтобы гарантировать совместимость с COM, этот метод - не часть интерфейса IDirectDrawSurface, но интерфейса IDirectDrawSurface2. Чтобы использовать этот метод, Вы должны сначала сделать запрос для интерфейса IDirectDrawSurface2. Для большего количества информации, см. Интерфейс IDirectDrawSurface2.



IDirectDrawSurface2:: PageLock


HRESULT PageLock (DWORD dwFlags);

Предотвращает поверхность памяти системы от доступа во время использование блиттингом DMA передачи в или из памяти системы.  Счет блокировки поддерживается для каждой поверхности и увеличивается каждый раз, когда метод IDirectDrawSurface2:: PageLock запрашивает поверхность. Счет декрементируется, когда вызывется метод IDirectDrawSurface2:: PageUnlock. Когда счет достигает 0, память разблокирована и может просматриваться операционной системой.



IDirectDrawSurface2:: PageUnlock


HRESULT PageUnlock (DWORD dwFlags);

Разблокирует поверхность памяти системы, позволяя ей просматриваться снаружи. Счет блокировки поддерживается для каждой поверхности и увеличивается каждый раз, когда IDirectDrawSurface2:: PageLock запрашивает эту поверхность. Счет уменьшается при вызове IDirectDrawSurface2:: PageUnlock. Когда счет достигает 0, память разблокирована и может просматриваться операционной системой.

Возвращает DD_OK если успешно, или одно из следующих значений ошибки:

DDERR_CANTPAGEUNLOCK    DDERR_INVALIDOBJECT      

DDERR_INVALIDPARAMS       DDERR_NOTPAGELOCKED   



Интерфейс драйвера Direct3D


DirectDraw представляет единый, обьединенный объект для Вас, как программиста прикладной программы. Этот объект объединяет и DirectDraw и  Direct3D. DirectDraw драйвер COM интерфейса (IID_IDirectDraw или IID_IDirectDraw2) и Direct3D драйвер COM интерфейса (IID_IDirect3D) позволяют Вам связываться с тем же самым основным объектом. Поэтому объект Direct3D не создан. Но интерфейс Direct3D к объекту DirectDraw получен. Это достигнуто, используя стандартный COM метод QueryInterface.

Следующий пример показывает, как создать объект DirectDraw и получить интерфейс Direct3D для связи с тем объектом.

LPDIRECTDRAW lpDD;

LPDIRECT3D   lpD3D;

ddres = DirectDrawCreate(NULL, &lpDD, NULL);

if

(FAILED(ddres))

                ...

ddres = lpDD->QueryInterface(IID_IDirect3D,

&lpD3D);

if

(FAILED(ddres))

                ...

Код, показанный в предыдущем примере создает одиночный объект и получает два интерфейса к тому объекту. Следовательно, счет ссылки объекта после IDirectDraw:: QueryInterface - два. Важное значение этот - то, что срок службы Direct3D состояния драйвера является такимже, как у объекта DirectDraw. Выпуск интерфейса Direct3D не уничтожает состояние драйвера Direct3D. Это состояние не разрушается до тех пор, пока все ссылки, или DirectDraw или Direct3D объекты не будут разрушены. Следовательно, если Вы выпускаете интерфейс к Direct3D при замораживании ссылки к DirectDraw интерфейсу драйвера, и перезапросите интерфейса Direct3D, состояние Direct3D будет сохраняться.



Интерфейс IDirectDraw


Объекты DirectDraw представляют аппаратные средства дисплея.  Три типа объектов могут быть созданы объектом DirectDraw: DirectDrawSurface, DirectDrawPalette, и DirectDrawClipper.

Больше чем один объект DirectDraw могут быть инициализированы одновременно. Самый простой пример -  использование двух мониторов на Windows 95 системе. Хотя Windows 95 не поддерживает двойные мониторы непосредственноy, возможно писать в DirectDraw HAL для каждого устройства дисплея. Устройство дисплея, которое Windows 95 и GDI распознает - то, которое будет использоваться, когда инициализирован заданный по умолчанию объект DirectDraw. Устройство дисплея, которое Windows 95 и GDI не распознает, может быть адресовано другим, независимым объектом DirectDraw, который должен быть создан, используя вторую идентификацию устройства дисплея GUID. Этот GUID может быть получен через функцию DirectDrawEnumerate.

Объект DirectDraw управляет всеми объектами, которые он создает. Он управляет заданной по умолчанию палитрой, если основная поверхность находится в 8 bpp режим, заданными по умолчанию color key, и аппаратными режимами дисплея. Он отслеживает, какие ресурсы были распределены и какие ресурсы остаются, чтобы быть распределенными.

Изменение режима дисплея - важная часть функциональных возможностей DirectDraw. Разрешающая способность режима дисплея может быть изменена в любое время, если другая прикладная программа не получила исключительный доступ к DirectDraw. Глубина  пикселей режима дисплея может быть изменена, если прикладная программа, запрашивающая изменение получила исключительный доступ к объекту DirectDraw. Все объекты  DirectDrawSurface потеряют поверхностную память и станут бездействующими, когда режим изменен. Память поверхности должна быть перераспределена, используя IDirectDrawSurface::Restore.




COM модель, используемая в DirectDraw определяет, что новые функциональные возможности могут быть добавлены при использовании новых интерфейсов. Эта версия DirectDraw предоставляет два новых интерфейса, Интерфейс IDirectDraw2 и Интерфейс IDirectDrawSurface2. Эти новые интерфейсы могут быть получены,  используя метод IDirectDraw:: QueryInterface , как показано в следующем примере:

    / *

·         Создать интерфейс IDirectDraw2

     * /

LPDIRECTDRAW lpDD;

LPDIRECTDRAW2 lpDD2;

Ddrval = DirectDrawCreate (NULL, &lpDD, NULL);

if  (ddrval!= DD_OK)

return;

Ddrval = lpDD- > SetCooperativeLevel (hwnd,


Интерфейс IDirectDrawSurface


Объект DirectDrawSurface представляет часть памяти, которая содержит данные. Эти данные находятся в форме, понятой аппаратным средствам дисплея, представляемыми объектом DirectDraw, который создал объект DirectDrawSurface. Объект DirectDrawSurface создается методом IDirectDraw:: CreateSurface. Не требуется, чтобы  объект DirectDrawSurface находился в оперативной памяти дисплея платы дисплея. Если это определенно не установлено в течение создания объекта DirectDrawSurface, объект DirectDraw поместит объект DirectDrawSurface туда, где  может быть достигнута самая лучшая эффективность для  данной запрошенной возможности.

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

Объекты DirectDrawSurface распознаются как интегрированные с остальной частью компонентов системы дисплея Windows. Объекты DirectDrawSurface могут создавать программы обработки  к контексту устройства GDI  (HDC), которые позволяют функциям GDI писать в поверхностную память, представляемой объектом DirectDrawSurface. GDI чувствует эти HDC как контексты устройства памяти и для них допускаются аппаратные акселераторы, если они находятся в памяти дисплея.




COM модель, которую использует DirectDraw использования определяет, что, обеспечивая новые интерфейсы, могут быть добавлены новые функциональные возможности. Эта версия DirectDraw предоставляет два новых интерфейса, интерфейс IDirectDraw2 и интерфейс IDirectDrawSurface2.

Следующий пример показывает, как создать интерфейс IDirectDrawSurface2:

LPDIRECTDRAWSURFACE lpSurf;

LPDIRECTDRAWSURFACE2 lpSurf2;

// Создают поверхности

memset( &ddsd, 0, sizeof ( ddsd ) );

ddsd.dwSize = sizeof( ddsd );

ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;

ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN |


Интерфейс текстуры Direct3D


Direct3D текстуры - не другие объектные типы, а  другой интерфейс объектов DirectDrawSurface. Следующий пример получает интерфейс текстуры Direct3D из объекта DirectDrawSurface.

LPDIRECTDRAWSURFACE lpDDSurface;

LPDIRECT3DTEXTURE   lpD3DTexture;

ddres = lpDD->CreateSurface(&ddsd, &lpDDSurface,



Интерфейс устройства Direct3D


Как для объекта, не имеется никакого отличия Direct3D объекта устройства. Direct3D устройство - просто интерфейс для связи с DirectDraw поверхностью, используемой как 3D  адресат. Следующий пример создает Direct3D интерфейс устройства к объекту DirectDrawSurface.

LPDIRECTDRAWSURFACE lpDDSurface;

LPDIRECT3DDEVICE    lpD3DDevice;

ddres = lpDD->CreateSurface(&ddsd, &lpDDSurface,



Использование DirectX 2 в Windows


Microsoft® DirectX™ 2 Комплект Разработки Программного обеспечения (SDK) обеспечивает набор интерфейсов программирования прикладной программы (API) который дает Вам, разработчику, ресурсы необходимые для разработки быстродействующих, в реальном масштабе, времени программ, типа игр и мультимедиа приложений следующего поколения..

Microsoft разработал DirectX 2 SDK по ряду причин. Основная  причина состоит в том, чтобы сделать Windows платформу более эффективной, чем MS DOS  или игровые платформы. Другая причина состоит в том, чтобы поддержать игровые разработки для Microsoft Windows, и помочь Вам,  обеспечивая работу в стандартизированной  и хорошо документированной платформе.



Использование макроопределений


Многие из файлов заголовков для интерфейсов DirectX включают макроопределения для каждого метода. Эти макрокоманды включены, чтобы упростить использование методов в вашем программировании.

Например, следующий пример использует IDirectDraw_CreateSurface макрокоманду, чтобы вызвать метод IDirectDraw:: CreateSurface. Первый параметр - ссылка на объект DirectDraw, который был создан и вызывает метод:

ret = IDirectDraw_CreateSurface (lpDD, &ddsd,&lpDDS,



Истинный цветной режим с 24 битами


// цвет 255,128,128 - color key

dwColorSpaceLowValue = RGBQUAD(255,128,128);

dwColorSpaceHighValue = RGBQUAD(255,128,128);