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);