Microsoft DirectX 2
AutoPlay
AutoPlay - особенность Windows 95,и состоит в том что автоматически играет CD-ROM или звуковой CD, когда он вставлен в дисковод CD-ROM. Эта особенность не специфична для Windows 95 DirectX 2 SDK; любой программе на CD-ROM для получения эмблемы Windows 95 необходима AutoPlay.Не были сделаны никакие изменения версии AutoPlay.
Блиттинг в и из поверхностей системной памяти
Некоторые платы дисплея имеют DMA аппаратные средства, которые позволяют им эффективно использовать блиттинг в и из поверхностей памяти системы. Структура DDCAPS была расширена, чтобы позволить драйверам сообщать эту возможность. Были добавлены Следующие члены :DWORD dwSVBCaps
DWORD dwSVBCKeyCaps
DWORD
dwSVBFXCaps
DWORD
dwSVBRops [DD_ROP_SPACE]
DWORD
dwVSBCaps
DWORD
dwVSBCKeyCaps
DWORD
dwVSBFXCaps
DWORD
dwVSBRops [DD_ROP_SPACE]
DWORD
dwSSBCaps
DWORD
dwSSBCKeyCaps
DWORD
dwSSBFXCaps
DWORD
dwSSBRops [DD_ROP_SPACE]
SVB префикс указывает значения возможностей, которые связывают память системы с блиттингом в память дисплея.
VSB префикс указывает значения возможностей, которые связывают память дисплея с блиттингомв память дисплея.
SSB префикс указывает значения возможностей, которые связывают память системы с блиттингом в память системы.
Член DwSVBCaps соответствует члену dwCaps за исключением того, что описывает блиттинг-возможности драйвера дисплея для памяти системы. Аналогично, dwSVBCKeyCaps соответствует dwCKeyCaps, и dwSVBFXCaps соответствует dwFXCaps. Массив DwSVBRops описывает растровые операции, которые драйвер поддерживает для этого типа блиттингаt.
Эти члены имеют силу, если флажок DDCAPS_CANBLTSYSMEM установлен в dwCaps, указывая, что драйвер является способным к блиттингу в или из памяти системы.
Если поверхность памяти системы, используемая аппаратными средствами блиттинга не блокирована, DirectDraw автоматически вызовет IDirectDrawSurface2:: PageLock для поверхности, чтобы гарантировать, что память была блокирована.
C ++ и интерфейс COM
В C ++ программе интерфейс COM подобен абстрактному основному классу. То есть определяет набор сигнатур и семантики, но не реализацию, и никакие данные состояния не связаны с интерфейсом. В C ++ абстрактном основном классе все методы определены как « pure virtual « что означает, что они не имеют никакого кода, связанного с ними.Чистые действительные функции C ++ и COM связываются с помощью устройства называемого vtable. Vtable содержит адреса всех функций, которые выполняют данный интерфейс. Если Вы хотите, чтобы программа или объект использовали эти функции, Вы должны использовать метод QueryInterface , чтобы проверить, что интерфейс существует, и получить указатель на этот интерфейс. То что ваша программа или объект фактически получает от объекта после посылки QueryInterface -это указатель на vtable, через который этот метод может вызывать методы интерфейса, связанные с объектом. Этот механизм полностью изолирует частные данные, используемые объектом и вызывающим процессом пользователя.
Другое подобие объектов COM с объектами C ++ - то, что первый параметр метода является именем интерфейса или класса, называемого в C ++ this. Так как объекты COM и объекты C ++ полностью двоично совместимы, транслятор обрабатывает интерфейсы COM подобно абстрактному классу C ++ и принимает тот же самый синтаксис. Это является результатом менее сложного кода. Например, параметр this в C ++ обрабатывается неявно через vtable, поскольку параметр не кодированный.
Callback функции
Большинство функциональных возможностей DirectDraw обеспечивается методами COM интерфейса. Этот раздел вносит в список функции callback, которые не выполнены как часть интерфейса COM.Callback
BOOLWINAPI lpCallback(GUID FAR * lpGUID,
LPSTR
lpDriverDescription, LPSTR
lpDriverName,
LPVOID
lpContext);
Определенная прикладная программой процедура callback для функции DirectDrawEnumerate.
Возвращает DDENUMRET_OK, чтобы продолжить перечисление, или DDENUMRET_CANCEL, чтобы остановить.
lpGUID
Адрес уникального идентификатора объекта DirectDraw.
lpDriverDescription
Адрес строки, содержащей описание драйвера.
lpDriverName
Адрес строки, содержащей имя драйвера.
lpContext
Адрес caller-определенной структуры, которая будет передана к функции callback каждый раз, когда вызывается функция.
CreateSurface
Возможности устройства GetCapsРежимы дисплея EnumDisplayModes
Минимальный оверлейный коэффициент растяжения, умноженный
dwVidMemTotalОбщая сумма памяти дисплея.
dwVidMemFree
Количество свободной памяти дисплея.
dwMaxVisibleOverlays
Максимальное число видимых оверлеев.
dwCurrVisibleOverlays
Текущее число видимых оверлеев.
dwNumFourCCCodes
Число FourCC кодов.
dwAlignBoundarySrc
Исходное выравнивание прямоугольника.
dwAlignSizeSrc
Исходный размер прямоугольника в байтах.
dwAlignBoundaryDest
Выравнивание прямоугольника адресата.
dwAlignSizeDest
Размер прямоугольника адресата, в байтах.
dwAlignStrideAlign
Выравнивание шага.
dwRops[DD_ROP_SPACE]
Поддерживаемые растровые операции.
ddsCaps
Указывает на структуру DDSCAPS с общими возможностями.
dwMinOverlayStretch
Минимальный оверлейный коэффициент растяжения, умноженный на 1000. Например, 1.0 = 1000, 1.3 = 1300.
dwMaxOverlayStretch
Максимальный оверлейный коэффициент растяжения, умноженный на 1000. Например, 1.0 = 1000, 1.3 = 1300.
dwMinLiveVideoStretch
Минимальный коэффициент растяжения видео, умноженный на 1000. Например, 1.0 = 1000, 1.3 = 1300.
dwMaxLiveVideoStretch
Максимальный коэффициент растяжения видео, умноженный на 1000. Например, 1.0 = 1000, 1.3 = 1300.
dwMinHwCodecStretch
Минимальный коэффициент растяжения codec, умноженный на 1000. Например, 1.0 = 1000, 1.3 = 1300.
dwMaxHwCodecStretch
Максимальный коэффициент растяжения codec, умноженный на 1000. Например, 1.0 = 1000, 1.3 = 1300.
dwReserved1,dwReserved2 ,dwReserved3
Резервируется для будущего использования.
dwSVBCaps
Определяет драйвер-специфические возможности для блиттинга из памяти системы в видеопамять.
dwSVBCKeyCaps
Определяет color key возможности драйвера для блиттинга из памяти системы в видеопамять.
dwSVBFXCaps
Определяет драйвер FX возможности для блиттинга из памяти системы в видеопамять.
dwSVBRops[DD_ROP_SPACE]
Определяет растровые операции для блиттинга из памяти системы в видеопамять
dwVSBCaps
Определяет драйвер-специфические возможности для блиттинга из памяти дисплея память системы.
dwVSBCKeyCaps
dwVSBFXCaps
Определяет драйвер FX возможности для блиттинга из памяти дисплея в память системы.
dwVSBRops[DD_ROP_SPACE]
Поддерживает растровые операции для блиттинга из памяти дисплея в память системы.
dwSSBCaps
Определяет драйвер-специфические возможности для блиттинга из памяти системы в память системы.
dwSSBCKeyCaps
Определяет color key возможности драйвера для блиттинга из памяти системы в память системы.
dwSSBCFXCaps
Определяет драйвер FX возможности для блиттинга из памяти системы в память системы.
dwSSBRops[DD_ROP_SPACE]
Растровые операции для блиттинга из памяти системы в память системы.
dwReserved4, dwReserved5, dwReserved6
Резервируется для будущего использования.
Значения для dw ... BitDepths членов (dwAlphaBltConstBitDepths, dwAlphaBltPixelBitDepths, dwAlphBltSurfaceBitDepths, и так далее):
DDBD_1 1 Бит на пиксель.
DDBD_2 2 Бита на пиксель.
DDBD_4 4 Бита на пиксель.
DDBD_8 8 Битов на пиксель.
DDBD_16 16 Битов на пиксель.
DDBD_24 24 Битов на пиксель.
DDBD_32 32 Битов на пиксель.
Определяет color key возможности драйвера дляблиттинга из памяти дисплея в память системы.
DDBLT_ALPHADEST
Использует или альфа информацию в формате пикселя или альфа поверхности канала, присоединенной к поверхности адресата как альфа канал для этого блиттинга.Использует альфа информацию или в формате пикселя или в фомате поверхности , присоединенной к поверхности адресата как альфа канал для этого блиттинга.
DDBLT_ALPHADESTCONSTOVERRIDE
Использует член dwAlphaDestConst в структуре DDBLTFX как альфа канал для поверхности адресата этого блиттинга.Использует dwAlphaDestConst член в структуре DDBLTFX как альфа канал для поверхности адресата этого блиттинга .
DDBLT_ALPHADESTNEG
Суффикс NEG указывает, что поверхность адресата становится более яркой( увеличение на значение альфа (0 непрозрачный)).DDBLT_ALPHADESTSURFACEOVERRIDE
Использует lpDDSAlphaDest член в структуре DDBLTFX как альфа канал для адресата.DDBLT_ALPHAEDGEBLEND
Использует dwAlphaEdgeBlend член в структуре DDBLTFX как альфа канал для граней изображения, которые ограничивают цвета color key.DDBLT_ALPHASRC
Использует или альфа информацию в формате пикселя или альфа поверхности канала, присоединенной к исходной поверхности как альфа канал для этого блиттинга.DDBLT_ALPHASRCCONSTOVERRIDE
Использует dwAlphaSrcConst член в структуре DDBLTFX как альфа канал для источника этого блиттинга.DDBLT_ALPHASRCNEG
Суффикс NEG указывает, что исходная поверхность становится более яркой( увеличение на значение альфа (0 непрозрачный)).DDBLT_ALPHASRCSURFACEOVERRIDE
Использует lpDDSAlphaSrc член в структуре DDBLTFX как альфа канал для источника.DDBLT_ASYNC
Выполняет этот блиттинг асинхронно через FIFO в полученном порядке. Если никакой участок памяти не доступен в FIFO аппаратных средств происходит сбой обращения.DDBLT_COLORFILL
Использует dwFillColor член в структуре DDBLTFX как RGB цвет, который заполняет прямоугольник адресата на поверхности адресата.DDBLT_DDFX
Использует dwDDFX член в структуре DDBLTFX, чтобы определить эффекты, которые использовать для блиттинга.DDBLT_DDROPS
Использует dwDDROPS член в структуре DDBLTFX, чтобы определить растровые операции, которые не являются частью Win32 API.DDBLT_DEPTHFILL
Использует dwFillDepth член в структуре DDBLTFX как значение глубины , чтобы заполнить прямоугольник адресата на поверхности z-буфера адресата.DDBLT_KEYDEST
Использует color key, связанный с поверхностью адресата.DDBLT_KEYDESTOVERRIDE
Использует dckDestColorkey член в структуре DDBLTFX как color key для поверхности адресата.DDBLT_KEYSRC
Использует color key), связанный с исходной поверхностью.DDBLT_KEYSRCOVERRIDE
Использует dckSrcColorkey член в структуре DDBLTFX как color key для исходной поверхности.DDBLT_ROP
Использует dwROP член в структуре DDBLTFX для растровой операции. Эти ROP такие же, как и в Win32 API.DDBLT_ROTATIONANGLE
Использует dwRotationAngle член в структуре DDBLTFX как угол (определенный как 1/100), чтобы вращать поверхность.DDBLT_WAIT
Откладывает значение возврата DDERR_WASSTILLDRAWING, если блиттер занят. Возвращается как только блиттинг произведен или происходит другая ошибка.DDBLT_ZBUFFER
Выполняет z -буферизированный блиттинг с использованием z-буферов, присоединенных к источнику и поверхностям адресата и члену dwZBufferOpCode в структуре DDBLTFX как z-буфер кода операции.DDBLT_ZBUFFERDESTCONSTOVERRIDE
Выполняет z-буферизированный блиттинг с использованием dwZDestConst и dwZBufferOpCode членов в структуре DDBLTFX как z-буфера и z-буфера кода операции, соответственно, для адресата.DDBLT_ZBUFFERDESTOVERRIDE
Выполняет z-буферизированный блиттинг с использованием lpDDSZBuffeDestr и dwZBufferOpCode членов в структуре DDBLTFX как z-буфера и z-буфера кода операции, соответственно, для адресата.DDBLT_ZBUFFERSRCCONSTOVERRIDE
Выполняет z-буферизированный блиттинг с использованием dwZSrcConst и dwZBufferOpCode членов в структуре DDBLTFX как z-буфера и z-буфера кода операции, соответственно, для источника.DDBLT_ZBUFFERSRCOVERRIDE
Выполняет z-буферизированный блиттинг с использованием lpDDSZBufferSrc и dwZBufferOpCode членов в структуре DDBLTFX как z-буфера и z-буфера кода операции, соответственно, для источника.lpDDBltFx
См. структуру DDBLTFX.
Этот метод производит синхронный или асинхронный блиттинг, из памяти дисплея в память дисплея, из памяти дисплея в память системы, из памяти системы в память дисплея и из памяти системы в память системы. Блиттинг может выполняться, используя z-информацию, альфа информацию, исходные color key и color key адресата. Растяжение или сжатие будет выполняться автоматически если прямоугольники источника и адресата имеют разные размеры.
Метод IDirectDrawSurface:: Blt обычно немедленно возвращается с ошибкой, если занят блиттер. Флажок DDBLT_WAIT может изменять это поведение так, чтобы метод ждал, пока не произойдет блиттинг или возникнет другая ошибка.
DDBLTFAST_DESTCOLORKEY
Прозрачный блиттинг, который использует color key адресата.DDBLTFAST_SRCCOLORKEY
Прозрачный блиттинг, который использует color key источника.DDBLTFAST_WAIT
Откладывает сообщение DDERR_WASSTILLDRAWING, если блиттер занят. Возвращатся, как только блиттинг произошел или возникла другая ошибка.Этот метод работает только в экранной поверхности памяти и не может отсекать во время операции. Программная реализация IDirectDrawSurface:: BltFast - на 10 процентов быстрее чем IDirectDrawSurface:: Blt. Однако если используются аппаратные средства дисплея, то не имеется никакого различия в быстродействии.
Метод IDirectDrawSurface:: BltFast обычно немедленно возвращается с ошибкой, если блиттер занят. Флажок DDBLTFAST_WAIT может использоваться, чтобы изменить это поведение так, чтобы этот метод не возвратился, до выполнения боиттинга или возникновения другой ошибки.
DDBLTFX_ARITHSTRETCHY
Использует арифметическое растяжение по y-оси для этого блиттинга.DDBLTFX_MIRRORLEFTRIGHT
Направляет поверхность на y-оси. Этот блиттинг зеркально отражает поверхность слева направо.DDBLTFX_MIRRORUPDOWN
Направляет поверхность на x-оси. Этот блиттинга зеркально отражает поверхность сверху вниз.DDBLTFX_NOTEARING
Планирует этот блиттинг, чтобы избежать разрывов.Вращает поверхность на 180 градусов
Вращает поверхность на 180 градусов по часовой стрелке.Вращает поверхность на 270 градусов
Вращает поверхность на 270 градусов по часовой стрелке.Вращает поверхностьна 90 градусов по часовой стрелке.
DDBLTFX_ZBUFFERBASEDEST
Добавляет член dwZBufferBaseDest к каждому из исходных z-означений перед сравнением их с z-значениями адресата в течение этого блиттинга.DDBLTFX_ZBUFFERRANGE
Использует dwZBufferLow и dwZBufferHigh как значения диапазона, чтобы определить ограничения, при копировании исходной поверхности в течение этого блиттинга.dwROP
Определяет Win32 растровые операции.
dwDDROP
Определяет DirectDraw растровые операции.
dwRotationAngle
Угол вращения для блиттинга.
dwZBufferOpCode
Z-буферы сравниваются.
dwZBufferLow
Ограничение z-буфера снизу.
dwZBufferHigh
Ограничение z-буфера сверху.
dwZBufferBaseDest
Значение базы z-буфера адресата.
dwZDestConstBitDepth
Разрядная глубина z-константы адресата.
dwZDestConst
Константа, используемая как z-буфер адресата.
lpDDSZBufferDest
Поверхность, используемая как z-буфер адресата.
dwZSrcConstBitDepth
Разрядная глубина исходной z-константы.
dwZSrcConst
Константа, используемая как z-буфер источника.
lpDDSZBufferSrc
Поверхность, используемая как z-буфер источника.
dwAlphaEdgeBlend
Альфа, используемая для смешивания краев.
dwAlphaEdgeBlendBitDepth
Разрядная глубина константы для альфа смешивания.
dwReserved
Резервируется для будущего использования.
dwAlphaDestConstBitDepth
Разрядная глубина константы альфа адресата.
dwAlphaDestConst
Константа, используемая как альфа канал адресата.
lpDDSAlphaDest
Поверхность, используемая как альфа канал адресата.
dwAlphaSrcConstBitDepth
Разрядная глубина исходной альфа константы.
dwAlphaSrcConst
Константа, используемая как альфа канал источника.
lpDDSAlphaSrc
Поверхность, используемая как альфа канал источника.
dwFillColor
Цвет, используемый, чтобы заполнить поверхность, когда определен DDBLT_COLORFILL. Это значение может быть или RGB или индекс палитры, в зависимости от поверхностного типа.
dwFillDepth
Значение глубины для z-буфера.
lpDDSPattern
Поверхность, чтобы использовать как образец(pattern). Образец может использоваться в некоторых операциях определен, которые объединяют источник и адресата.
ddckDestColorkey
Color key адресата отменяется.
ddckSrcColorkey
Отмена исходного color key.
DDCAPS_3D
Указывает, что аппаратные средства дисплея имеют 3D ускорение.DDCAPS_ALIGNBOUNDARYDEST
Указывает, что DirectDraw будет поддерживать только те исходные прямоугольники, которые выравнены с x-осью и DDCAPS.dwAlignBoundaryDest границами поверхности.DDCAPS_ALIGNBOUNDARYSRC
Указывает, что DirectDraw будет поддерживать только те исходные прямоугольники, которые выравнены с x-осью и DDCAPS.dwAlignBoundarySrc границами поверхности.DDCAPS_ALIGNSIZEDEST
Указывает, что DirectDraw будет поддерживать только те исходные прямоугольники чей размер x-оси, в байтах, пропорционален- DDCAPS.dwAlignSizeDest.DDCAPS_ALIGNSIZESRC
Указывает, что DirectDraw будет поддерживать только те исходные прямоугольники чей размер x-оси, в байтах, пропорционален DDCAPS.dwAlignSizeSrc.DDCAPS_ALIGNSTRIDE
Указывает, что DirectDraw создаст поверхности в памяти дисплея, которые имеют выравнивание с шагом равным DDCAPS.dwAlignStrideAlign.DDCAPS_ALPHA
Указывает, что аппаратные средства дисплея поддерживают альфа канал в течение операций блиттинга.DDCAPS_BANKSWITCHED
Указывает, что аппаратные средства дисплея - переключают банки, и - потенциально очень медленный случайный доступ к VRAM.DDCAPS_BLT
Указывает, что аппаратные средства дисплея способны к операциям блиттинга.DDCAPS_BLTCOLORFILL
Указывает, что аппаратные средства дисплея способны к заполнению цветом при блиттинге.DDCAPS_BLTDEPTHFILL
Указывает, что аппаратные средства дисплея способны к заполнению z-буфера при блиттинге.DDCAPS_BLTFOURCC
Указывает, что аппаратные средства дисплея способны к цветным преобразованиям в течение операций блиттинга.DDCAPS_BLTQUEUE
Указывает, что аппаратные средства дисплея способны к асинхронным операциям блиттинга.DDCAPS_BLTSTRETCH
Указывает, что аппаратные средства дисплея способны к растяжению в течение операций блиттинга.DDCAPS_CANBLTSYSMEM
Указывает, что аппаратные средства дисплея способны к блиттингу в или из памяти системы.DDCAPS_CANCLIP
Указывает, что аппаратные средства дисплея способны к отсечению с блиттингом.DDCAPS_CANCLIPSTRETCHED
Указывает, что аппаратные средства дисплея способны к отсечению во время растяжения блиттинга с растяжением .DDCAPS_COLORKEY
Поддерживает некоторую форму color key или в операциях блиттинга или в оверлее. Более специфическая информация о возможности color key может быть найдена в dwCKeyCaps.DDCAPS_COLORKEYHWASSIST
Указывает, что color key имеет аппаратную поддержку.DDCAPS_GDI
Указывает, что аппаратные средства дисплея разделены с GDI.DDCAPS_OVERLAY
Указывает, что аппаратные средства дисплея поддерживают оверлеи.DDCAPS_OVERLAYCANTCLIP
Указывает, что аппаратные средства дисплея поддерживают оверлеи, но не могут отсекать их.DDCAPS_OVERLAYFOURCC
Указывает, что аппаратные средства оверлеев способны к цветным преобразованиям в течение оверлейных операций.DDCAPS_OVERLAYSTRETCH
Указывает, что оверлейные аппаратные средства способны к растяжению.DDCAPS_PALETTE
Указывает, что DirectDraw способен к созданию и обеспечению объектов DirectDrawPalette для большого количества поверхностейDDCAPS_PALETTEVSYNC
Указывает, что DirectDraw способен к модифицированию палитры, синхронизированной с вертикальной регенерацией.DDCAPS_READSCANLINE
Указывает, что аппаратные средства дисплея способны к возврату текущейлинии просмотра.DDCAPS_STEREOVIEW
Указывает, что аппаратные средства дисплея имеют стерео возможностиDDCAPS_VBI
Указывает, что аппаратные средства дисплея способны к вызову прерывания вертикального пробела.DDCAPS_ZBLTS
Поддерживает использование z-буферов с операциями блиттинга.DDCAPS_ZOVERLAYS
Поддерживает использование IDirectDrawSurface:: UpdateOverlayZOrder как z-значения для оверлеев, чтобы управлять их иерархическим представлением.dwCaps2
Определяет сугубо драйвер-специфические возможности.
DDCAPS2_CERTIFIED
Указывает, что аппаратные средства дисплея удостоверены.DDCAPS2_NO2DDURING3DSCENE
Указывает, что 2D операции типа IDirectDrawSurface:: Blt и IDirectDrawSurface:: Lock не могут выполняться на любых поверхностях, что Direct3D использует между обращениями к методам IDirect3DDevice:: BeginScene и IDirect3DDevice:: EndScene.dwCKeyCaps
Возможности сolor key.
DDCKEY_COLORSPACE
Установить, если структура содержит color space. Не устанавливать, если структура содержит одиночный color key.DDCKEY_DESTBLT
Устанавливается, если структура определяет color key или color space, который нужно использовать как color key адресата для операций блиттинга.DDCKEY_DESTOVERLAY
Устанавливается, если структура определяет color key или color space, который нужно использовать как color key адресата для оверлейных операций.DDCKEY_SRCBLT
Устанавливается, если структура определяет color key или color space, который нужно использовать как исходный color key) для операций блиттинга.DDCKEY_SRCOVERLAY
Устанавливается, если структура определяет color key или color space, который нужно использовать как исходный color key для оверлейных операций.lpDDColorKey
Адрес структуры DDCOLORKEY, которая будет заполнена текущими значениями для определенного color key объекта DirectDrawSurface.
DDCKEYCAPS_DESTBLT
Поддерживает прозрачный блиттинг с color key, который идентифицирует заменимые биты поверхности адресата для RGB цветов.DDCKEYCAPS_DESTBLTCLRSPACE
Поддерживает прозрачный блиттинг с color space, который идентифицирует заменимые биты поверхности адресата для RGB цветов.DDCKEYCAPS_DESTBLTCLRSPACEYUV
Поддерживает прозрачный блиттинг с color space, который идентифицирует заменимые биты поверхности адресата для YUV цветов.DDCKEYCAPS_DESTBLTYUV
Поддерживает прозрачный блиттинг с color key, который идентифицирует заменимые биты поверхности адресата для YUV цветов.DDCKEYCAPS_DESTOVERLAY
Поддерживает оверлеи с color key заменимыми битами поверхности адресата, являющейся оверлеем для RGB цветов.DDCKEYCAPS_DESTOVERLAYCLRSPACE
Поддерживает color space как color key для адресата RGB цветов.DDCKEYCAPS_DESTOVERLAYCLRSPACEYUV
Поддерживает color space как color key для адресата YUV цветов.DDCKEYCAPS_DESTOVERLAYONEACTIVE
Поддерживает только одно активное значение color key адресата для видимых оверлейных поверхностей.DDCKEYCAPS_DESTOVERLAYYUV
Поддерживает оверлеи с использованием color key заменимыми битами поверхности адресата, являющейся с оверлеем для YUV цветов.DDCKEYCAPS_NOCOSTOVERLAY
Указывает, что не имеется никаких обменов для использования color key с оверлеем.DDCKEYCAPS_SRCBLT
Поддерживает прозрачный блиттинг с использованием color key для поверхности источника и RGB цветами.DDCKEYCAPS_SRCBLTCLRSPACE
Поддерживает прозрачный блиттинг с использованием color space для источника с RGB цветами.DDCKEYCAPS_SRCBLTCLRSPACEYUV
Поддерживает прозрачный блиттинг с использованием color space для источника с YUV цветами.DDCKEYCAPS_SRCBLTYUV
Поддерживает позрачный блиттинг с использованием color key для источника с YUV цветов.DDCKEYCAPS_SRCOVERLAY
Поддерживает использование оверлейного color key для источника с оверлейной поверхностью для RGB цветов.DDCKEYCAPS_SRCOVERLAYCLRSPACE
Поддерживает использование оверлейного color space как исходного color key оверлейной поверхности для RGB цветов.DDCKEYCAPS_SRCOVERLAYCLRSPACEYUV
Поддерживает использование оверлейного color space как исходного color key оверлейной поверхности для YUV цветов.DDCKEYCAPS_SRCOVERLAYONEACTIVE
Поддерживает только одно активное исходное значение color key для видимых оверлейных поверхностей.DDCKEYCAPS_SRCOVERLAYYUV
Поддерживает использование оверлейного color key для источника для YUV цветов.dwFXCaps
Определяет драйвер-специфическое растяжение и возможности эффектов.
DDEDM_REFRESHRATES
Перечислить режимы с различными частотами регенерации. IDirectDraw2:: EnumDisplayModes гарантирует, что специфический режим будет перечислен только однажды. Этот флажок определяет, обращать внимание на частоту регенерации, если режим уникален.DDENUMOVERLAYZ_FRONTTOBACK
Перечисляет оверлеи из начала в конец.lpContext
Адрес определяемого пользователем контекста, который будет передан к callback функции для каждой оверлейной поверхности.
lpfnCallback
Адрес функции fnCallback, которую будут запрашивать каждая поверхность, являющаяся оверлеем на этой поверхности.
DDENUMSURFACES_ALL
Перечисляет все поверхности, которые отвечают критерию поиска.DDENUMSURFACES_CANBECREATED
Перечисляет первую поверхность, которая может быть создана, если отвечает критерию поиска.DDENUMSURFACES_DOESEXIST
Перечисляет уже существующие поверхности, которые отвечают критерию поиска.lplpDDSD
Адрес структуры DDSURFACEDESC, которая описывает интересующую поверхность.
lpContext
Адрес caller-определенной структуры, которая будет передана каждому члену перечисления.
lpEnumCallback
Адрес функции EnumCallback, которую процедура перечисления вызовет каждый раз когда найдено соответствие.
Если установлен флажок DDENUMSURFACES_CANBECREATED, этот метод будет пытаться временно создавать поверхность, которая отвечает критерию. Обратите внимание, что поскольку поверхность перечисляется, счет ссылки увеличивается, если Вы не собираетесь использовать поверхность, вызовите IDirectDraw:: Release, чтобы уничтожить поверхность после каждого перечисления.
DDENUMSURFACES_MATCH
Поиск любой поверхности, которая соответствует поверхностному описанию.DDENUMSURFACES_NOMATCH
Поиск любой поверхности, которая не соответствует поверхностному описанию.DDERR_INVALIDSURFACETYPE
lpDDPixelFormatАдрес структуры DDPIXELFORMAT, которая будет заполнена детализированным описанием текущего пикселя и цветного формата поверхности.
DDERR_NOCLIPPERATTACHED
lplpDDClipperАдрес указателя на DirectDrawClipper, связанный с поверхностью.
См. также IDirectDraw2:: SetDisplayMode, IDirectDraw:: RestoreDisplayMode, IDirectDraw2:: EnumDisplayModes, IDirectDraw:: SetCooperativeLevel
DDERR_NOTFOUND
Этот метод может вызываться в конце прикладной программой использующей переключающиеся страницы, чтобы гарантировать, что память дисплея, в которую записывает GDI, видима пользователю.lplpGDIDDSSurface
Адрес указателя DirectDrawSurface на объект DirectDrawSurface, которая в настоящее время управляет основной поверхностной памятью GDI.
DDERR_NOTPALETTIZED
dwFlagsЭтот параметр не используется в настоящее время и должен быть установлен в 0.
dwBase
Указывает начало входов, которые должны быть восстановлены.
dwNumEntries
Указывает, что число входов палитры lpEntries имеет участок памяти. Цвета каждого входа палитры будут возвращены в последовательности от dwStartingEntry до dwCount -1.
lpEntries
Адрес входов палитры. Входы палитры - один байт каждый, если установлен флажок DDPCAPS_8BITENTRIES, или иначе четыре байта. Каждое поле - описание цвета.
DDERR_OUTOFMEMORY
lpGUIDАдрес GUID, который представляет драйвер, который будет создан. NULL - всегда активный драйвер дисплея.
lplpDD
Адрес указателя, который будет инициализирован с имеющим силу DirectDraw указателем при успешном обращении
pUnkOuter
Учитывает будущую совместимость с COM особенностями соединения частей. Сейчас DirectDrawCreate возвратит ошибку, если этот параметр не NULL.
Эта функция пытается инициализировать объект DirectDraw, затем устанавливает указатель на объект. При вызове IDirectDraw:: GetCaps метод немедленно после инициализации определяется, до какой степени этот объект аппаратно ускорен.
lpClipList
Или адрес имеющей силу структуры RGNDATA или NULL. Если имеется существующий отсекающий список, связанный с DirectDrawClipper, и это значение - NULL, отсекающийся список будет удален.
dwFlags
Этот параметр не используется в настоящее время и должен быть установлен в 0.
Отсекающийся список - ряд прямоугольников, который описывает видимые области поверхности. Отсекающийся список не может быть установлен, если hWnd уже связан с объектом DirectDrawClipper. Обратите внимание, что метод IDirectDrawSurface:: BltFast не может отсекать.
См. также IDirectDrawClipper:: GetClipList, IDirectDrawSurface:: Blt, IDirectDrawSurface:: BltFast, IDirectDrawSurface:: BltBatch, IDirectDrawSurface:: UpdateOverlay
riid
Идентификатор ссылки запрашиваемого интерфейса.
ppvObj
Адрес указателя, который будет заполнен указателем интерфейса если запрос успешен.
Если прикладная программа не нуждается в использовании интерфейса, восстановленного обращением к этому методу, она должна вызвать метод Release для этого интерфейса, чтобы его освободить. Метод IDirectDrawSurface:: QueryInterface позволяет объектам DirectDrawSurface быть расширенными Microsoft и третьими лицами без сталкновения с существующими или будущими функциональными возможностями.
См. также IDirectDrawSurface:: AddRef, IDirectDrawSurface:: Initialize, IDirectDrawSurface:: Release
DDERR_SURFACELOST
lpDDSurfaceАдрес DirectDrawSurface структуры для дублирования.
lplpDupDDSurface
Адрес DirectDrawSurface указателя, который указывает на недавно созданную двойную структуру DirectDrawSurface.
Этот метод создает новый объект DirectDrawSurface, который указывает на ту же самую поверхностную память как существующий объект DirectDrawSurface. Этот дубликат может использоваться точно так же как первоначальный объект. Поверхностная память разрушается после того, как последний объект, ссылающийся на нее разрушен. Основная поверхность, поверхность 3D, или неявно созданная поверхность не может быть дублирована.
lpContext
Адрес caller-определенной структуры, которая передается члену перечисления каждый раз, когда этот метод вызывается.
lpEnumSurfacesCallback
Адрес функции EnumSurfacesCallback, которую будет запрашивать каждая поверхность которая присоединена к этой поверхности.
Этот метод может использоваться, чтобы перераспределить поверхностную память. Когда объект DirectDrawSurface теряет поверхностную память, большинство методов возвратит DDERR_SURFACELOST и не выполнит никакую другую функцию.
Поверхности могут терять память, когда изменен режим платы дисплея, или потому что прикладная программа получила исключительный доступ к плате дисплея и освободила всю поверхностную память, в настоящее время распределенную на плате дисплея.
dwFlags
Этот параметр не используется в это время и должен быть установлен в 0.
Этот метод работает только на поверхностях системной памяти; не будет блокироваться страница поверхности памяти дисплея или эмулированной основной поверхности. Если этот метод обратился к поверхности памяти дисплея,он не будет делать ничего за исключением возвращения DD_OK.
Чтобы гарантировать согласие с COM, этот метод - не, часть интерфейса IDirectDrawSurface, но принадлежит интерфейсу IDirectDrawSurface2. Чтобы использовать этот метод, Вы должны сначала сделать запрос для интерфейса IDirectDrawSurface2. Для большего количества информации, см. Интерфейс IDirectDrawSurface2.
DDERR_UNSUPPORTED
lpdwFrequencyАдрес двойного слова, которое будет заполнено частотой монитора.
lpDDBltBatch
Адрес первой структуры DDBLTBATCH, которая определяет параметры для операций.
dwCount
Число операций, которые нужно выполнить.
dwFlags
Этот параметр не используется в это время и должен быть установлен в 0.
dwX
X-координата на поверхности адресата.
dwY
Y-координата на поверхности адресата.
lpDDSrcSurface
Адрес структуры DirectDrawSurface, которая представляет DirectDrawSurface. Это - источник для операции.
lpSrcRect
Адрес структуры RECT, которая определяет верхнюю левую и нижнюю правую точки прямоугольника на исходной поверхности.
dwTrans
Определяет тип передачи.
lpDDSurfaceTargetOverride
Адрес структуры DirectDrawSurface, которая будет переключаться. Значение по умолчанию для этого параметра - NULL, тогда метод IDirectDrawSurface::Flip будет циклично переключать буферы в порядке, как они присоединены друг другу. Этот параметр используется только как отмена.
dwFlags
lplpDDPalette
Адрес указателя на структуру DirectDrawPalette. Этот указатель будет заполнен адресом структуры DirectDrawPalette, связанной с этой поверхностью. Будет установлен в NULL, если никакой DirectDrawPalette не связан с этой поверхностью.
Если никакая палитра не была явно связана с этой поверхностью, возвращается NULL для связанной палитры. Однако, если это - основная поверхность или обратный буфер к основной поверхности, возвращается указатель на палитру системы, если основная поверхность находится в 8-bpp режиме.
hDC
hDC, предварительно полученный IDirectDrawSurface:: GetDC.
Этот метод также разблокирует поверхность, предварительно блокированную, при вызове IDirectDrawSurface:: GetDC.
lX
Новая х-координата дисплея.
lY
Новая у-координата дисплея.
См. также IDirectDrawSurface:: GetOverlayPosition, IDirectDrawSurface:: UpdateOverlay
dwFlags
Этот параметр не используется в настоящее время и должен быть установлен в 0.
dwStartingEntry
Определяет первый вход, который будет установлен.
dwCount
Определяет число входов палитры, которые будут изменены.
lpEntries
Адрес входов палитры. Вход палитры - один байт , если флажок DDPCAPS_8BITENTRIES установлен или иначе четыре байта. Каждое поле - описание цвета.
DDERR_UNSUPPORTEDMODE
lpSurfaceDescАдрес структуры DDSURFACEDESC, которая описывает запрошенную поверхность.
lplpDDSurface
Адрес указателя, который будет инициализирован с имеющим силу DirectDrawSurface указателем.
pUnkOuter
Учитывает будущую совместимость с COM особенностями соединения частей. Сейчас IDirectDraw:: CreateSurface возвратит ошибку, если этот параметр не NULL.
Объект DirectDrawSurface представляет поверхность (память пикселя), находящуюся в памяти платы дисплея, но она также может существовать в памяти системы, если память дисплея исчерпана или если это явно запрошено. Если аппаратные средства не могут поддерживать запрошенные возможности или если объект предварительно распределил те ресурсы другому объекту DirectDrawSurface, обращение к IDirectDraw:: CreateSurface будет неудачным.
Этот метод обычно создает один объект DirectDrawSurface. Если флажок DDSCAPS_FLIP в dwCaps члене структуры DDSCAPS установлен, IDirectDraw:: CreateSurface создаст несколько объектов DirectDrawSurface, упоминаемые коллективно как сложная структура. Дополнительные созданные поверхности также упоминаются как неявные поверхности.
DirectDraw не разрешает создание поверхностей памяти дисплея более широких чем основная поверхность.
Примеры создания:
lpDDSurfaceDesc
Адрес структуры DDSURFACEDESC для заполнения описанием поверхности.
Прикладная программа не должна сохранять информацию, возвращаемую IDirectDraw::GetDisplayMode, чтобы восстановить режим дисплея. Восстановление режима осуществляет IDirectDraw::RestoreDisplayMode, таким образом избегая конфликтов, которые могли бы возникать в мультипроцессорной среде.
См. также IDirectDraw2:: SetDisplayMode, IDirectDraw:: RestoreDisplayMode, IDirectDraw2:: EnumDisplayModes
DDERR_WASSTILLDRAWING
lpDDSAttachedSurfaceАдрес DirectDrawSurface, которая должена быть присоединена.
Возможные присоединениями могут быть z-буфер, альфа каналы, и обратные буферы. Некоторые присоединения автоматически прерывают другие присоединения. Например, 3DZBUFFER может только быть присоединен только к обратному буферу одновременно. Присоединение не двунаправленное, и поверхность не может быть присоединена к себе. Эмулированные поверхности (в памяти системы) не могут быть присоединены к не-эмулированным поверхностям. Если одна поверхность не карта текстуры, две присоединенных поверхности должны иметь тот же самый размер. Переключаемая поверхность не может быть присоединена к другой переключаемой поверхности того же самого типа; однако, присоединение двух поверхностей различных типов позволяется. Например, переключаемый z-буфер может быть присоединен к регулярной переключаемой поверхности. Если непереключаемая поверхность присоединена к другой непереключаемой поверхности того же самого типа, две поверхности станут переключаемой цепочкой. Если непереключаемая поверхность присоединена к переключаемой поверхности, она становится частью существующей переключаемой цепочки.Дополнительные поверхности могут быть добавлены к этой цепочке, и каждое обращение к методу IDirectDrawSurface::Flip, переместится на один шаг через поверхности.
См. также IDirectDrawSurface:: DeleteAttachedSurface, IDirectDrawSurface:: EnumAttachedSurfaces, IDirectDrawSurface:: Flip
DDERR_WRONGMODE
Поверхности можно потерять, при изменении режима платы дисплея или потому что прикладная программа получила исключительный доступ к плате дисплея и освободила всю поверхностную память, в настоящее время распределенную на плате. Когда объект DirectDrawSurface теряет поверхностную память, методы возвратят DDERR_SURFACELOST и не выполнят никакую другую функцию. Метод IDirectDrawSurface::Restore перераспределит поверхностную память и повторно присоединит ее к объекту DirectDrawSurface.Одиночное обращение к этому методу восстановит связанные неявные поверхности DirectDrawSurface’s (обратный буферы, и так далее). Попытка восстанавливать неявно созданную поверхность кончится ошибкой. IDirectDrawSurface:: Restore не будет работать с явно созданными присоединениями, созданных IDirectDrawSurface:: AddAttachedSurface, каждая из этих поверхностей должна быть восстановлена индивидуально.
См. также IDirectDrawSurface:: IsLost, IDirectDrawSurface:: AddAttachedSurface
DDERR_XALIGN
lpSrcRectАдрес структуры RECT, которая определяет x, y, ширину, и высоту области на исходной поверхности, используемой как оверлей.
lpDDDestSurface
Адрес структуры DirectDrawSurface, которая представляет DirectDrawSurface. Это - поверхность, которая является оверлеем.
lpDestRect
Адрес структуры RECT, которая определяет x, y, ширину, и высоту области на поверхности адресата куда оверлей должен переместиться.
dwFlags
DDFLIP_WAIT
Если переключение не может быть произведено, потому что состояние аппаратных средств дисплея не позволяет, возвратится ошибка DDERR_WASSTILLDRAWING и переключение не произойдет. Установка этого флажка заставляет IDirectDrawSurface:: Flip продолжать пробовать переключать, если метод получает ошибку DDERR_WASSTILLDRAWING от HAL. IDirectDrawSurface:: Flip не будет возвращаться до тех пор пока операция переключения не завершиться успешно, или пока не произойдет ошибка (типа DDERR_SURFACEBUSY).Этот метод может вызываться поверхностью, которая имеет набор значений DDSCAPS_FLIP и DDSCAPS_FRONTBUFFER. Память дисплея, предварительно связанная с передним буфером связана с обратным буфером. Если имеется больше чем один обратный буфер, формируется кольцо, и поверхностные буферы памяти циклически повторяются, перемещаясь на один шагпри вызове IDirectDrawSurface::Flip.
Параметр lpDDSurfaceTargetOverride используется в редких случаях, тогда когда обратный буфер не должен стать передним буфером. Обычно этот параметр - NULL.
IDirectDrawSurface::Flip всегда синхронизируется с вертикальным пробелом.
DDFXALPHACAPS_BLTALPHAEDGEBLEND
Поддерживает alpha, смешивающийся вокруг края исходной color key поверхности. Используясь для операций блиттинга.DDFXALPHACAPS_BLTALPHAPIXELS
Поддерживает информацию alpha в формате пикселя. Разрядная глубина информации alpha в формате пикселя может быть 1, 2, 4, или 8. Значение alpha становится более непрозрачным при увеличении значения alpha. Независимо от глубины информации alpha, 0 - всегда полностью прозрачное значение. Используется для операций блиттинга.DDFXALPHACAPS_BLTALPHAPIXELSNEG
Поддерживает информацию alpha в формате пикселя. Разрядная глубина информации alpha в формате пикселя может быть 1, 2, 4, или 8. Значение alpha становится более прозрачным при увеличении значения alpha. Независимо от глубины информации alpha, 0 - всегда полностью непрозрачное значение. Этот флажок может только быть установлен, если DDCAPS_ALPHA установлен. Используется для операций блиттинга.DDFXALPHACAPS_BLTALPHASURFACES
Поддерживает только alpha поверхности. Разрядная глубина alpha поверхности может быть 1, 2, 4, или 8. Значение alpha становится более непрозрачным при увеличения значения alpha. Независимо от глубины информации alpha, 0 - всегда полностью прозрачное значение. Используется для операций блиттинга.DDFXALPHACAPS_BLTALPHASURFACESNEG
Указывает, что глубина данных канала alpha может быть 1, 2, 4, или 8. Суффикс NEG указывает, что этот канал alpha становится более прозрачным при увеличении значения alpha. Независимо от глубины информации alpha, 0 - всегда полностью непрозрачное значение. Этот флажок может быть установлен только если DDFXCAPS_ALPHASURFACES был установлен. Используется для операций блиттинга.DDFXALPHACAPS_OVERLAYALPHAEDGEBLEND
Поддерживает alpha, смешивающийся вокруг края исходной color key поверхности. Используется для оверлеев.DDFXALPHACAPS_OVERLAYALPHAPIXELS
Поддерживает информацию alpha в формате пикселя. Разрядная глубина информации alpha в формате пикселя может быть 1, 2, 4, или 8. Значение alpha становится более непрозрачным при увеличении значения alpha. Независимо от глубины информации alpha, 0 - всегда полностью прозрачное значение. Используется для оверлеев.DDFXALPHACAPS_OVERLAYALPHAPIXELSNEG
Поддерживает информацию alpha в формате пикселя. Разрядная глубина информации alpha в формате пикселя может быть 1, 2, 4, или 8. Значение alpha становится более прозрачным при увеличении значения alpha. Независимо от глубины информации alpha, 0 - всегда полностью непрозрачное значение. Этот флажок может быть установлен только если DDFXCAPS_ALPHAPIXELS был установлен. Используется для оверлеев.DDFXALPHACAPS_OVERLAYALPHASURFACES
Поддерживает только alpha поверхности. Разрядная глубина alpha поверхности может быть 1, 2, 4, или 8. Значение alpha становится более непрозрачным при увеличении значения alpha. Независимо от глубины информации alpha, 0 - всегда полностью прозрачное значение. Используется для оверлеев.DDFXALPHACAPS_OVERLAYALPHASURFACESNEG
Указывает, что глубина данных канала alpha может быть 1, 2, 4, или 8. Суффикс NEG указывает, что этот канал alpha становится более прозрачным при увеличения значения alpha. Независимо от глубины информации alpha, 0 - всегда полностью непрозрачное значение. Этот флажок может быть установлен только если DDFXCAPS_ALPHASURFACES был установлен. Используется для оверлеев.DDFXCAPS_BLTARITHSTRETCHY
Использует арифметические операции удваивания пикселей для растягивания и сжатия поверхности в течение операции блиттинга. Происходит по y-оси (вертикально).DDFXCAPS_BLTARITHSTRETCHYN
Использует арифметические операции удваивания пикселей для растягивания и сжатия поверхности в течение операции блиттинга. Происходит по y-оси (вертикально) и работает только целого растяжения(ґ1, ґ2, и так далее).DDFXCAPS_BLTMIRRORLEFTRIGHT
Поддерживает зеркальное отражение слева направо в операции блиттинга.DDFXCAPS_BLTMIRRORUPDOWN
Поддерживает зеркальное отражение сверху вниз в операции блиттинга.DDFXCAPS_BLTROTATION
Поддерживает произвольное вращение в операции блиттинга.Поддерживает вращение на 90 градусов в операции блиттинга.
DDFXCAPS_BLTSHRINKX
Поддерживает произвольное сжатие поверхности по x-оси (горизонтально). Этот флажок имеет силу только для операций блитинга.DDFXCAPS_BLTSHRINKXN
Поддерживает сжатие на целое число (ґ1, ґ2, и так далее) поверхности по x-оси (горизонтально). Этот флажок имеет силу только для операций блитинга.DDFXCAPS_BLTSHRINKY
Поддерживает произвольное сжатие поверхности по y-оси (вертикально). Этот флажок имеет силу только для операций блитинга.DDFXCAPS_BLTSHRINKYN
Поддерживает сжатие на целое число (ґ1, ґ2, и так далее) поверхности по y-оси (вертикально). Этот флажок имеет силу только для операций блитинга.DDFXCAPS_BLTSTRETCHX
Поддерживает произвольное растяжение поверхности по x-оси (горизонтально). Этот флажок имеет силу только для операций блиттинга.DDFXCAPS_BLTSTRETCHXN
Поддерживает растяжение на целое число(ґ1, ґ2, и так далее) поверхности по x-оси (горизонтально). Этот флажок имеет силу только для операций блиттинга.DDFXCAPS_BLTSTRETCHY
Поддерживает произвольное растяжение поверхности по y-оси (вертикально). Этот флажок имеет силу только для операций блиттинга.DDFXCAPS_BLTSTRETCHYN
Поддерживает растяжение на целое число(ґ1, ґ2, и так далее) поверхности по y-оси (вертикально). Этот флажок имеет силу только для операций блиттинга.DDFXCAPS_OVERLAYARITHSTRETCHY
Использует арифметические операции удваивания пикселей для растяжения и сжатия поверхности в течение оверлейной операции. Происходит по y-оси (вертикально).DDFXCAPS_OVERLAYARITHSTRETCHYN
Использует арифметические операции удваивания пикселей для растяжения и сжатия поверхности в течение оверлейной операции. Происходит по y-оси (вертикально) и работает только для целых чисел(ґ1, ґ2, и так далее).DDFXCAPS_OVERLAYMIRRORLEFTRIGHT
Поддерживает зеркальное отражение оверлеев вокруг вертикальной оси.DDFXCAPS_OVERLAYMIRRORUPDOWN
Поддерживает зеркальное отражение оверлеев вокруг горизонтальной оси.DDFXCAPS_OVERLAYSHRINKX
Поддерживает произвольное сжатие поверхности по x-оси (горизонтально). Этот флажок имеет силу только для DDSCAPS_OVERLAY поверхностей. Этот флажок указывает на возможности поверхности; не указывает, что сжатие доступено.DDFXCAPS_OVERLAYSHRINKXN
Поддерживает целочисленное сжатие(ґ1, ґ2, и так далее) поверхности по x-оси (горизонтально). Этот флажок имеет силу только для DDSCAPS_OVERLAY поверхностей. Этот флажок указывает на возможности поверхности; не указывает, что сжатие доступено.DDFXCAPS_OVERLAYSHRINKY
Поддерживает произвольное сжатие поверхности по y-оси (вертикально). Этот флажок имеет силу только для DDSCAPS_OVERLAY поверхностей. Этот флажок указывает на возможности поверхности; не указывает, что сжатие доступено.DDFXCAPS_OVERLAYSHRINKYN
Поддерживает целочисленное сжатие(ґ1, ґ2, и так далее) поверхности по y-оси (вертикально). Этот флажок имеет силу только для DDSCAPS_OVERLAY поверхностей. Этот флажок указывает на возможности поверхности; не указывает, что сжатие доступено.DDFXCAPS_OVERLAYSTRETCHX
Поддерживает произвольное растяжение поверхности по x-оси (горизонтально). Этот флажок имеет силу только для DDSCAPS_OVERLAY поверхностей. Этот флажок указывает на возможности поверхности; не указывает, что сжатие доступено.DDFXCAPS_OVERLAYSTRETCHXN
Поддерживает целочисленное растяжение(ґ1, ґ2, и так далее) поверхности по x-оси (горизонтально). Этот флажок имеет силу только для DDSCAPS_OVERLAY поверхностей. Этот флажок указывает на возможности поверхности; не указывает, что сжатие доступено.DDFXCAPS_OVERLAYSTRETCHY
Поддерживает произвольное растяжение поверхности по y-оси (вертикально). Этот флажок имеет силу только для DDSCAPS_OVERLAY поверхностей. Этот флажок указывает на возможности поверхности; не указывает, что сжатие доступено.DDFXCAPS_OVERLAYSTRETCHYN
Поддерживает целочисленное растяжение(ґ1, ґ2, и так далее) поверхности по y-оси (вертикально). Этот флажок имеет силу только для DDSCAPS_OVERLAY поверхностей. Этот флажок указывает на возможности поверхности; не указывает, что сжатие доступено.dwFXAlphaCaps
Определяет драйвер-специфические возможности alpha.
DDGBS_CANBLT
Запрашивает, может ли блиттинг этой поверхности происходить немедленно. Возвращает DD_OK, если блиттинг может быть выполнен.DDGBS_ISBLTDONE
Запрашивает, выполнен ли блиттинг. Возвращает DD_OK, если последний блиттинг на этой поверхности завершен.DDGFS_CANFLIP
Запрашивает поверхность о переключении немедленно. Возвращает DD_OK, если переключение может быть завершено.DDGFS_ISFLIPDONE
Запрашивает о выполнении переключения. Возвращает DD_OK, если последнее переключение на этой поверхности завершено.DDLOCK_EVENT
Вызывает событие, когда IDirectDrawSurface:: Lock возвращает поверхностный запрошенный указатель памяти. Установите, если программа обработки события передается в IDirectDrawSurface:: Lock. Если многократные блокировки этого типа помещены в поверхность, события будут вызваны во в порядке поступления порядке.DDLOCK_READONLY
Указывает, что блокируемая поверхность будет только читаться.DDLOCK_SURFACEMEMORYPTR
Указывает, что должен быть возвращен имеющий силу указатель памяти на верхнюю часть определенного прямоугольника. Если никакой прямоугольник не определен, возвращается указатель на верхнюю часть поверхности. Это - значение по умолчанию.DDLOCK_WAIT
Если блокировка не может быть получена будет возвращена немедленно ошибка DDERR_WASSTILLDRAWING. Если этот флажок установлен, IDirectDrawSurface:: Lock повторит, пока не будет получена блокировка или не возникнет другая ошибка (типа DDERR_SURFACEBUSY).DDLOCK_WRITEONLY
Указывает, что блокируемая поверхность будет только для записи.hEvent
Программа обработки события системы, которое вызывается, когда поверхность готова быть блокированной.
Как только получен указатель, к поверхностной памяти можно обращаться вашей прикладной программой, пока не вызывается соответствующий метод IDirectDrawSurface:: Unlock. Как только это происходит, указатель на поверхностную память больше не имеет силу.
Запрещенно блиттинг из блокированной области поверхности. Если блиттинг предпринят на блокированной поверхности, он возвратит значение ошибки DDERR_SURFACEBUSY или DDERR_LOCKEDSURFACES.
IDirectDrawSurface:: Lock возвращается немедленно с ошибкой, когда не может быть получена блокировка. Может быть установлен флажок DDLOCK_WAIT , чтобы продолжить пробовать получать блокировку.
Чтобы предотвращать потерю в течение доступа к поверхности в VRAM, DirectDraw производит блокировку Win16 между операциями IDirectDrawSurface:: Lock и IDirectDrawSurface:: Unlock. Блокировка Win16 - критический раздел, который преобразовывает в последовательную форму доступ к GDI и USER. Хотя эта методика позволяет прямой доступ к отображению в память и предотвращает другие прикладные программы от изменения режима в течение этого доступа, он останавливает управление Windows , так что IDirectDrawSurface:: Lock /IDirectDrawSurface:: Unlock и IDirectDrawSurface:: GetDC/IDirectDrawSurface:: ReleaseDC должны вызываться на короткий период. К сожалению, так как Windows остановлен, GUI отладчики не могут использоваться между IDirectDrawSurface:: Lock /IDirectDrawSurface:Unlock и IDirectDrawSurface:: GetDC/IDirectDrawSurface:: ReleaseDC.
См. также IDirectDrawSurface:: Unlock, IDirectDrawSurface:: GetDC, IDirectDrawSurface:: ReleaseDC
DDOVER_ADDDIRTYRECT
Добавляет грязный прямоугольник к эмулированной поверхности с оверлеем.DDOVER_ALPHADEST
Использует альфа информацию в формате пикселя или альфа поверхности канала, присоединенной к поверхности адресата как альфа канал для оверлея адресата.DDOVER_ALPHADESTCONSTOVERRIDE
Использует dwAlphaDestConst член в структуре DDOVERLAYFX как канал альфа адресата для этого оверлея.DDOVER_ALPHADESTNEG
Суффикс NEG указывает, что поверхность адресата становится более ясной как увеличение альфа значения. (0 непрозрачен).DDOVER_ALPHADESTSURFACEOVERRIDE
Использует lpDDSAlphaDest член в структуре DDOVERLAYFX как адресат альфа канала для этого оверлея.DDOVER_ALPHAEDGEBLEND
Использует dwAlphaEdgeBlend член в структуре DDOVERLAYFX как альфа канал для граней изображения, которые ограничивают color key.DDOVER_ALPHASRC
Использует альфа информацию в формате пикселя или альфа поверхности канала, присоединенной к исходной поверхности как исходный альфа канал для этого оверлея.DDOVER_ALPHASRCCONSTOVERRIDE
Использует dwAlphaSrcConst член в структуре DDOVERLAYFX как исходный альфа канал для этого оверлея.DDOVER_ALPHASRCNEG
The NEG suffix indicates that the source surface becomes more transparent as the alpha value increases.DDOVER_ALPHASRCSURFACEOVERRIDE
Использует lpDDSAlphaSrc член в структуре DDOVERLAYFX как источник альфа канала для этого оверлея.DDOVER_DDFX
Использует FX флажки оверлея, чтобы определить специальные эффекты оверлея.DDOVER_KEYDEST
Использует color key, связанную с поверхностью адресата.DDOVER_KEYDESTOVERRIDE
Использует dckDestColorkey член в структуре DDOVERLAYFX как color key для поверхности адресата.DDOVER_KEYSRC
Использует color key, связанный с исходной поверхностью.DDOVER_KEYSRCOVERRIDE
Использует dckSrcColorkey член в структуре DDOVERLAYFX как color key для исходной поверхности.DDOVER_REFRESHALL
Игнорирует список грязных прямоугольников и модифицирует оверлейный дисплей полностью. Очищает грязный список прямоугольника.DDOVER_REFRESHDIRTYRECTS
Модифицирует оверлейный дисплей, использующий список грязных прямоугольников, предварительно созданных для этого адресата. Очищает грязный список прямоугольника.DDOVER_ZORDER
Использует dwZOrderFlags член в структуре DDOVERLAYFX как z-порядок для этого оверлея. LpDDSRelative будет использоваться, если установлен dwZOrderFlags в DDOVERZ_INSERTINBACKOF или DDOVERZ_INSERTINFRONTOF.lpDDOverlayFx
См. структуру DDOVERLAYFX.
DDOVERFX_ARITHSTRETCHY
При растяжении, использует арифметику растягивающую по y-оси для этого оверлея.DDOVERFX_MIRRORLEFTRIGHT
Зеркально отразить оверлей вокруг вертикальной оси.DDOVERFX_MIRRORUPDOWN
Зеркально отразить оверлей вокруг горизонтальной оси.dwFlags
Этот член не используется и должен быть установлен в 0.
DDOVERZ_INSERTINBACKOF
Вставляет этот оверлей в оверлейную цепочку позади оверлея ссылки.DDOVERZ_INSERTINFRONTOF
Вставляет этот оверлей в оверлейную цепочку перед оверлеем ссылки.DDOVERZ_MOVEBACKWARD
Перемещает этот оверлей на одну позицию назад в оверлейной цепочке.DDOVERZ_MOVEFORWARD
Перемещает этот оверлей на одну позицию вперед в оверлейной цепочке.DDOVERZ_SENDTOBACK
Перемещает этот оверлей в конец оверлейной цепочки.DDOVERZ_SENDTOFRONT
Перемещает этот оверлей в начало оверлейной цепочки.lpDDSReference
Адрес структуры DirectDrawSurface, которая представляет DirectDrawSurface, который нужно использовать как относительную позицию в оверлейной цепочке. Этот параметр необходим только для DDOVERZ_INSERTINBACKOF и DDOVERZ_INSERTINFRONTOF.
DDPCAPS_1BIT
Указывает, что индекс - 1 бит. Имеются два входа в таблице палитры.DDPCAPS_2BIT
Указывает, что индекс - 2 бита. Имеются четыре входа в таблице палитры.DDPCAPS_4BIT
Указывает, что индекс - 4 бита. Имеются шестнадцать входов в таблице палитры.DDPCAPS_8BIT
Указывает, что индекс - 8 битов. Имеются 256 входов в таблице палитры.DDPCAPS_8BITENTRIES
Индекс к цветному индексу с 8 битами. Этот флажок только имеет силу когда используется с DDPCAPS_1BIT, DDPCAPS_2BIT, или флажком DDPCAPS_4BIT, и когда целевая поверхность находится в 8-bpp. Каждый цветной вход - один байт и - индекс к поверхности адресата 8-bpp палитры.что эта палитра может иметь
Указывает, что эта палитра может иметь все 256 определенные входов.lpColorTable
Адрес массива 2, 4, 16, или 256 структур PALETTEENTRY, которые инициализируют этот объект DirectDrawPalette.
lplpDDPalette
Адрес указателя, который будет заполнен с адресом нового объекта DirectDrawPalette, если IDirectDraw:: CreatePalette метод успешен.
pUnkOuter
Учитывает будущую совместимость с COM особенностями соединения частей. Сейчас IDirectDraw:: CreatePalette возвращает ошибку, если этот параметр не NULL.
DDPF_ALPHA
Формат пикселя описывает только alpha поверхность.DDPF_ALPHAPIXELS
Поверхность имеет информацию alpha -канала в формате пикселя.DDPF_COMPRESSED
Поверхность примет данные пикселя в определенном формате и сожмет их в течение операции записи.Поверхность - цвет индексированный 1 битом.
Поверхность - 1-, 2-, или с 4 битами цвета, индексированными к палитре с 8 битами.
DDPF_RGB
RGB данные в структуре формата пикселя имеют силу.DDPF_RGBTOYUV
Поверхность примет RGB данные и транслирует их в течение операции записи к YUV данным. Формат данных, которые будут записаны будет содержаться в структуре формата пикселя. Флажок DDPF_RGB будет установлен.DDPF_YUV
YUV данные в структуре формата пикселя имеют силу.DDPF_ZBUFFER
Формат пикселя описывает поверхность z-буфера.dwFourCC
FourCC код.
dwRGBBitCount
RGB биты на пиксель (DDBD_4,8,16,24,32)
dwYUVBitCount
YUV биты на пиксель (DDBD_4,8,16,24,32)
dwZBufferBitDepth
Глубина Z-буфера. (DDBD_8,16,24,32)
dwAlphaBitDepth
Глубина бита канала Alpha. (DDBD_1,2,4,8)
dwRBitMask
Маска для красных битов.
dwYBitMask
Маска для Y битов.
dwGBitMask
Маска для зеленых битов.
dwUBitMask
Маска для U битов.
dwBBitMask
Маска для синих битов.
dwVBitMask
Маска для V битов.
dwRGBAlphaBitMask
Маска для канала alpha.
dwYUVAlphaBitMask
Маска для канала alpha.
DDSCAPS_3D
Поддерживается для обратной совместимости. Прикладные программы должны использовать флажок DDSCAPS_3DDEVICE.DDSCAPS_3DDEVICE
Указывает, что эта поверхность может использоваться для 3D представления. Прикладные программы могут использовать этот флажок, чтобы гарантировать, что устройство имеет внеэкранные поверхности, распределенные из правильной “кучи “. Если этот флажок установлен для “кучи “, поверхность не будет распределена из той “кучи “.DDSCAPS_ALLOCONLOAD
Указывает, что память для поверхности не распределена, пока поверхность не загружена, используя IDirect3DTexture:: Load.DDSCAPS_ALPHA
Указывает, что эта поверхность содержит alpha информацию. Формат пикселя должен быть опрошен, чтобы определить, содержит ли эта поверхность только alpha информацию или alpha информацию, чередуемую с данными цвета пикселя (типа RGBA или YUVA).DDSCAPS_BACKBUFFER
Указывает, что эта поверхность - обратный буфер с поверхностной переключающейся структурой. Вообще, эта возможность установлена в методе IDirectDraw:: CreateSurface, когда установлен DDSCAPS_FLIP. Только та поверхность, которая немедленно предшествует DDSCAPS_FRONTBUFFER, имеет этот набор возможностей. Другие поверхности идентифицированы как обратные буфера присутствием флажка DDSCAPS_FLIP, их порядка присоединения, и отсутствия DDSCAPS_FRONTBUFFER и DDSCAPS_BACKBUFFER. Если эта возможность установлена в IDirectDraw:: CreateSurface, создается автономный обратный буфер. Эта поверхность может быть присоединена к переднему буферу, другому обратному буферу, или для формирования поверхностной переключающейся структуры. См. IDirectDrawSurface:: AddAttachedSurface для детального описания поведения в этом случае. DirectDraw поддерживает n поверхностей в поверхностной переключающейся структуре.DDSCAPS_COMPLEX
Указывает, что описывается сложная поверхностная структура. Сложная поверхностная структура заключается в создании больше чем одной поверхности. Дополнительные поверхности будут присоединены к корневой поверхности. Сложная структура может быть разрушена, только уничтожая корень.DDSCAPS_FLIP
Указывает, что эта поверхность - часть поверхности с переключающейся структурой. Когда эта возможность передается IDirectDraw:: CreateSurface,флажки DDSCAPS_FRONTBUFFER, и DDSCAPS_BACKBUFFER не устанавливаются. Флажки устанавливаются этим методом в результате создания. DwBackBufferCount член в структуре DDSURFACEDESC должен быть установлен по крайней мере в 1. Флажок DDSCAPS_COMPLEX должен всегда устанавливаться при создании множественных поверхностей через IDirectDraw:: CreateSurface.DDSCAPS_FRONTBUFFER
Указывает, что эта поверхность - передний буфер поверхности с переключающейся структурой. Установливается в IDirectDraw:: CreateSurface, когда установлен DDSCAPS_FLIP . Если эта возможность послана в IDirectDraw:: CreateSurface метод, будет создан автономный передний буфер. Эта поверхность не будет иметь DDSCAPS_FLIP возможности. Она может быть присоединена к другим обратным буферам, чтобы сформировать переключающуюся структуру. См. IDirectDrawSurface:: AddAttachedSurface для детального описания.DDSCAPS_HWCODEC
Указывает, что эта поверхность должна быть способнак аппаратной декомпрессииDDSCAPS_LIVEVIDEO
Указывает, что эта поверхность должна быть способна получать видео.DDSCAPS_MIPMAP | DDSCAPS_COMPLEX;
ddsd.dwWidth = 256UL;ddsd.dwHeight = 256UL;
ddres = lpDD->CreateSurface(&ddsd, &lpDDMipMap);
if
(FAILED(ddres))
...
Вы можете опускать число уровней mipmaps, тогда IDirectDraw:: CreateSurface метод создаст цепочку поверхностей, каждый мощностью в два раза меньшей чем предыдущая, до самого маленького возможного размера. Также возможно опустить ширину и высоту, тогда IDirectDraw:: CreateSurface создаст число уровней с минимальным размером уровня 1ґ1.
Цепочка mipmap поверхностей может быть пересечена, используя IDirectDrawSurface:: GetAttachedSurface метод, определяя DDSCAPS_MIPMAP и DDSCAPS_TEXTURE флажки возможности. Следующий пример пересекает mipmap цепочку от самого высокого до самых низких разрешающих способностей.
LPDIRECTDRAWSURFACE lpDDLevel, lpDDNextLevel;
DDSCAPS ddsCaps;
lpDDLevel = lpDDMipMap;
lpDDLevel->AddRef();
ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_MIPMAP;
ddres = DD_OK;
while
(ddres == DD_OK)
{
// Обрабатывают этот уровень
...
ddres = lpDDLevel->GetAttachedSurface(
&ddsCaps, &lpDDNextLevel);
lpDDLevel->Release();
lpDDLevel = lpDDNextLevel;
}
if
((ddres != DD_OK) && (ddres != DDERR_NOTFOUND))
...
Вы можете также формировать переключающиеся цепочки mipmaps. В этом сценарии, каждый уровень mipmap имеет связанную цепочку обратных буферных поверхностей текстуры. Каждая обратная буферная текстура присоединена к одному уровню mipmap. Только передний буфер в цепочке имеет набор флажков DDSCAPS_MIPMAP; другие - просто текстура(DDSCAPS_TEXTURE). Уровень mipmap может иметь две присоединенных карты текстуры, одна с набором DDSCAPS_MIPMAP, которая является следующим уровнем в mipmap цепочке, и одна с набором флажков DDSCAPS_BACKBUFFER, которая является обратным буфером переключающейся цепочки. Все поверхности в каждой переключающейся цепочке должны иметь тот же самый размер.
Не возможно формировать такое поверхностное расположение с одиночным обращением к IDirectDraw:: CreateSurface. Чтобы создавать переключаемые mipmap, или формируйте комплекс mipmap цепочек, и вручную присоедините к обратному буферу методом IDirectDrawSurface:: AddAttachedSurface, или создайте последовательность переключающихсяe цепочек, и формируйте mipmap с IDirectDrawSurface:: AddAttachedSurface.
DDSCAPS_MIPMAP
Указывает, что эта поверхность - один уровень mipmap. Эта поверхность будет присоединена к другим DDSCAPS_MIPMAP поверхностям, чтобы сформировать mipmap. Это может быть выполнено явно, создавая ряд поверхностей и присоединяя их IDirectDrawSurface:: AddAttachedSurface или неявно с помощью IDirectDraw:: CreateSurface. Если эта возможность установлена, должен также быть установлен DDSCAPS_TEXTURE.DDSCAPS_MODEX
Указывает, что эта поверхность - 320 x 200 или 320 x 240 ModeX поверхность.DDSCAPS_OFFSCREENPLAIN
Указывает, что эта поверхность - любая внеэкранная поверхность, не оверлей, не текстура, не z-буфер, не передний буфер , не обратный буфер, не альфа поверхность. Используется, чтобы идентифицировать простые поверхности.DDSCAPS_OVERLAY
Указывает, что эта поверхность - оверлей. Может быть или не быть непосредственно видимым в зависимости от того, является лио в настоящее время оверлеем на первичной поверхности. Может использоваться DDSCAPS_VISIBLE, чтобы определить, является ли оверлеем в настоящее время.DDSCAPS_OWNDC
Указывает, что эта поверхность будет иметь DC связь на длительный период.DDSCAPS_PALETTE
Указывает, что этот драйвер устройства позволяет создавать и присоединять уникальные объекты DirectDrawPalette.DDSCAPS_PRIMARYSURFACE
Указывает, что поверхность - основная поверхность. Представляет то, что видимо пользователю в настоящее время.DDSCAPS_PRIMARYSURFACELEFT
Указывает, что эта поверхность - первичная поверхность для левой позиции наблюдателя. Представляет то, что видимо с левой позиции наблюдателя в настоящее время. Когда эта поверхность создана, поверхность с DDSCAPS_PRIMARYSURFACE возможностью представляет то, что видимо с правой позиции пользователя.DDSCAPS_SYSTEMMEMORY;
ddsd.dwWidth = 10;ddsd.dwHeight = 10;
ddrval = lpDD2->CreateSurface( &ddsd, &lpSurf,
DDSCAPS_TEXTURE
Указывает, что эта поверхность может использоваться как 3D текстура. Не указывает, используется ли поверхность для этой цели.DDSCAPS_VIDEOMEMORY
Указывает, что эта поверхность существует в памяти дисплея.DDSCAPS_VISIBLE
Указывает, что изменения, сделанные в этой поверхности немедленно видимы. Всегда устанавливается для основной поверхности и установлено для оверлеев, во время текстурирования.DDSCAPS_WRITEONLY
Указывает, что разрешается только доступ для записи поверхности. Доступ для чтения из поверхности может генерировать ошибку.DDSCAPS_ZBUFFER
Указывает, что эта поверхность - Z-буфер. Z-буфер содержит информацию, которая не может отображаться. Содержит информацию с разрядной глубиной, которая используется, чтобы определить, какие пиксели являются видимыми или затенены.DDSURFACEDESC
DDSCL_ALLOWMODEX
Позволяет использование ModeX режимов дисплея.DDSCL_ALLOWREBOOT
Позволяет реагировать на CTRL_ALT_DEL во время полноэкранного исключительного режима.DDSCL_FULLSCREEN
Указывает, что исключительный владелец режима будет ответственен за всю основную поверхность. GDI может игнорироваться.DDSCL_NORMAL);
if(ddrval!= DD_OK)
return;
Ddrval = lpDD- > QueryInterface (IID_IDirectDraw2,
(LPVOID *) &lpDD2);
if
(ddrval!= DD_OK)
return;
Ddscaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
Ddrval = lpDD2- > GetAvailableVidMem (&ddscaps, &total,
&free);
if
(ddrval!= DD_OK)
return;
Этот пример показывает синтаксис С++ для создания интерфейса IDirectDraw, который затем использует метод IDirectDraw:: QueryInterface, чтобы создать интерфейс IDirectDraw2. Этот интерфейс содержит метод IDirectDraw2:: GetAvailableVidMem. Попытка использовать этот метод из интерфейса IDirectDraw кончится ошибкой компиляции.
В дополнение к методу IDirectDraw2:: GetAvailableVidMem , интерфейс IDirectDraw2 содержит все методы, обеспечиваемые в интерфейсе IDirectDraw. В этот интерфейс включены новые методы IDirectDraw2:: SetDisplayMode и IDirectDraw2:: EnumDisplayModes , которые позволяют определить частоты регенерации экрана. Если частоты регенерации не требуются, то можно использовать методы IDirectDraw:: SetDisplayMode и IDirectDraw:: EnumDisplayModes .
Взаимодействие между IDirectDraw:: SetCooperativeLevel и IDirectDraw:: SetDisplayMode немного отлично чем между IDirectDraw2:: SetCooperativeLevel и IDirectDraw2:: SetDisplayMode. Если Вы используете интерфейс IDirectDraw, и прикладная программа получает исключительный режим, вызывая IDirectDraw:: SetCooperativeLevel с флажком DDSCL_EXCLUSIVE, изменяет режим используя IDirectDraw:: SetDisplayMode, затем отменяет исключительный режим, вызывая IDirectDraw:: SetCooperativeLevel с флажком DDSCL_NORMAL, первоначальный режим дисплея не будет восстановлен. Новый режим дисплея останется до вызова из прикладной программы метода IDirectDraw:: RestoreDisplayMode или удаления объекта DirectDraw. Однако, если Вы используете интерфейс IDirectDraw2, и прикладная программа пройдет теми же самыми шагами, первоначальный режим дисплея будет восстановлен, когда потеряет исключительный режим .
DDSCL_NOWINDOWCHANGES
Указывает, что DirectDraw не позволяется минимизировать или восстановить окно прикладной программы при активации.Флажок DDSCL_EXCLUSIVE установливается для вызова функций, которые могут иметь воздействие на эффективность для других прикладных программ. Для вызова метода IDirectDraw::Compact, измените режим дисплея или измените поведение (напримерпереключение) первичной поверхности, и прикладная программа должна быть установлена в исключительный уровень доступа. Если будет вызов IDirectDraw:: SetCooperativeLevel с DDSCL_EXCLUSIVE и DDSCL_FULLSCREEN, DirectDraw будет пытаться изменить размеры окна на полноэкранные. Прикладная программа должна также установить флажки DDSCL_EXCLUSIVE или DDSCL_NORMAL, и DDSCL_EXCLUSIVE требует DDSCL_FULLSCREEN.
ModeX режимы доступены, только если прикладная программа устанавливает DDSCL_ALLOWMODEX, DDSCL_FULLSCREEN, и DDSCL_EXCLUSIVE. DDSCL_ALLOWMODEX не может использоваться с DDSCL_NORMAL. Если DDSCL_ALLOWMODEX не определен, метод IDirectDraw2:: EnumDisplayModes не будет перечислять ModeX режимы, и IDirectDraw2:: SetDisplayMode метод будет возвращать ошибку, когда запрошен режим ModeX. Набор поддерживаемых режимов дисплея может изменяться после использования IDirectDraw:: SetCooperativeLevel.
ModeX режимы не поддерживаются Windows; следовательно в ModeX режиме Вы не можете использовать IDirectDrawSurface::Lock, чтобы блокировать первичную поверхность, или IDirectDrawSurface:: Blt метод для блиттинга на первичную поверхность. Используйте метод IDirectDrawSurface:: GetDC на первичной поверхности, или используйте GDI с DC. ModeX режимы обозначены флажком DDSCAPS_MODEX в DDSCAPS члене структуры DDSURFACEDESC, возвращенной IDirectDrawSurface:: GetCaps и IDirectDraw2:: EnumDisplayModes.
Так как прикладные программы могут использовать DirectDraw с большим количеством окон, IDirectDraw:: SetCooperativeLevel не требует, чтобы был определен HWND, если прикладная программа запрашивает DDSCL_NORMAL режим. Передавая NULL в HWND, все окна могут использоваться одновременно в нормальном режиме Windows.
См. также IDirectDraw2:: SetDisplayMode, IDirectDraw:: Компактный, IDirectDraw2:: EnumDisplayModes
DDSD_REFRESHRATE
Кроме того, имя флажка DDSCAPS_TEXTUREMAP было изменено наDDSCAPS_TEXTURE, и имя флажка DDPF_PALETTEINDEXED4TO8 было изменено на DDPF_PALETTEINDEXEDTO8.
Были добавлены следующие сообщения об ошибках :
DDERR_CANTLOCKSURFACE DDERR_CANTPAGELOCK
DDERR_CANTPAGEUNLOCK DDERR_DCALREADYCREATED
DDERR_INVALIDSURFACETYPE DDERR_NOMIPMAPHW
DDERR_NOTPAGELOCKED DDERR_NOTINITIALIZED
IDirectDraw2:: SetDisplayMode метод содержит два новых параметра, dwRefreshRate и dwFlags. Если никакой из этих параметров не необходим, Вы можете все еще использовать IDirectDraw:: SetDisplayMode.
Метод IDirectDraw2:: EnumDisplayModes был добавлен, чтобы установить частоту регенерации монитора и сохранять это в члене dwRefreshRatе структуры DDSURFACEDESC.
Новый метод был добавлен к интерфейсу IDirectDraw2: IDirectDraw2:: GetAvailableVidMem.
Три новых метода были добавлены к интерфейсу IDirectDrawSurface2: IDirectDrawSurface2:: GetDDInterface, IDirectDrawSurface2:: PageLock, и IDirectDrawSurface2:: PageUnlock.
DirectDraw в Game SDK огранивал доступные режимы дисплея разрешением 640 на 480 с 8 bpp и 16 bpp. DirectDraw теперь позволяет прикладной программе изменять режим на любой поддерживаемый драйвером дисплея.
DirectDraw теперь проверяет режимы дисплея и не позволяет использовать их против ограничений установленного монитора. Если запрошенный режим не совместим с монитором, то вызов метода IDirectDraw2:: SetDisplayMode будет терпеть неудачу. Только режимы, поддерживаемые установленным монитором будут перечисляться в методе IDirectDraw2:: EnumDisplayModes.
В Game SDK DirectDraw позволял создавать только один объект DirectDraw на процесс. Если ваш процесс использовал другой компонент системы, типа DirectPlay, который создавал объект DirectDraw, процесс был неспособен создать другой объект DirectDraw для собственного использования. Теперь для процесса функцию DirectDrawCreate можно вызывать сколько угодно по мере необходимости. Уникальный и независимый интерфейс будет возвращен из каждого обращения. Для большего количества информации, см. Многократные объекты DirectDraw в процессе.
DirectDraw Game SDK требовал, чтобы HWND был определен в обращении к методу IDirectDraw:: SetCooperativeLevel независимо от того, какой запрашивался режим: полноэкранный или оконный , исключительный или кооперативный . Этот метод больше не требует определения HWND, если прикладная программа запрашивает DDSCL_NORMAL режим. Теперь возможно использование DirectDraw с многочисленными окнами. Все эти окна могут использоваться одновременно в нормальном режиме.
В DirectDraw Game SDK, если поверхность была в памяти системы, то аппаратный уровень эмуляции (HEL) автоматически выполнял блиттинг. Однако, некоторые платы дисплея имеют аппаратные средства DMA , которые позволяют им эффективно выполнять блиттинг в и из поверхностей памяти системы. В DirectDraw версии DirectX 2 , структура DDCAPS была расширена, чтобы позволить драйверам сообщать эту возможность. Были добавлены следующие члены :
DWORD dwSVBCaps
DWORD dwSVBCKeyCaps
DWORD
dwSVBFXCaps
DWORD
dwSVBRops [DD_ROP_SPACE]
DWORD
dwVSBCaps
DWORD
dwVSBCKeyCaps
DWORD
dwVSBFXCaps
DWORD
dwVSBRops [DD_ROP_SPACE]
DWORD
dwSSBCaps
DWORD
dwSSBCKeyCaps
DWORD
dwSSBFXCaps
DWORD
dwSSBRops [DD_ROP_SPACE]
В DirectDraw Game SDK, палитры могли быть присоединены только к основной поверхности. Палитры могут теперь быть присоединены к любой палеттизированной поверхности (основной, двойному буферу, вне экранной плоскости, или текстурной карте). Для большего количества информации, см. Установка палитры на неосновных поверхностях.
Палитры могут теперь быть совместно использованы многочисленными поверхностями. Для большего количества информации, см. Совместное использование палитр.
В DirectDraw Game SDK были поддержаны палитры только с 8 битами (256 входа) . DirectDraw DirectX 2 SDK поддерживает также палитры с 1 битом (2 входа), с 2 битами (4 входа), и с 4 битами (16 входов). Для большого количества информации, см. Новые типы палитры.
Ограничители могут теперь быть разделены между многими поверхностями. Для большего количества информации, см. Совместное использование ограничителей.
Была добавлена новая функция API DirectDrawCreateClipper . Эта функция позволяет создавать объекты ограничителя не принадлежащих объекту DirectDraw. Для большего количества информации, см. Драйвер независимых ограничителей.
В DirectDraw Game SDK HEL мог создавать поверхности только если формат пикселя точно согласовывался с текущей основной поверхностью. Это ограничение было ослаблено для DirectX 2 DirectDraw. Для большего количества информации, см. Поддержку форматов поверхностей на аппаратном уровне эмуляции (HEL).
Поддержка для поверхностей, специфических для представления 3D (карты текстуры, mipmaps, и z-буфера) была добавлена или была расширена. Для большего количества информации, см. Карты текстуры, Mipmaps, и z-буферы.
DDSVCAPS_ENIGMA
Указывает, что стерео представление использует ENIGMA кодирование.DDSVCAPS_FLICKER
Указывает, что стерео представление использует высокочастотное мерцание.DDSVCAPS_REDBLUE
Указывает, что стерео представление использует красные и синие фильтры, прикладываемые к левым и правым позициям наблюдателя. Все изображения должны адаптировать их color space для этого процесса.DDSVCAPS_SPLIT
Указывает, что стерео представление выполнено по технологии разделения экрана.dwAlphaBltConstBitDepths
DDWAITVB_BLOCKBEGIN
Возврат, когда начинается вертикальный пустой интервал.DDWAITVB_BLOCKBEGINEVENT
Вызывает событие, когда начинается вертикальный пробел.В настоящее время не поддерживается.DDWAITVB_BLOCKEND
Возврат, когда заканчивается вертикальный пустой интервал и начинается отображение.hEvent
Программа обработки для события, которое будет вызвано, когда начинается вертикальный пробел.
Direct3D
Direct3D - следующее поколение интерактивной 3D технологии в реальном масштабе времени, для компьютерных пользователей дома и в Интернете. Это обеспечивается API, аппаратной независимостью устройств, общей моделью драйвера для разработчиков аппаратных средств, предлагает 3D решения под ключ для изготовителей персональных компьютеров, и облегчает доступ для конечных пользователей к высококачественным 3D в их системам.Direct3D - полный набор услуг 3D real-time графики , который обеспечивает быстрый программный 3D рендеринг (преобразование, освещение, и растеризация) и прозрачный доступ к ускорению аппаратных средств. Direct3D представляет всестороннее решение 3D задач для современных компьютеров. API услуги включают интегрированный сохраняемый режим высокого уровня и непосредственный режим низкого уровня API, и поддержку для других систем, которые могли бы использовать Direct3D, чтобы получить доступ к ускорению аппаратных средств 3D. Direct3D полностью масштабируемый, допускающий всем частям 3D рендеринга быть ускоренными аппаратными средствами. Direct3D предлагает графические возможности акселераторов аппаратных средств 3D, включая z-буфер, сглаживание, альфа смешивание, mipmapping, атмосферные эффекты, и перспективно - правильное отображение текстуры. Плотная интеграция с другими DirectX технологиями дает возможность Direct3D представлять такие продвинутые возможности как отображение видео, аппаратное представление 3D в 2D, а также использование смешанной 2D и 3D графики в интерактивных приложениях.
Game SDK не содержал Direct3D. Все Direct3D функциональные возможности появились в DirectX 2 SDK.
DirectDraw HAL
DirectDraw HAL аппаратно зависим и содержит только аппаратно - специфический код. HAL может быть в 16 битным, 32 битным, или, в Windows 95, комбинированным. В Windows NT HAL - всегда 32 битный . HAL может быть неотъемлемой частью драйвера дисплея или отдельной DLL, которая связывается с драйвером дисплея через интерфейс, определенный создателем драйвера.DirectDraw HAL выполнен изготовителем чипа, производителем платы, или первоначальным изготовителем оборудования (OEM). HAL содержит только устройство-зависимый код и не выполняет никакую эмуляцию. Если функция не выполняется аппаратными средствами, HAL не должен сообщать об этом, как об аппаратнойя возможности. HAL не должен делать никакой проверки правильности параметра. Параметры проверяются DirectDraw прежде чем вызывается HAL.
DirectDraw HEL и Direct3D
DirectDraw HEL был расширен, чтобы поддерживать создание текстуры, mipmap, и z-буфер поверхностей. Кроме того, из-за плотной интеграции DirectDraw и Direct3D, irectdraw-допускаемая система будет всегда обеспечивать поддержку Direct3D (в эмуляции программного обеспечения, по крайней мере). Следовательно, DirectDraw HEL экспортирует флажок DDSCAPS_3DDEVICE, чтобы указать, что поверхность может использоваться для представления 3D. DirectDraw драйвер для ускоренной аппаратными средствами платы дисплея 3D должен экспортировать эту возможность, чтобы указать присутствие ускоренного аппаратными средствами 3D.DirectDraw программная эмуляция
Уровень эмуляции аппаратных средств DirectDraw's (HEL) представляет DirectDraw такие же возможности как и HAL. Исследуя возможности дисплея в течение инициализации прикладной программы, Вы можете корректировать ее параметры , чтобы обеспечить оптимальную эффективность на ряде платформ. Если DirectDraw HAL не представлен, или запрошенная особенность не обеспечивается аппаратными средствами, DirectDraw эмулирует отсутствующие функциональные возможности.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-порядок оверлея автоматически обрабатывает манипулирование прозрачностью между оверлеями.
DirectDrawCreate
HRESULTDirectDrawCreate(GUID FAR * lpGUID,
LPDIRECTDRAW FAR * lplpDD,IUnknown FAR * pUnkOuter);
Создает образец объекта DirectDraw.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DirectDrawCreateClipper
HRESULT DirectDrawCreateClipper( DWORD dwFlags,LPDIRECTDRAWCLIPPER FAR *lplpDDClipper,
IUnknown FAR *pUnkOuter);
Создает образец объекта DirectDrawClipper, не связанного с объектом DirectDraw.
Чтобы создавать объект DirectDrawClipper, принадлежащий специфическому объекту DirectDraw, используйте IDirectDraw:: CreateClipper.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки иначе:
DDERR_INVALIDPARAMS DDERR_OUTOFMEMORY
dwFlags
Этот параметр в настоящее время не используется и должен быть установлен в 0.
lplpDDClipper
Адрес указателя, который будет заполнен адресом нового объекта DirectDrawClipper.
pUnkOuter
Учитывает будущую совместимость с COM особенностями соединения частей. Сейчас DirectDrawCreateClipper возвратит ошибку, если этот параметр не NULL.
Эта функция может вызываться прежде, чем любые объекты DirectDraw созданы. Потому что эти ограничители не принадлежат никакому объекту DirectDraw, они автоматически не разрушаются, когда объекты прикладной программы уничтожены. Если не разрушены явно прикладной программой, они будут разрушены DirectDraw, когда прикладная программа закончит работу.
DirectDrawEnumerate
HRESULT DirectDrawEnumerate(LPDDENUMCALLBACK lpCallback,LPVOID lpContext);
Перечисляет объекты DirectDraw, установленные на системе. NULL GUID вход всегда идентифицирует первичное устройство дисплея, общедоступнное с GDI.
Возвращает DD_OK если успешно, или DDERR_INVALIDPARAMS.
lpCallback
Адрес функции Callback, которая будет вызываться с описанием каждого irectdraw-допускаемого HAL, установленного в систему.
lpContext
Адрес caller-определенного контекста, который будет передан к перечислению callback каждый раз, когда он вызывается.
DirectInput
Джойстик принадлежит к классу устройств, которые передают осязательные движения и действия игроков внутри игры. DirectInput обеспечивает функциональные возможности, чтобы обработать данные, представляющие эти движения и действия джойстиков, а также других связанных устройств, типа шаровых указателей и flight harnesses.В настоящее время, DirectInput - просто другое имя для существующей функции Win32, joyGetPosEx. Эта функция обеспечивает расширенные возможности предшественнику, joyGetPos, и должна использоваться для любых услуг джойстика. В будущей поддержке для устройств ввода данных, включая аппаратные средства виртуальной реальности, игры, которые используют joyGetPosEx будут автоматически поддерживать ввод с этих устройств.
DirectPlay
Одна из наиболее значительных особенностей персонального компьютера как готовой игровой платформы - свободный доступ к услугам связи. DirectPlay позволяет многочисленным игрокам взаимодействовать с игрой через стандартные модемы, сетевые соединения, или интерактивные услуги.Интерфейс IDirectPlay содержит методы, обеспечивающие возможности типа создания и разрушения игроков, добавление игроков в и удаления игроков из групп, посылка сообщений игрокам, приглашение игроков, чтобы участвовать в игре, и так далее.
DirectPlay -определяется как интерфейс IDirectPlay и DirectPlay сервер. DirectPlay серверы поддерживаются как Microsoft, так и третьими лицами для модемов и сетей . При использовании такого сервера, DirectРlay игры могут не вдаваться в подробности связи.
Было сделано единственое внешнее изменение:
Возвращается ошибка DPERR_SENDTOOBIG , если буфер сообщений, переданный в IDirectPlay::Send, больший чем позволяет DirectPlay.
DirectSetup
Был добавлен флажок DSETUP_D3D к параметру dwFlags функции DirectXSetup.DirectSound
Программирование для быстродействующих прикладных программ и игр требует эффективного и динамичного звука. Microsoft обеспечивает два метода для достижения этого: MIDI потоки и DirectSound. MIDI потоки, фактически, часть мультимедиа интерфейса программирования прикладной программы Windows 95. Они посылают MIDI сообщения системе, которая затем эффективно интегрирует их с процессами. Для большего количества информации относительно MIDI потоков, см. документацию, включенную с Win32 SDK.DirectSound осуществляет новую модель для воспроизведения в цифровой форме звуков и для смешивания различных источников. Как и другие объектные классы в DirectX 2 SDK, DirectSound использует аппаратные средства всякий раз, когда это возможно и эмулирует аппаратные особенности в программном обеспечении, когда эта особенность не представлена в аппаратных средствах. Вы можете сделать запрос аппаратных возможностей во время выполнения, чтобы определить самое лучшее решение для любой данной конфигурации персонального компьютера.
DirectSound сформирован на com-основанных интерфейсах IDirectSound и IDirectSoundBuffer, и расширяем к другим интерфейсам. Для большого количества информации относительно COM концепций, см. Модель компоенентных объектов.
Объект DirectSound представляет звуковую плату и различные атрибуты. Объект DirectSoundBuffer создан, используя метод DirectSound:: CreateSoundBuffer объекта IDirectSound и представляет собой буфер, содержащий звуковые данные. Может существовать несколько объектов DirectSoundBuffer и смешиваться вместе в основной объект DirectSoundBuffer. DirectSound буферы используются, чтобы начинать, останавливать, и приостанавливать звуковое воспроизведение, и устанавливать атрибуты типа частоты, формата, и так далее.
В зависимости от типа платы, DirectSound буферы могут существовать в аппаратных средствах как встроенная оперативная память, память волновой таблицы, канал прямого доступа в память (DMA) , или действительный буфер (для звуковой платы основанной на портах ввода\вывода ). Где не имеется никакой аппаратной реализации буфера DirectSound, будет производиться эмуляция в памяти системы.
Основной буфер используется для смешивания звуков из вторичных буферов, но к нему можно обращаться непосредственно для произвольного смешивания или других специальных действий. (Использование приводит к блокировке основного буфера, и влечет за собой закрытие всего доступа к звуковым аппаратным средствам из других источников).
Вторичные буферы могут хранить общие звуки, проигрываемые прикладной программой типа игры. Звук, сохраненный во вторичном буфере может быть проигран как одиночное событие или как зацикленный звук, который играет неоднократно.
Вторичные буферы могут также проигрывать звуки размером больше чем доступная звуковая буферная память. Когда требуется проиграть звук, который больше чем буфер, вторичный буфер служит как очередь, которая хранит части звука.
Хотя имеются несколько видимых внешних различий между DirectSound в Game SDK и DirectSound в DirectX 2 SDK были сделаны значительные внутренние усовершенствования. Краткий список некоторых из этих различий:
Усовершенствования в коде волновой эмуляции, используемому, когда никакой драйвер устройства не доступен, поддержка волновых драйверов работала неправильно.
Изменения управления фокусом звука.. Эти изменения не имеют никаких различий к большинству игр. Они были необходимы для поддержки out-of -proc (exe сервер) объекта COM, и требований ActiveX™ .
Был добавлен флажок DSBCAPS_STICKYFOCUS . Этот флажок может быть определен в методе IDirectSound:: CreateSoundBuffer, чтобы изменить фокус поведения буфера звуков.
DirectX 2 Компоненты
DirectX 2 SDK составлен из нескольких интерфейсов, которые адресуют и отвечают за эффективность программирования игр и быстродействующих прикладных программ в Windows 95:Microsoft DirectDraw™ интерфейс программирования прикладной программы. Он ускоряет методы мультипликации, обеспечивая прямой доступ к аппаратным акселераторам, к растрам в памяти дисплея вне экрана, а также обеспечивая чрезвычайно быстрый доступ к блиттингу и переключению экранов.
Microsoft DirectSound™ интерфейс программирования прикладной программы. Он регулирует программный и аппаратный доступ к воспроизведению и смешиванию звуков.
Microsoft DirectPlay™ интерфейс программирования прикладной программы. Он позволяет просто связывать игры с помощью модема или сети.
Microsoft Direct3D™ интерфейс программирования прикладной программы. Он обеспечивает интерфейсом высокого уровня, который позволяет прикладным программам легко выполнять 3D графику, и интерфейсом низкого уровня, который прикладные программы могут использовать, чтобы полностью контролировать процесс рендеринга.
Microsoft DirectInput™ интерфейс программирования прикладной программы. Обеспечивает возможность ввода джойстиком вашей игре, а также позволяет подключить будущие устройства в ввода.
AutoPlay особенность Microsoft Windows 95. Это позволяет вашему CD выполнять программу установки или игру непосредственно после установки CD диска.
Последние две особенности, DirectInput и AutoPlay, существуют в Microsoft Win32, и не уникальны для DirectX 2 SDK.
DirectX 2 SDK COM Интерфейсы
Интерфейсы DirectX 2 SDK были созданы в базисном уровне иерархии программирования COM. Каждый основной интерфейс объекта устройства, типа IDirectDraw, IDirectSound, или IDirectPlay, происходит непосредственно из интерфейса IUnknown в OLE. Создание этих базисных объектов происходит для каждого объекта специализированными функциями в динамической библиотеке связей (DLL) и скорее чем функцией Win32 CoCreateInstance, используемой обычно для создания объектов COM.Вообще, модель объекта DirectX 2 SDK обеспечивает один основной объект для каждого устройства, из которого другие объекты получают поддержку. Например, объект DirectDraw представляет адаптер дисплея. Это используется, чтобы создать объекты DirectDrawSurface, которые представляют оперативную память дисплея и объекты DirectDrawPalette, которые представляют аппаратные палитры. Аналогично, объект DirectSound представляет звуковую плату и создает объекты DirectSoundBuffer, которые представляют звуковые источники на той плате.
Кроме способности генерировать зависимые объекты, основной объект устройства определяет возможности аппаратного устройства, которое он представляет, типа размера экрана и числа цветов, или имеет ли звуковая плата таблицу волнового синтеза .
Доступ к буферу изображения
Объекты DirectDrawSurface представляют поверхностную память в архитектуре DirectDraw. DirectDrawSurface позволяет прикладной программе непосредственно получать доступ к этой поверхностной памяти через IDirectDrawSurface::Lock. Программа вызывает этот метод, передавая структуру RECT, которая определяет прямоугольник на поверхности, к которому требуется доступ. Если вызов IDirectDrawSurface::Lock происходит с параметром RECT NULL, принимается, что запрашивается исключительный доступ ко всей поверхностной памяти. Этот метод заполняет структуру DDSURFACEDESC информацией, необходимой для прикладной программы, чтобы получить доступ к поверхностной памяти. Эта информация включает размер и формат пикселя поверхности, если от отличен от формата пикселя основной поверхности. Когда прикладная программа закончила работу с поверхностной памятью, поверхностная память должна быть сделана доступной методом IDirectDrawSurface::Unlock.Опыт показывает что имеется несколько общих проблем, с которыми Вы можете столкнуться при записи непосредственно в DirectDrawSurface. Следующий список описывает некоторые решения для этих проблем:
Никогда не принимайте шаг дисплея постоянным. Всегда исследуйте информацию шага, возвращенную IDirectDrawSurface::Lock. Этот шаг может измениться по ряду причин, включая расположение поверхностной памяти, тип платы дисплея, или даже версию используемого драйвера DirectDraw.
Существуют ограничения по обращению к IDirectDrawSurface:: Lock и IDirectDrawSurface::Unlock. IDirectDrawSurface::Lock проводит блокировку WIN16 при получении доступа к памяти поверхности для безопасного прохождения операции и IDirectDrawSurface:: GetDC метод неявно называет IDirectDrawSurface:: Lock. Блокировка WIN16 преобразовывает в последовательную форму доступ к GDI и USER, закрывая Windows для продолжительных задержках между операциями Lock и Unlock, а также между операциями GetDC и ReleaseDC.
Убедитесь, что Вы копируете выравненные данные в память. Windows 95 использует драйвер неисправности страниц, Vflatd. 386, чтобы переслать виртуальный плоский буфер для плат дисплея с банками переключаемой памяти. Этот модуль позволяет этим устройствам представлять линейный буфер фреймов(LFB) в DirectDraw. Копирование невыравненных данных в память может заставить систему приостановить операции, если копия охватывает несколько банков памяти.
Драйвер независимые ограничители
Вы можете создавать объекты ограничителя, которые непосредственно не принадлежат никакому специфическому объекту DirectDraw. Такие объекты ограничителя могут быть разделены многими объектами DirectDraw. Драйвер независимые объекты ограничителя создаются новой функцией DirectDraw API DirectDrawCreateClipper. Эта функция должна вызываться прежде, чем созданы любые объекты DirectDraw.Так как эти ограничители не принадлежат никакому объекту DirectDraw, они автоматически не уничтожаются, когда объекты вашей прикладной программы уничтожены. Если они не выпущены явно прикладной программой, ограничители будут выпущены DirectDraw при завершении программы.
Вы можете все еще создавать ограничители методом IDirectDraw:: CreateClipper. Объекты DirectDrawClipper автоматически разрушаются, когда рузрушается объект DirectDraw, из которого они были созданы.
EnumCallback
HRESULT WINAPI lpEnumCallback(LPDIRECTDRAWSURFACE lpDDSurface,LPDDSURFACEDESC lpDDSurfaceDesc,LPVOID lpContext);
Определенная прикладная программой процедура callback для IDirectDraw:: EnumSurfaces.
Возвращает DDENUMRET_OK, чтобы продолжить перечисление, или DDENUMRET_CANCEL, чтобы остановить его.
lpDDSurface
Адрес DirectDrawSurface, в настоящее время перечислимой, если это - существующая поверхность (DDENUMSURFACES_DOESEXIST). Значение будет NULL, если перечисляется потенциальная поверхность (DDENUMSURFACES_CANBECREATED).
lpDDSurfaceDesc
Адрес DDSURFACEDESC структуры для существующей или потенциальной поверхности, которая наиболее близко соответствует запрошенной поверхности.
lpContext
Адрес caller-определенной структуры, переданной члену при каждом вызове.
EnumModesCallback
HRESULT WINAPI lpEnumModesCallback (LPDDSURFACEDESC lpDDSurfaceDesc,LPVOID lpContext);
Определенная прикладная программой процедура callback для IDirectDraw2:: EnumDisplayModes.
Возвращает DDENUMRET_OK, чтобы продолжить перечисление, или DDENUMRET_CANCEL, чтобы остановить его.
lpDDSurfaceDesc
Адрес структуры DDSURFACEDESC, которая обеспечивает частоту монитора и режим который может быть создан. Эти данные только для чтения.
lpContext
Адрес caller-определенной структуры, которая будет передана к функции callback каждый раз, когда функция вызывается.
FnCallback
HRESULT WINAPI lpfnCallback (LPDIRECTDRAWSURFACE lpDDSurface,LPVOID lpContext);
Определенная прикладной программой процедура callback для IDirectDrawSurface:: EnumOverlayZOrders.
Возвращает DDENUMRET_OK, чтобы продолжить перечисление, или DDENUMRET_CANCEL, чтобы остановить его.
lpDDSurface
Адрес поверхности, являющейся оверлеем на этой поверхности.
lpContext
Адрес определяемого пользователем контекста, определенного пользователем.
FourCC YUV режим
// любой YUV цвет, где Y - между 100 и 110 и U//or V - между 50, и 55 прозрачны
dwColorSpaceLowValue = YUVQUAD(100,50,50);
dwColorSpaceHighValue = YUVQUAD(110,55,55);
Переключающиеся поверхности и количество фреймов GDI
DirectDraw расширил понятие переключающейся поверхности, которая теперь больше, чем видимая поверхность. Теперь любая поверхность может быть создана как переключающаяся. Этот подход имеет много преимуществ над традиционным, ограниченным контекстом переключающейся страницы.
При вызове IDirectDrawSurface::Flip, поверхности, связанные с DirectDrawSurface переключаются. Поверхности, присоединенные к объектам DirectDrawSurface не изменяются. Например, в ситуации с двойным буфером, программа, рисующая в обратный буфер всегда использует тот же самый объект DirectDrawSurface. Поверхностьбудет переключена на передний буфер, когда вызовется метод IDirectDrawSurface::Flip.
Если передний буфер видим, потому что он первичная поверхность или оверлей, который является в настоящее время видимым, при обращение к обратному буферу методами IDirectDrawSurface::Lock или IDirectDrawSurface:: Blt, будет возвращаться с значением возврата DDERR_WASSTILLDRAWING, пока не произойдет следующая вертикальная регенерация. Это происходит, потому что предыдущая поверхностная память переднего буфера, которая больше не присоединена к обратному буферу, все еще выводится на физический дисплей аппаратными средствами. Эта ситуация исчезает в течение следующей вертикальной регенерации, потому что аппаратные средства, которые модифицируют физический дисплей, повторно читают память дисплея на каждой регенерации.
Это физическое требование делает вызов IDirectDrawSurface::Flip на видимых поверхностях асинхронной командой. Хорошо при построении игр, например, выполнить все не-визуальные элементы игры после того, как этот метод вызыван. Когда ввод, звук и операции с рисованием в памяти системы был завершены, начинают выполняться задачи, которые требуют получения доступа к видимым обратным буферам.
Когда ваша прикладная программа должна выполниться в окне и все еще требует переключающейся среды, DirectDraw будет пытаться создать переключающуюся оверлейную поверхность. Если аппаратные средства не поддерживают оверлеи, Вы можете создать основную поверхность с переключающимися страницами, и когда поверхность, о чем GDI не знает, собирается стать первичной поверхностью, blit содержится в основной поверхности, а GDI записывает в буфер, который собирается стать видимым. Это занимеат не много времени , потому что blits выполняется асинхронно. Это может, однако, потреблять значительную blitter bandwidth, которая зависит от экранной разрешающей способности и размера окна, которое переключается. Когда число кадров в секунду не опускается ниже 20 fps, GDI действует правильно.
Прежде, чем Вы инициализируете объект DirectDraw, GDI уже используете вашу память дисплея для отображения. Когда Вы вызываете DirectDraw к инициализированию основной поверхности, адрес памяти той поверхности будет использовать также и GDI.
Если Вы создаете сложную поверхность с обратным буфером, GDI сначала укажет на память дисплея для основной поверхности. После этого GDI не имеет никакой информации относительно DirectDraw и продолжит действовать на этой поверхности, даже если Вы ее переключили, и это теперь невидимый обратный буфер.
Много прикладных программ начинают с создания одного большого окна, которое покрывает весь экран. Как только ваша прикладная программа активна и имеет фокус, GDI не будет пытаться писать в копию буфера, так как ничто не требует перерисовки.
Всегда необходимо помнить, что знает GDI только относительно первоначальной поверхности, и никогда не знает, - в настоящее время это первичная поверхность или обратный буфер. Если Вы не нуждаетесь в GDI экране, используйте вышеупомянутую методику. Если Вы нуждаетесь в GDI, Вы можете пробовать эту методику:
Создать первичную поверхность с двумя обратными буферами.
Blit начальную первичную поверхность (GDI поверхность) на средний обратный буфер.
Flip (NULL) чтобы поместить GDI на последнее место и сделать вашу начальную копию видимой.
После того, как Вы сделали это, копируйте с буфера GDI на средний буфер, выведите то, что Вы хотите чтобы пользователь видел на том буфере, затем используйте код ниже, который хранит GDI безопасно в нижней части и колеблется между другими двумя буферами.
рPrimary- > Flip (pMiddle)
Функции
Две из функций DirectDraw инициализируют контроль над памятью дисплея через интерфейс IDirectDraw. Первая функция DirectDrawCreate, создает образец объекта DirectDraw, который представляет специфическую часть аппаратных средств дисплея. Вторая функция, DirectDrawEnumerate, получает список всех объектов DirectDraw, установленных в системе. Эти функции - механизмы DirectDraw использования, чтобы поддерживать разнообразные части аппаратных средств дисплея. Чтобы поддерживать многочисленные устройства дисплея, ваша прикладная программа только выбирает специфический объект DirectDraw и инициализирует его.Третья функция, DirectDrawCreateClipper, создает образец DirectDraw ограничителя, который непосредственно не принадлежит объекту DirectDraw, и может быть разделен между многими объектами драйвера.
Возможности поверхностей
Возможности поверхностей GetCapsОграничители поверхностей GetClipper
Все интерфейсы COM наследуют методы
Все интерфейсы COM наследуют методы интерфейса IUnknown, которые перечислены в группе “IUnknown” выше. Эти три метода позволяют дополнительным интерфейсам быть добавленными к объекту DirectDraw без того, чтобы воздействовать на функциональные возможности первоначального интерфейса.Группы методов интерфейса IDirectDraw
Прикладные программы используют методы интерфейса IDirectDraw, чтобы создать объекты DirectDraw и работать с переменными уровня системы. Методы могут быть собраны в следующие группы:Распределение памяти Compact
Группы методов интерфейса IDirectDrawClipper
Прикладные программы используют методы интерфейса IDirectDraw, чтобы создавать объекты DirectDraw и для работы с переменными уровня системы. Методы могут быть организованы в следующие группы:Распределение памяти Initialize
Списки отсекания IsClipListChanged
Группы методов интерфейса IDirectDrawPalette
Прикладные программы используют методы интерфейса IDirectDrawPalette, чтобы создавать объекты DirectDrawPalette и для работы с переменными уровня системы. Методы могут быть организованы в следующие группы:Распределение памяти Initialize
IUnknown AddRef
Группы методов интерфейса IDirectDrawSurface
Прикладные программы используют методы интерфейса IDirectDrawSurface для создания объектов DirectDrawSurface и работы с переменными уровня системы. Методы могут быть собраны в следующие группы:Распределение памяти Initialize
HRESULT AddAttachedSurface (
LPDIRECTDRAWSURFACE lpDDSAttachedSurface);Присоединяет поверхность к другой поверхности.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
HRESULT Flip(
LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride,DWORD
dwFlags);
Делает поверхностную память, связанную с поверхностью DDSCAPS_BACKBUFFER, связанной с передней буферной поверхностью.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_GENERIC DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS DDERR_NOTFLIPPABLE
DDERR_NOFLIPHW DDERR_SURFACEBUSY
DDERR_SURFACELOST DDERR_WASSTILLDRAWING
HRESULT GetClipper (
LPDIRECTDRAWCLIPPER FAR * lplpDDClipper);Возвращает DirectDrawClipper, связанный с этой поверхностью. Возвращается ошибка , если никакой DirectDrawClipper не связан.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
HRESULT GetGDISurface (
LPDIRECTDRAWSURFACE FAR * lplpGDIDDSSurface);Возвращает объект DirectDrawSurface, который в настоящее время представляет поверхностную память, обрабатываемую GDI как первичная поверхность.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
HRESULT GetPalette (
LPDIRECTDRAWPALETTE FAR * lplpDDPalette);Возвращает структуру DirectDrawPalette, связанную с этой поверхностью.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_GENERIC DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS DDERR_NOEXCLUSIVEMODE
DDERR_NOPALETTEATTACHED DDERR_SURFACELOST
HRESULT WINAPI lpEnumSurfacesCallback (
LPDIRECTDRAWSURFACE lpDDSurface,LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext);
Определенная прикладная программой процедура callback для IDirectDrawSurface:: EnumAttachedSurfaces.
Возвращает DDENUMRET_OK, чтобы продолжить перечисление, или DDENUMRET_CANCEL, чтобы остановить его.
lpDDSurface
Адрес поверхности, присоединенной к этой поверхности.
lpDDSurfaceDesc
Адрес структуры DDSURFACEDESC, которая описывает присоединенную поверхность.
lpContext
Адрес определяемого пользователем контекста, определенного пользователем.
IDirectDraw:: AddRef
ULONGAddRef ();
Увеличивает счет ссылки объекта DirectDraw на 1. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.
Возвращает новый счет ссылки объекта.
Когда объект DirectDraw создан, счет ссылки установлен в 1. Каждый раз, когда прикладная программа получает интерфейс к объекту или вызывает AddRef метод, счет ссылки объекта увеличивается на 1. Используйте IDirectDraw::Release, чтобы уменьшить счет ссылки объекта на 1.
См. также IDirectDraw:: Initialize, IDirectDraw:: QueryInterface, IDirectDraw:: Release
IDirectDraw:: Compact
HRESULTCompact ();
В настоящее время этот метод не выполнен.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
DDERR_SURFACEBUSY DDERR_NOEXCLUSIVEMODE
Этот метод перемещает все части поверхностной памяти на плате дисплея в непрерывный блок, чтобы сделать самое большое место из свободной доступной памяти. Это обращение будет терпеть неудачу, если любые операции находятся в прогрессе.
Прикладная программа, вызывающая этот метод должна иметь совместный(кооперативный) уровень установленный в исключительный.
IDirectDraw:: CreateClipper
HRESULT CreateClipper(DWORD dwFlags,LPDIRECTDRAWCLIPPER FAR * lplpDDClipper,
IUnknown FAR * pUnkOuter);
Создает объект DirectDrawClipper.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
DDERR_OUTOFMEMORY DDERR_NOCOOPERATIVELEVELSET
dwFlags
Этот параметр в настоящее время не используется и должен быть установлен в 0.
lplpDDClipper
Адрес указателя, который будет заполнен с адресом нового объекта DirectDrawClipper, если IDirectDraw:: CreateClipper успешен.
pUnkOuter
Учитывает будущую совместимость с COM особенностями соединения частей. Сейчас IDirectDraw:: CreateClipper возвратит ошибку, если этот параметр не NULL.
Объект DirectDrawClipper может быть присоединен к DirectDrawSurface и использоваться в течение операций IDirectDrawSurface::Blt, IDirectDrawSurface::BltBatch, и IDirectDrawSurface::UpdateOverlay
Чтобы создать объект DirectDrawClipper, который не принадлежит специфическому объекту DirectDraw, используйте функцию DirectDrawCreateClipper.
IDirectDraw:: CreatePalette
HRESULT CreatePalette(DWORD dwFlags,LPPALETTEENTRY lpColorTable,
LPDIRECTDRAWPALETTE FAR * lplpDDPalette,
IUnknown FAR * pUnkOuter);
Создает объект DirectDrawPalette для этого объекта DirectDraw.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_NOEXCLUSIVEMODE
DDERR_INVALIDPARAMS DDERR_NOCOOPERATIVELEVELSET
DDERR_OUTOFCAPS DDERR_OUTOFMEMORY
IDirectDraw:: CreateSurface
HRESULT CreateSurface (LPDDSURFACEDESC lpDDSurfaceDesc,LPDIRECTDRAWSURFACE FAR * lplpDDSurface,
IUnknown FAR * pUnkOuter);
Создает объект DirectDrawSurface для этого объекта DirectDraw.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
IDirectDraw:: DuplicateSurface
HRESULT DuplicateSurface (LPDIRECTDRAWSURFACE lpDDSurface,LPLPDIRECTDRAWSURFACE FAR * lplpDupDDSurface);
Дублирует DirectDrawSurface.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_CANTDUPLICATE DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS DDERR_OUTOFMEMORY
IDirectDraw:: EnumSurfaces
HRESULTEnumSurfaces (DWORD
dwFlags,
LPDDSURFACEDESC lpDDSD, LPVOID
lpContext,
LPDDENUMSURFACESCALLBACk lpEnumCallback);
Перечисляет все существующие или возможные поверхности, которые отвечают определенному критерию поиска.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
dwFlags
IDirectDraw:: FlipToGDISurface
HRESULT FlipToGDISurface ();Делает поверхность, в которую пишет GDI, первичной поверхностью.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
IDirectDraw:: GetCaps
HRESULTGetCaps (LPDDCAPS lpDDDriverCaps,
LPDDCAPS lpDDHELCaps);
Заполняет возможности драйвера устройства для аппаратных средств и аппаратного уровня эмуляции (HEL).
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
lpDDDriverCaps
Адрес DDCAPS структуры для заполнения возможностями аппаратных средств, как сообщено драйвером устройства.
lpDDHELCaps
Адрес структуры DDCAPS для заполнения возможностями HEL.
См. также DDCAPS
IDirectDraw:: GetDisplayMode
HRESULT GetDisplayMode (LPDDSURFACEDESC lpDDSurfaceDesc);Возвращает текущий режим дисплея.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
IDirectDraw:: GetFourCCCodes
HRESULTGetFourCCCodes (LPDWORD
lpNumCodes,
LPDWORD lpCodes);
Возвращает коды FourCCCodes, поддерживаемые объектом DirectDraw. IDirectDraw:: GetFourCCCodes может также возвращать число поддерживаемых кодов.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
lpNumCodes
Адрес двойного слова, которое содержит число элементов массива lpCodes. Если число элементов слишком мало, чтобы разместить все коды, lpNumCodes будет содержать требуемое число, и массив lpCodes будет заполнен.
lpCodes
Адрес массива двойных слов, который будет заполнен кодами FourCC, поддерживаемых этим объектом DirectDraw. Если передан NULL, lpNumCodes будет содержать число поддерживаемных FourCC кодов.
IDirectDraw:: GetMonitorFrequency
HRESULTGetMonitorFrequency (LPDWORD
lpdwFrequency);
Возвращает частоту монитора, управляемого объектом DirectDraw. Значение частоты возвращено в Hz, умноженном на 100. Например, 60Hz возвращается как 6000.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
IDirectDraw:: GetScanLine
HRESULTGetScanLine (LPDWORD
lpdwScanLine);
Возвращает линию сканирования, которая в настоящее время рисуется на мониторе.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
DDERR_UNSUPPORTED DDERR_VERTICALBLANKINPROGRESS
lpdwScanLine
Адрес двойного слова, содержащего сканирующую строку.
См. также IDirectDraw:: GetVerticalBlankStatus, IDirectDraw:: WaitForVerticalBlank
IDirectDraw:: GetVerticalBlankStatus
HRESULT GetVerticalBlankStatus (LPBOOL lpbIsInVB);Возвращает состояние вертикального пробела.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
lpbIsInVB
Адрес BOOL, который будет заполнен состоянием вертикального пробела.
Этот метод устанавливается в TRUE, если встречается вертикальный пробел или иначе FALSE. Чтобы синхронизировать с вертикальным пробелом, используйте метод IDirectDraw:: WaitForVerticalBlank.
IDirectDraw:: Initialize
HRESULTInitialize(GUID FAR * lpGUID);
Инициализирует объект DirectDraw.
IDirectDraw:: QueryInterface
HRESULT QueryInterface(REFIID riid, LPVOID FAR * ppvObj);Определяет, поддерживает ли объект DirectDraw COM интерфейс. Если он это делает, система увеличивает счет ссылки на объект, и прикладная программа может начинать использовать этот интерфейс немедленно. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
riid
Идентификатор ссылки запрашиваемого интерфейса.
ppvObj
Адрес указателя будет заполнен указателем интерфейса, если запрос успешен.
Если прикладная программа не должна использовать интерфейс, установленный обращением к этому методу, она должна вызвать метод Release для того интерфейса, чтобы освободить его. Метод IDirectDraw:: QueryInterface позволяет объектам DirectDraw быть расширенными Microsoft и третьими лицами без столкновения с существующими или будущими функциональными возможностями каждого элемента.
IDirectDraw:: Release
ULONGRelease();
Уменьшает счет ссылки объекта DirectDraw на 1. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.
Возвращает новый счет ссылки объекта.
Объект DirectDraw освобождает себя, когда счет ссылки достигает 0. Используйте метод IDirectDraw:: AddRef, чтобы увеличить счет ссылки объекта на 1.
См. также IDirectDraw:: AddRef, IDirectDraw:: QueryInterface, IDirectDraw:: Initialize
IDirectDraw:: RestoreDisplayMode
HRESULTRestoreDisplayMode ();
Сбрасывает режим аппаратных средств устройства дисплея для первичной поверхности на предшествующий вызову метода IDirectDraw2:: SetDisplayMode.Требуется уровень исключительного доступа , чтобы использовать этот метод.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_GENERIC DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS DDERR_LOCKEDSURFACES
IDirectDraw:: SetCooperativeLevel
HRESULTSetCooperativeLevel (HWND hWnd, DWORD
dwFlags);
Определяет высокопоставленное поведение прикладной программы.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_HWNDALREADYSET DDERR_INVALIDPARAMS
DDERR_HWNDSUBCLASSED DDERR_INVALIDOBJECT
DDERR_EXCLUSIVEMODEALREADYSET DDERR_OUTOFMEMORY
hWnd
Определяет программу обработки окна, используемую для прикладной программы.
dwFlags
IDirectDraw:: WaitForVerticalBlank
HRESULT WaitForVerticalBlank (DWORD dwFlags,HANDLE hEvent);
Помогает вызывающему синхронизировать себя с вертикальным пустым интервалом (ожидание вертикального синхроимпульса).
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
DDERR_UNSUPPORTED DDERR_WASSTILLDRAWING
dwFlags
Определяет, как долго ждать вертикальный пробел.
IDirectDraw2:: EnumDisplayModes
HRESULT EnumDisplayModes (DWORD dwFlags,LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext,
LPDDENUMMODESCALLBACK lpEnumModesCallback);
Перечисляет все режимы дисплея, которые аппаратные средства поддерживают через объект DirectDraw, которые являются совместимыми с обеспечиваемым поверхностным описанием. Если передан NULL для поверхностного описания, все выставленные режимы будут перечислены.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
dwFlags
IDirectDraw2:: GetAvailableVidMem
HRESULT GetAvailableVidMem (LPDDSCAPS lpDDSCaps,LPDWORD lpdwTotal, LPDWORD lpdwFree);
Возвращает общую сумму доступной памяти дисплея и количество свободной памяти дисплея в настоящее время. Если передан NULL или lpdwTotal или lpdwFree , значение для этого параметра не возвращается.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_NODIRECTDRAWHW
DDERR_INVALIDPARAMS DDERR_INVALIDCAPS
lpDDSCaps
Адрес структуры DDSCAPS, которая содержит аппаратные возможности поверхности.
lpdwTotal
Адрес двойного слова, которое будет заполнено общей суммой доступной памяти дисплея.
lpdwFree
Адрес двойного слова, которое будет заполнено количеством свободной памяти дисплея в настоящее время .
Следующий пример на C ++ показывает использование IDirectDraw2:: GetAvailableVidMem, чтобы определить и общее количество и свободную память дисплея, доступную для поверхностей карты текстуры:
LPDIRECTDRAW2 lpDD2;
DDSCAPS ddsCaps;
DWORD dwTotal;
DWORD dwFree;
ddres = lpDD->QueryInterface(IID_IDirectDraw2,
&lpDD2); if (FAILED(ddres))
...
ddsCaps.dwCaps = DDSCAPS_TEXTURE;
ddres = lpDD2->GetAvailableVidMem(&ddsCaps,
&dwTotal, &dwFree);
if
(FAILED(ddres))
...
Этот метод дает только текущее состояние памяти дисплея. Количество свободной памяти дисплея подчинено изменению, поскольку поверхности создаются и разрушаются. Следовательно, свободное значение памяти должно использоваться только как грубая оценка. Кроме того, специфическая плата адаптера дисплея не может делать никакого различия между двумя различными типами памяти. Например, она может использовать ту же самую часть памяти дисплея, чтобы хранить z-буфера и текстуры. Следовательно, распределение одного типа поверхности (например, z-буфера) может воздействовать на количество памяти дисплея, доступной для другого типа поверхности (например, текстуры). Следовательно, самое лучшее - это сначала распределить фиксированные ресурсы прикладной программы (типа переднего, обратного и z-буферов) перед определением сколько памяти доступно для динамического использования (типа отображения текстуры).
Чтобы гарантировать согласованность с COM интерфейсом, этот метод - не, член интерфейса IDirectDraw, но - часть интерфейса IDirectDraw2. Чтобы использовать этот метод, Вы должны сначала сделать запрос для интерфейса IDirectDraw2. Для большего количества информации, см. Интерфейс IDirectDraw2.
IDirectDraw2:: SetDisplayMode
HRESULT SetDisplayMode (DWORD dwWidth, DWORD dwHeight,DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags);
Устанавливает режим аппаратных средств устройства дисплея.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_GENERIC DDERR_INVALIDMODE
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
DDERR_LOCKEDSURFACES DDERR_NOEXCLUSIVEMODE
DDERR_SURFACEBUSY DDERR_UNSUPPORTED
DDERR_UNSUPPORTEDMODE DDERR_WASSTILLDRAWING
dwWidth
Определяет ширину нового режима.
dwHeight
Определяет высоту нового режима.
dwBPP
Определяет биты на пиксель нового режима.
dwRefreshRate
Определяет частоту регенерации нового режима. Если этот параметр установлен в 0, используется версия интерфейса IDirectDraw этого метода.
dwFlags
Этот параметр в настоящее время не используется и должен быть установлен в 0.
Должен использоваться метод IDirectDraw:: SetCooperativeLevel , чтобы установить исключительный доступ уровня прежде, чем изменять режим. Если другие прикладные программы создали объект DirectDrawSurface на основной поверхности, и режим изменен, основные поверхностные объекты тех прикладных программ возвратят DDERR_SURFACELOST.
Чтобы гарантировать совместимость с COM , этот метод - не, часть интерфейса IDirectDraw, но принадлежит интерфейсу IDirectDraw2. Чтобы использовать этот метод, Вы должны сначала сделать запрос для интерфейса IDirectDraw2. Для большего количества информации, см. Интерфейс IDirectDraw2.
См. также IDirectDraw:: RestoreDisplayMode, IDirectDraw:: GetDisplayMode, IDirectDraw2:: EnumDisplayModes, IDirectDraw:: SetCooperativeLevel
IDirectDrawClipper:: AddRef
ULONGAddRef ();
Увеличивает счет ссылки объекта DirectDrawClipper на 1. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.
Возвращает новый счет ссылки объекта.
Когда объект DirectDraw создан, счет ссылки установлен в 1. Каждый раз когда прикладная программа получает интерфейс к объекту или вызывает AddRef, счет ссылки объекта увеличивается на 1. Используйте IDirectDrawClipper::Release , чтобы уменьшить счет ссылки объекта на 1.
См. также IDirectDraw:: CreateClipper, IDirectDrawClipper:: Initialize, IDirectDrawClipper:: QueryInterface, IDirectDrawClipper:: Release
IDirectDrawClipper:: GetClipList
HRESULT GetClipList (LPRECT lpRect,LPRGNDATA lpClipList, LPDWORD lpdwSize);
Возвращает копию отсекающегося списка, связанного с объектом DirectDrawClipper. Может быть выбрано подмножество отсекающегося списка, передавая прямоугольник, который отсекает отсекающийся список.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_GENERIC DDERR_INVALIDCLIPLIST
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
DDERR_NOCLIPLIST DDERR_REGIONTOOSMALL
lpRect
Адрес прямоугольника, который будет использоваться, чтобы отсечь отсекающийся список.
lpClipList
Адрес структуры RGNDATA, которая будет содержать возникающую в результате копию отсекающегося списка.
lpdwSize
Установите IDirectDrawClipper:: GetClipList, чтобы указат размер возникающего в результате отсекания списка.
IDirectDrawClipper:: GetHWnd
HRESULTGetHWnd (HWND FAR * lphWnd);
Возвращает hWnd, предварительно связанный с этим объектом DirectDrawClipper методом IDirectDrawClipper:: SetHWnd.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
lphWnd
Адрес hWnd, предварительно связанного с этим DirectDrawClipper методом IDirectDrawClipper:: SetHWnd.
IDirectDrawClipper:: Initialize
HRESULT Initialize (LPDIRECTDRAW lpDD, DWORD dwFlags);Инициализирует DirectDrawClipper.
IDirectDrawClipper:: IsClipListChanged
HRESULTIsClipListChanged (BOOL
FAR * lpbChanged);
Контролирует состояние отсекающегося списка, если hWnd связан с DirectDrawClipper.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
lpbChanged
Адрес Boolean переменной. Возвращается TRUE, если отсекающийся список изменился.
IDirectDrawClipper:: QueryInterface
HRESULT QueryInterface (REFIID riid, LPVOID FAR * ppvObj);Определяет, поддерживает ли объект DirectDrawClipper COM интерфейс. Если поддерживает, то система увеличивает значение ссылки на объект, и прикладная программа может начинать использовать тот интерфейс. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
riid
Идентификатор ссылки запрашиваемого интерфейса.
ppvObj
Адрес указателя, который получает указатель интерфейса если запрос успешен.
Если прикладной программе не нужно использовать интерфейс, восстановленный обращением к этому методу, она должна вызвать метод Release для этого интерфейса, чтобы освободить его. IDirectDrawClipper:: QueryInterface позволяет объектам DirectDrawClipper быть расширенным Microsoft и третьими лицами без столкновения с существующими или будущими функциональными возможностями.
См. также IDirectDrawClipper:: AddRef, IDirectDrawClipper:: Release, IDirectDrawClipper:: Initialize
IDirectDrawClipper:: Release
ULONGRelease ();
Уменьшает счет ссылки объекта DirectDrawClipper на 1. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.
Возвращает новый счет ссылки объекта.
Объект DirectDrawClipper освобождает себя, когда счет ссылки достигает 0. Используйте метод IDirectDrawClipper:: AddRef, чтобы увеличить счет ссылки объекта на 1.
См. также IDirectDrawClipper:: AddRef, IDirectDrawClipper:: Initialize, IDirectDrawClipper:: QueryInterface
IDirectDrawClipper:: SetClipList
HRESULT SetClipList (LPRGNDATA lpClipList, DWORD dwFlags);Устанавливает или удаляет отсекающийся список, используемый IDirectDrawSurface:: Blt, IDirectDrawSurface:: BltBatch, и IDirectDrawSurface:: UpdateOverlay на поверхностях, к которым присоединен родительский DirectDrawClipper.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_CLIPPERISUSINGHWND
DDERR_INVALIDPARAMS DDERR_INVALIDCLIPLIST
IDirectDrawClipper:: SetHWnd
HRESULT SetHWnd (DWORD dwFlags, HWND hWnd);Устанавливает hWnd, который получает информацию отсечения.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
DDERR_INVALIDCLIPLIST DDERR_OUTOFMEMORY
dwFlags
Этот параметр не используется внастоящее время и должен быть установлен в 0.
hWnd
HWnd, который получает информацию отсечения.
IDirectDrawPalette:: AddRef
ULONGAddRef ();
Увеличивает счет ссылки объекта DirectDrawPalette на 1. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.
Возвращает новый счет ссылки объекта.
Когда объект DirectDraw создан, счет ссылки установлен в 1. Каждый раз когда прикладная программа получает интерфейс к объекту или вызывает AddRef, счет ссылки объекта увеличивается на 1. Используйте IDirectDrawPalette::Release чтобы уменьшить счет ссылки объекта на 1.
См. также IDirectDrawPalette:: Initialize, IDirectDrawPalette:: QueryInterface, IDirectDrawPalette:: Release
IDirectDrawPalette:: GetCaps
HRESULT GetCaps (LPDWORD lpdwCaps);Возвращает возможности этого объекта палитры.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
IDirectDrawPalette:: GetEntries
HRESULTGetEntries (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
ULONGRelease ();
Уменьшает счет ссылки объекта DirectDrawPalette на 1. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.
Возвращает новый счет ссылки объекта.
Объект DirectDrawPalette освобождает себя, когда счет ссылки достигает 0. Используйте IDirectDrawPalette:: AddRef, чтобы увеличить счет ссылки объекта 1.
См. также IDirectDrawPalette:: AddRef, IDirectDrawPalette:: Initialize, IDirectDrawPalette:: QueryInterface
IDirectDrawPalette:: SetEntries
HRESULT SetEntries (DWORDdwFlags,
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
ULONGAddRef ();
Увеличивает счет ссылки объекта 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
HRESULTInitialize (LPDIRECTDRAW lpDD,
LPDDSURFACEDESC lpDDSurfaceDesc);
Инициализирует DirectDrawSurface.
IDirectDrawSurface:: IsLost
HRESULTIsLost ();
Определяет, была ли поверхностная память, связанная с DirectDrawSurface освобождена. Если память не была освобождена, этот метод возвратит DD_OK.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_INVALIDOBJECT DDERR_INVALIDPARAMS
IDirectDrawSurface:: Lock
HRESULTLock (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
ULONGRelease ();
Уменьшает счет ссылки объекта DirectDrawSurface на 1. Этот метод - часть интерфейса IUnknown, унаследованного DirectDraw.
Возвращает новый счет ссылки объекта.
Объект DirectDrawSurface освобождает себя, когда счет ссылки достигает 0. Используйте IDirectDrawSurface:: AddRef, чтобы увеличить счет ссылки объекта 1.
См. также IDirectDrawSurface:: AddRef, IDirectDrawSurface:: Initialize, IDirectDrawSurface:: QueryInterface
IDirectDrawSurface:: ReleaseDC
HRESULTReleaseDC (HDC hDC);
Выпускает hDC, предварительно полученный методом IDirectDrawSurface:: GetDC.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_GENERIC DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS DDERR_SURFACELOST
IDirectDrawSurface:: Restore
HRESULTRestore ();
Восстанавливает потерянную поверхность. Это происходит, когда поверхностная память, связанная с объектом 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
HRESULTUpdateOverlay (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 keydwColorSpaceLowValue = RGBQUAD(255,128,128);
dwColorSpaceHighValue = RGBQUAD(255,128,128);
IUnknown
Все интерфейсы COM получены из интерфейса, называемого IUnknown. Интерфейс IUnknown обеспечивает DirectX контролем над сроком службы объекта, и способностью управлять многократными интерфейсами. IUnknown имеет только три метода:AddRef, который увеличивает счет ссылки объекта на 1, когда интерфейс или прикладная программа привязывает себя к объекту.
Release, который декрементирует счет ссылки объекта на 1. Когда счет достигает 0, объект освобожден.
QueryInterface, который делает запрос объекта относительно особенностей, которые объект поддерживает, возвращает указатель на специфический интерфейс.
AddRef и Release устанавливают счет ссылки специфического объекта. Например, если Вы создаете объект DirectDrawSurface, счет ссылки объекта увеличен на 1. Каждый раз функция возвращает указатель на интерфейс для того объекта, она должна затем вызвать AddRef через тот указатель, чтобы увеличить счет ссылки. Все обращения AddRef должны быть согласованы с обращением Release. Прежде, чем указатель может быть разрушен, Вы должны вызвать Release через тот указатель. Как только счет ссылки специфического объекта достигает 0, объект разрушается, и все интерфейсы к объекту затем недопустимы.
QueryInterface определяет, поддерживает ли объект специфический интерфейс. Если интерфейс поддерживается, QueryInterface возвращает указатель на этот специфический интерфейс. Вы можете затем использовать методы, содержащиеся в том интерфейсе, чтобы связаться с объектом. Если QueryInterface успешно возвращает указатель на интерфейс, он неявно вызывает AddRef, чтобы увеличить счет ссылки, так что ваша прикладная программа должна вызвать Release для уменьшения счета ссылки перед разрушением указателя на интерфейс.
Изменение режимов и исключительного доступа
Режимы дисплея могут быть изменены, используя метод IDirectDraw2:: SetDisplayMode. Режимы могут быть изменены любой прикладной программой, совместно использующей плату дисплея.Исключительный режим DirectDraw не запрещает другим прикладным программам распределение DirecDrawSurfaces, и не исключает их использования DirectDraw или GDI. Он предотвращает изменение режима дисплея или палитры.
Создание DirectDraw объектов с использованием CoCreateInstance
Вы можете создавать объекты DirectDraw с помощью CoCreateInstance или IDirectDraw::Initialize так же как и функцией DirectDrawCreate. Следующие шаги описывают, как создать объект DirectDraw:
1 Инициализируйте COM в начале вашей прикладной программы, используя CoInitialize (NULL).
if
(FAILED (CoInitialize (NULL)))
return
FALSE;
2 Создайте ваш объект DirectDraw используя CoCreateInstance
и IDirectDraw::Initialize.
ddrval = CoCreateInstance (&CLSID_DirectDraw,
Карты Текстуры
В DirectX 2, карты текстуры могут быть распределены в памяти системы, использующей HEL. Распределяя поверхность текстуры , определяют флажок DDSCAPS_TEXTURE в члене ddsCaps поверхностного описания, переданного методу IDirectDraw::CreateSurface.HEL поддерживает широкий диапазон форматов пикселя текстуры . Следующая таблица описывает эти форматы. Столбец «Масок» содержит красные, зеленые, синие, и альфа маски для каждого набора флажков формата пикселя и разряды.
| Pixel Format Flags | Bit Depth | Masks | |||
| DDPF_RGB | | 1 | R: 0x00000000 | |||
| DDPF_PALETTEINDEXED1 | G: 0x00000000 | ||||
| B: 0x00000000 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | | 1 | R: 0x00000000 | |||
| DDPF_PALETTEINDEXED1 | | G: 0x00000000 | ||||
| DDPF_PALETTEINDEXEDTO8 | B: 0x00000000 | ||||
| A: 0x00000000 | |||||
| DDPF_RGB | | 2 | R: 0x00000000 | |||
| DDPF_PALETTEINDEXED2 | G: 0x00000000 | ||||
| B: 0x00000000 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | | 2 | R: 0x00000000 | |||
| DDPF_PALETTEINDEXED2 | | G: 0x00000000 | ||||
| DDPF_PALETTEINDEXEDTO8 | B: 0x00000000 | ||||
| A: 0x00000000 | |||||
| DDPF_RGB | | 4 | R: 0x00000000 | |||
| DDPF_PALETTEINDEXED4 | G: 0x00000000 | ||||
| B: 0x00000000 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | | 4 | R: 0x00000000 | |||
| DDPF_PALETTEINDEXED4 | | G: 0x00000000 | ||||
| DDPF_PALETTEINDEXEDTO8 | B: 0x00000000 | ||||
| A: 0x00000000 | |||||
| DDPF_RGB | | 8 | R: 0x00000000 | |||
| DDPF_PALETTEINDEXED8 | G: 0x00000000 | ||||
| B: 0x00000000 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | 8 | R: 0x000000E0 | |||
| G: 0x0000001C | |||||
| B: 0x00000003 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | | 16 | R: 0x00000F00 | |||
| DDPF_ALPHAPIXELS | G: 0x000000F0 | ||||
| B: 0x0000000F | |||||
| A: 0x0000F000 | |||||
| DDPF_RGB | 16 | R: 0x0000F800 | |||
| G: 0x000007E0 | |||||
| B: 0x0000001F | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | 16 | R: 0x0000001F | |||
| G: 0x000007E0 | |||||
| B: 0x0000F800 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | 16 | R: 0x00007C00 | |||
| G: 0x000003E0 | |||||
| B: 0x0000001F | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | | 16 | R: 0x00007C00 | |||
| DDPF_ALPHAPIXELS | G: 0x000003E0 | ||||
| B: 0x0000001F | |||||
| A: 0x00008000 | |||||
| DDPF_RGB | 24 | R: 0x00FF0000 | |||
| G: 0x0000FF00 | |||||
| B: 0x000000FF | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | 24 | R: 0x000000FF | |||
| G: 0x0000FF00 | |||||
| B: 0x00FF0000 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | 32 | R: 0x00FF0000 | |||
| G: 0x0000FF00 | |||||
| B: 0x000000FF | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | 32 | R: 0x000000FF | |||
| G: 0x0000FF00 | |||||
| B: 0x00FF0000 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | | 32 | R: 0x00FF0000 | |||
| DDPF_ALPHAPIXELS | G: 0x0000FF00 | ||||
| B: 0x000000FF | |||||
| A: 0xFF000000 | |||||
| DDPF_RGB | | 32 | R: 0x000000FF | |||
| DDPF_ALPHAPIXELS | G: 0x0000FF00 | ||||
| B: 0x00FF0000 | |||||
| A: 0xFF000000 |
Форматы, показанные в предыдущей таблице могут быть созданы HEL в памяти системы. DirectDraw драйвер устройства для 3D плат дисплея может создавать текстуры других форматов в памяти дисплея. Такой драйвер должен экспортировать флажок DDSCAPS_TEXTURE, чтобы указать, что может создавать текстуры, и должен быть готов обработать DirectDraw HAL callback CanCreateSurface, чтобы проверить поверхностное описание для карты текстуры.
Краткий обзор
Относительно DirectDrawВведение в DirectDraw
Архитектурный краткий обзор
Использование DirectDraw
Использование DirectDrawSurface
Использование DirectDrawPalette
Использование DirectDrawClipper
Поддержка 3D поверхностей
Интеграция Direct3D с DirectDraw
Ссылка
Функции
Callback Функции
Интерфейс IDirectDraw
Интерфейс IDirectDrawSurface
Интерфейс IDirectDrawPalette
Интерфейс IDirectDrawClipper
Структуры
Возвращаемые значения
LpDDBltFx
Адрес структуры DDBLTFX, определяющей дополнительные эффекты блиттинга.LpdwCaps
Флажки dwPalCaps члена структуры DDCAPS, которые определяют возможности палитры.Mipmaps
В DirectX 2, DirectDraw поддерживает поверхности текстуры mipmapped. Mipmap - последовательность текстур, каждая из которых - прогрессивно более низкая разрешающая способность, предварительно фильтрованное представление того же самого изображения. Mipmapping - в вычислительном отношении дешевый путь улучшения качества представленных текстур. Каждое изображение или предварительно фильтровано, или уровень, или мощность в mipmap в два меньшее чем предыдущий уровень. В DirectDraw, mipmaps представляется как цепочка присоединенных поверхностей. Самая высокая текстура разрешающей способности - в главе цепочки и имеет, как присоединение, следующий уровень mipmap, который имеет, в свою очередь, присоединяется, которое является следующим уровнем в mipmap, и так далее до самого низкого уровня разрешающей способности mipmap.Чтобы создавать поверхность, представляющую одиночный уровень mipmap, определите флажок DDSCAPS_MIPMAP в поверхностном описании, переданном к IDirectDraw:: CreateSurface. Так как mipmap - тоже текстуры, флажок DDSCAPS_TEXTURE должен также быть определен. Возможно создать каждый уровень вручную и формировать цепочку IDirectDrawSurface:: AddAttachedSurface. Однако, IDirectDraw:: CreateSurface метод может использоваться, чтобы формировать всю mipmap цепочку в одиночной операции.
Следующий пример показывает формирование цепочки пять mipmap уровней размером 256ґ256, 128ґ128, 64ґ64, 32ґ32 и 16ґ16.
DDSURFACEDESC ddsd;
LPDIRECTDRAWSURFACE lpDDMipMap;
ZeroMemory(&ddsd, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_MIPMAPCOUNT;
ddsd.dwMipMapCount = 5;
ddsd.ddsCaps.dwCaps = DDSCAPS_TEXTURE |
Многочисленные объекты DirectDraw в процессе
DirectDraw позволяет процессу вызывать функцию DirectDrawCreate много раз по мере необходимости. Уникальный и независимый интерфейс будет возвращен для каждого обращения. Каждый объект DirectDraw может использоваться по желанию; никаких зависимостей между объектами не имеется. Каждый объект ведет себя точно так, как если бы он был создан двумя различными процессами.Так как объекты DirectDraw независимы, объекты DirectDrawSurface, DirectDrawPalette, и DirectDrawClipper, созданные со специфическим объектом DirectDraw не должны использоваться с другими объектами DirectDraw, потому что эти объекты автоматически разрушаются , когда объект разрушается объект DirectDraw. Если они используются с другим объектом DirectDraw, они могут прекратить работать, если первоначальный объект разрушен.
Исключение - объекты DirectDrawClipper, созданные функцией DirectDrawCreateClipper. Эти объекты независимы от любого специфического объекта DirectDraw и могут использоваться с одним или большим количеством объектов DirectDraw.
Поддержка для высоких разрешающих способностей и TRUE Color цветов
DirectDraw поддерживает все экранные разрешающие способности и число цветов , поддерживаемые драйвером устройства дисплея. DirectDraw позволяет прикладной программе изменять режим на любой поддерживаемый драйвером дисплея компьютера, включая 24- и 32-bpp режимы.
DirectDraw также поддерживает блиттинг 24- и 32-bpp поверхностей аппаратным уровенем эмуляции (HEL). Если драйвер устройства дисплея поддерживает блиттинг в этих разрешающих способностях, то будут использоваться аппаратные средства. Иначе, будет использоваться HEL.
Windows 95 позволяет пользователю определять тип используемого монитора. DirectDraw проверяет режимы дисплея.. Если определено, что запрошенный режим не совместим с монитором, IDirectDraw2:: SetDisplayMode будет возвращать ошибку. Только режимы, поддерживаемые установленным монитором перечисяются в методе IDirectDraw2:: EnumDisplayModes.
Модель компонентных объектов СОM
Многие API в DirectX 2 SDK составлены из объектов и интерфейсов, основанных на модели компонентных объектов (COM). COM - база для основанной на объектах системы, которая сосредотачивается на повторном использовании интерфейсов и лежит в основе программирования OLE. Это - также спецификация интерфейса из которой может быть сформировано любое число интерфейсов . Это - объектная модель на уровне операционной системы.Многие DirectX 2 API установлены как набор объектов OLE. Объект может рассматриваться черным ящиком, который представляет аппаратные средства и требует связи с прикладными программами через интерфейс. Команды, посланные к и от объекта с помощью интерфейса COM называются методами. Например, метод IDirectDraw:: GetDisplayMode послан через интерфейс IDirectDraw, чтобы получить текущий режим дисплея из объекта DirectDraw.
Объекты могут связываться с другими объектами во время выполнения и использовать реализацию интерфейсов, обеспечиваемых другими объектами. Если Вы знаете, что объект - объект OLE, и какие интерфейсы этот объект поддерживает, ваша прикладная программа, или другой объект, может определять, какие услуги первый объект может выполнить. Один из методов, унаследованных всеми объектами OLE, называется QueryInterface, позволяет Вам определять то, какие интерфейсы поддержаны объектом и создает указатели на эти интерфейсы.
Модели использования основной поверхности
DirectDraw имеет простую совместно используемую модель. Память дисплея общедоступнный ресурс. Если режим изменен, все поверхности, сохраненные в памяти дисплея потеряются(для большего количества информации, см. Потеря поверхности).DirectDraw неявно создает GDIPrimarySurface, это необходимо для DirectDraw,чтобы совместно использовать GDI. GDI - предоставленный распределенный доступ к основной поверхности. DirectDraw следит за поверхностной памятью, которую GDI распознает как основную поверхность. DirectDrawSurface, который обладает основной поверхностью GDI можно всегда получать используя метод IDirectDraw:: GetGDISurface.
GDI не разрешает кэшировать шрифты, кисти, и устройство-зависимые растры (DDBs) в памяти дисплея, управляемой DirectDraw. HAL должен зарезервировать необходимую память дисплея DIB драйвера перед описанием доступной памяти менедженром памяти DirectDraw или прежде, чем драйвер устройства дисплея может распределить свободную память для кэшируемых данных из программы управления динамической областью DirectDraw.
Названия методов интерфейса и синтаксис
Все методы интерфейса COM, описанные в этом документе используют C ++ имена классов. Это соглашение наименования используется для непротиворечивости, и различимости между методами, используемыми для различных объектов DirectX, которые используют то же самое имя, типа QueryInterface, AddRef, и Release. Это не подразумевает, что эти методы могут только использоваться с C ++.Кроме того, синтаксисом предусмотрено, что методы используют для непротиворечивости соглашения C ++ . Это не включает указатель this на интерфейс. Когда программирование происходит на C, указатель на интерфейс должен быть включен в каждый метод. Например, следующий пример показывает C ++ синтаксис для IDirectDraw:: GetCaps:
HRESULT GetCaps (LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps);
Тот же самый пример, использующий C синтаксис:
HRESULT
GetCaps (LPDIRECTDRAW lpDD,
LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps);
Параметр lpDD - указатель на структуру DirectDraw, которая представляет объект DirectDraw.
Новые типы палитры
В DirectX 2, DirectDraw поддерживает палитры с 1, 2, 4 битами в дополнение к 8 битной палитре, поддерживаемой предыдущей версией. Такие палитры могут быть созданы, определяя один из новых флажков возможности палитры: DDPCAPS_1BIT, DDPCAPS_2BIT, и DDPCAPS_4BIT. Соответственно флажки возможности были добавлены для поверхностных форматов пикселя: DDPF_PALETTEINDEXED1, DDPF_PALETTEINDEXED2, и DDPF_PALETTEINDEXED4.Палитра может только быть присоединена к поверхности только с соответствующим форматом пикселя. Например, 2 битная палитра, созданная с флажком DDPCAPS_1BIT может быть присоединена только к поверхности с 1 битом, созданной с форматом пикселя DDPF_PALETTEINDEXED1.
Кроме того, теперь возможно создать индексированные палитры. Индексированная палитра не содержит RGB цвета, но является индексами в массиве PALETTEENTRY некоторой целевой палитры. Таблица цвета индексированной палитры - массив 2, 4, 16, или 256 байтов, где каждый байт - индекс в некоторой неопределенной палитре адресата.
Чтобы создать индексированную палитру, определите флажок DDPCAPS_8BITENTRIES при вызове IDirectDraw:: CreatePalette. Например, чтобы создать индексированную палитру с 4 битами, определите DDPCAPS_4BIT | DDPCAPS_8BITENTRIES. При создании индексированной палитры, указатель на массив байтов передается как указатель на массив структур PALETTEENTRY. Указатель на массив байтов должен привестись к LPPALETTEENTRY при вызове IDirectDraw:: CreatePalette.
NULL);
Объект DirectDraw, связанный с новой поверхностью вызван параметром lpDD. Этот метод заполняет поверхностную структуру описания &ddsd и возвращает указатель на новую поверхность (&lpDDS).Вызвав IDirectDraw:: CreateSurface, Вы сначала опишите vtable объекта DirectDraw, затем опишите метод из vtable. Первый параметр в методе - ссылка к объекту DirectDraw, который был создан и вызывает метод.
Чтобы иллюстрировать различие между вызовом метода объекта COM в C и C ++, тот же самый метод на C ++ показывается ниже (C ++ неявно описывает указатель и передает его):
ret = lpDD- > CreateSurface (&ddsd, &lpDDS, NULL)
Чтобы получить текущий список методов, поддерживаемых макроопределениями, см. соответствующий файл заголовка для DirectX компонента, который Вы хотите использовать.
CLSCTX_ALL,
&IID_IDirectDraw,
&lpdd);
if
(! FAILED (ddrval))
dDdrval = IDirectDraw_Initialize (lpdd, NULL);
CLSID_DirectDraw - идентификатор DirectDraw класса объекта драйвера, и IID_IDirectDraw - часть интерфейса DirectDraw.lpdd - возвращенный объект DirectDraw. CoCreateInstance возвращает неинициализированный объект.
3 Прежде, чем Вы используете объект DirectDraw, Вы должны вызвать IDirectDraw:: Initialize. Этот метод берет параметр GUID драйвера, который функция DirectDrawCreate обычно использует (NULL в этом случае). Как только объект DirectDraw инициализирован, Вы можете использовать и разрушатть объект DirectDraw, как будто это было создано, используя функцию DirectDrawCreate. Если Вы не вызовете IDirectDraw::Initialize перед использованием одного из методов, связанных с объектом DirectDraw, произойдет ошибка DDERR_NOTINITIALIZED .
Перед закрытием прикладной программы, закроте COM , как показано ниже.
CoUnitialize ();
if( ddrval != DD_OK )
return;
ddrval = lpSurf->QueryInterface(
IID_IDirectDrawSurface2, (LPVOID
*)&lpSurf2);
if( ddrval != DD_OK )
return;
ddrval = lpSurf2->PageLock( 0 );
if( ddrval != DD_OK )
return;
ddrval = lpSurf2->PageUnlock( 0 );
if( ddrval != DD_OK )
return;
Интерфейс IDirectDrawSurface2 содержит все методы, обеспечиваемые интерфейсом IDirectDrawSurface, и имеет три новых метода: IDirectDrawSurface2:: GetDDInterface, IDirectDrawSurface2:: PageLock, и IDirectDrawSurface2:: PageUnlock.
Для большего количества информации относительно получения интерфейса IDirectDraw2, см. Интерфейс IDirectDraw2.
CLSCTX_ALL,
&IID_IDirectDrawClipper,
&lpClipper);
if
(!FAILED(ddrval))
ddrval = IDirectDrawClipper_Initialize(lpClipper,
lpDD, 0UL);
CLSID_DirectDrawClipper - идентификатор класса объекта DirectDrawClipper, IID_IDirectDrawClipper - в настоящее время поддерживаемый интерфейс и lpClipper - возвращенный объект ограничителя.
Ограничители, созданные механизмом класса должны быть инициализированы IDirectDrawClipper::Initialize прежде, чем Вы можете использовать объект. 0UL - параметр dwFlags, который в этом случае имеет значение 0, так как никакие флажки в настоящее время не поддержаны. В примере, показанном здесь, lpDD - объект DirectDraw, который обладает объект DirectDrawClipper. Однако, Вы могли бы задать NULL, который создаст независимый ограничитель (эквивалент созданию объекта DirectDrawClipper с использованием функции DirectDrawCreateClipper).
Перед закрытием прикладной программы, закройтей COM используя CoUninitialize, как показано ниже.
CoUnitialize ();
if
(FAILED(ddres))
...
ddres = lpDDSurface->QueryInterface(lpGuid,
&lpD3DDevice);
if
(FAILED(ddres))
...
Те же самые правила для счета ссылки и состояния срока службы для объектов (см. Интерфейс драйвера Direct3D ) предъявляются и к DirectDraw поверхностям и к Direct3D устройствам. Дополнительно, другие Direct3D интерфейсы устройства могут быть получены для той же самой DirectDraw поверхности. Это возможно, следовательно, одиночная DirectDraw поверхность может быть адресатом , и для ramp-основанного устройства и rgb-основанного устройства.
if
(FAILED(ddres))
...
ddres = lpDDSurface->QueryInterface(
IID_IDirect3DTexture, &lpD3DTexture);
if
(FAILED(ddres))
...
Те же самые правила для счета ссылки и состояния сроки службы, обсужденные для объектов (см. Интерфейс драйвера Direct3D ) прилагаются к текстурам Direct3D. Возможно использовать одиночный DirectDrawSurface, и как адресат представления и как текстуру.
Определение Color Key
Color key определен в формате пикселя поверхности. Если поверхность находится в формате с палитрой, color key определен как индекс или диапазон индексов. Если формат пикселя поверхности определен кодом FourCC, который описывает формат YUV, YUV color key определен тремя байтами младшего разряда, и в dwColorSpaceLowValue и dwColorSpaceHighValue членах структуры DDCOLORKEY. Самый младший байт по порядку имеет V данные, второй по порядку имеет U данные, и самый старший байт имеет Y данные. Метод IDirectDrawSurface:: SetColorKey имеет флажки, которые определяют, должен ли color key использоваться для оверлейных операций или операций блиттинга, и для кого он служит, для источника или адресата. Некоторые примеры следуют:Относительно DirectDraw
DirectDraw™ - компонент DirectX™ 2 SDK , который позволяет напрямую манипулировать памятью дисплея, аппаратными средствами блиттинга, аппаратными оверлеями, и переключающимися страницами. DirectDraw обеспечивает эти функциональные возможности при поддержкесовместимости с существующими для Microsoft Windows 95 прикладными программами и драйверами устройств.DirectX 2 SDK представляет Вам беспрецедентный уровень доступа к дисплею и звуковым аппаратным средствам, и в то же время изолирует Вас от специфических деталей аппаратных средств. DirectX 2 сформирован для быстродействия. В связм с этим DirectDraw - не графический интерфейс программирования прикладной программы высокого уровня (API).
DirectDraw для Windows 95 - интерфейс программного обеспечения, который обеспечивает прямой доступ к дисплею при поддержке совместимости с интерфейсом устройства графики Windows (GDI). DirectDraw обеспечивает аппаратно-независимые решения для игр и программного обеспечения Windows, типа пакетов 3D графики и цифровых кодер-декодеров видео, и позволяет получать доступ аппаратно-зависимым особенностям дисплея.
DirectDraw работает с широким спектром аппаратных средств дисплея, в пределах от простого SVGA до аппаратных реализацияй отсечения, протяжения, и не - rgb цветной поддержкой. Интерфейс разработан так, чтобы ваши прикладные программы могли запрашивать возможности основных аппаратных средств, а затем использовать их возможности так, как требуется.
DirectDraw обеспечивает следующие аппаратно-зависимые операции:
Поддерживает двойной буфер и переключаемые страницы.
Обеспечивает доступ и контроль над блиттингом платы дисплея.
Поддерживает 3D z-буфер.
Поддерживает аппаратные средства оверлеи с z-упорядочиванием.
Улучшает графическое качество, обеспечивая доступ к масштабирующим аппаратным средствам.
Обеспечивает одновременный доступ к стандартной и расширенной областям памяти дисплея.
Значение DirectDraw состоит в обеспечении аппаратно-зависимого доступа к памяти дисплея аппаратно-независимым способом. Ваша программа только распознает некоторые базисные зависимости устройства, которые являются стандартом аппаратных реализаций, типа RGB и YUV цветных форматов и шага между растровыми линиями. Вы не должны волноваться относительно специфических процедур вызова, требуемых, чтобы использовать блиттинг или управлять регистрами палитры. По существу, DirectDraw управляет памятью дисплея. При использовании DirectDraw, Вы можете управлять памятью дисплея с легкостью, используя полное преимущество блиттинга и возможностей декомпрессии различных типов аппаратных средств дисплея без зависимости от специфической части аппаратных средств.
DirectDraw представляет высококлассную графику на компьютерах под управлением Windows 95 и Windows NT.
Отсекаемые списки
Отсекаемые списки, управляются DirectDraw с использованием объекта DirectDrawClipper. DirectDrawClipper должен быть присоединен к любой поверхности. Программа обработки окна должна также быть присоединена к DirectDrawClipper, так как, когда DirectDraw модифицирует отсекаемый список DirectDrawClipper изменяется и отсекающий список окна.Хотя отсекающийся список видим из DirectDraw HAL, DirectDraw вызовет HAL только для блиттинга с прямоугольниками, которые в списке. Например, если верхний правый прямоугольник поверхности отсекался, и прикладная программа делает DirectDraw блиттинг поверхности на основную поверхность, DirectDraw заставит HAL делать два блиттинга. Первый - этоверхний левый угол поверхности, и второй - нижняя часть половины поверхности.
HAL рассматривает отсекающийся список для оверлеев только если оверлейные аппаратные средства могут поддерживать отсечение и если не активен color key адресата. Совместное использование ограничителей
В DirectX 2, ограничители могут быть разделены между поверхностями. Например, тот же самый ограничитель может быть установлен, и на передней и на обратной стороне буфера. Когда ограничитель присоединен к поверхности, используя метод IDirectDrawSurface:: SetClipper, поверхность увеличивает счет ссылки того ограничителя. Когда счет ссылки поверхности достигает 0, это будет декремент счет ссылки присоединенного ограничителя. Кроме того, если ограничитель отсоединяется из поверхности, вызывая DirectDrawSurface::SetClipper с указателем интерфейса ограничителя NULL, счет ссылки ограничителя поверхности будет десрементирован.
Оверлейный z-порядок
Оверлейный z-порядок определяет порядок, в котором оверлеи отсекают друг друга, допуская аппаратную систему спрайтов быть выполненной под DirectDraw. Оверлеи разработаны, чтобы быть в верху всех других экранных компонентов. Color key адресата воздействуют только на биты первичной поверхности.. Исходные color key работают на оверлее, не зависимо от наличия определенного z-порядока. Оверлеи, которые не имеют определенного z-порядка, ведут себя неопределенным способом когда записывается та же самая область на основной поверхности. Для оверлеев без определенного z-порядка принят z-порядок 0. Возможный z-порядок оверлеев начинается с 0, и вверх до 4 миллиардов. Оверлей с z-порядком 2 затенил бы оверлей с z-порядком 1. Оверлею не позволяется иметь тот же самый z-порядок как у другого оверлея.Палитровый режим с 8 битами
// индекс палитры 26 - color keydwColorSpaceLowValue = 26;
dwColorSpaceHighValue = 26;
Палитры и форматы пикселя
DirectDraw допускает создание большого количества палитр, которые могут быть присоединены к вне экранным поверхностям. Когда это выполнено, вне экранные поверхности больше совместно не используют палитру основной поверхности. Если создана вне экранная поверхность с форматом пикселя, отличным от основной поверхности, принимается, что аппаратные средства могут это использовать. Например, если была создана вне экранная поверхность с палитрой, в то время когда основная поверхность находится в цветном режиме с 16 битами, принимается, что blitter может преобразовывать палитровые поверхности в истинный цвет в течение операции блиттинга.DirectDraw поддерживает создание стандартных палитровых поверхностей с 8 битами, способных к показу 256 цветов, и двух видов палитровых поверхностей с 4 битами, способных к показу 16 цветов. Первый вид поверхности с 4 битами индексирован в истинную цветную таблицу палитры; второй вид индексирован в индексированную таблицу палитры основной поверхности. Этот второй тип палитры обеспечивает 50 процентов сжатия.
Если эти поверхности должны быть созданы, blitter должен быть способен к замене палитры в течение операции блиттинга. При блиттинге одной поверхности в другую, палитра игнорируется. Декодирование палитры выполнимо только к истинным цветным поверхностям, или когда палитра с 4 битами - индекс к индексу в палитре с 8 битами. Во всех других случаях, индексированная палитра - палитра адресата.
Растровые операции для палитровых поверхностей игнорируются. Изменение присоединенной палитры поверхности - очень быстрая операция. Вся три из этих поверхностей должны быть поддержаны как текстуры на 3D ускоренные аппаратные средства.
Поддержка форматов поверхностей для HEL
Следующая таблица показывает форматы пикселей для вне экранных простых поверхностей, поддерживаемых DirectX 2 HEL. Столбец «Масок» показывает красные, зеленые, синие, и алфавитные маски для каждого набора флажков формата пикселя и разрядной глубины изображения.| Pixel Format Flags | Bit Depth | Masks | |||
| DDPF_RGB | | 1 | R: 0x00000000 | |||
| DDPF_PALETTEINDEXED1 | G: 0x00000000 | ||||
| B: 0x00000000 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | | 2 | R: 0x00000000 | |||
| DDPF_PALETTEINDEXED2 | G: 0x00000000 | ||||
| B: 0x00000000 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | | 4 | R: 0x00000000 | |||
| DDPF_PALETTEINDEXED4 | G: 0x00000000 | ||||
| B: 0x00000000 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | | 8 | R: 0x00000000 | |||
| DDPF_PALETTEINDEXED8 | G: 0x00000000 | ||||
| B: 0x00000000 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | 16 | R: 0x0000F800 | |||
| G: 0x000007E0 | |||||
| B: 0x0000001F | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | 16 | R: 0x00007C00 | |||
| G: 0x000003E0 | |||||
| B: 0x0000001F | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | 24 | R: 0x00FF0000 | |||
| G: 0x0000FF00 | |||||
| B: 0x000000FF | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | 24 | R: 0x000000FF | |||
| G: 0x0000FF00 | |||||
| B: 0x00FF0000 | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | 32 | R: 0x00FF0000 | |||
| G: 0x0000FF00 | |||||
| B: 0x000000FF | |||||
| A: 0x00000000 | |||||
| DDPF_RGB | 32 | R: 0x000000FF | |||
| G: 0x0000FF00 | |||||
| B: 0x00FF0000 | |||||
| A: 0x00000000 |
В дополнение к обеспечению более широкого диапазона вне экранных поверхностных форматов, HEL также поддерживает поверхности, предназначенные для использования Direct3D, или другими 3D пакетами.
Потеря поверхностей
Поверхностная память, связанная с объектом DirectDrawSurface может быть освобождена,а объекты DirectDrawSurface, представляющие эти части поверхностной памяти могут быть не освобождены. Когда объект DirectDrawSurface теряет поверхностную память, многие методы возвратят значение DDERR_SURFACELOST и не выполнят никаких операций.Поверхности можно потерять, при изменении режима платы дисплея или при получении программой исключительного доступа к плате дисплея и освобождении ей всей поверхностной памяти, в настоящее время распределенной на плате. Метод IDirectDrawSurface::Restore восстановливает эти потерянные поверхности и повторно соединяет их с их объектами DirectDrawSurface.
Преобразование цвета и форматов
Не - rgb поверхностные форматы описаны кодами FourCC. Когда запрошен формат пикселя, если поверхность - не - rgb, будет установлен флажок DDPF_FOURCC , и член dwFourCC в структуре DDPIXELFORMAT будет иметь силу. Если FourCC код представляет формат YUV, флажок DDPF_YUV будет также установлен и члены dwYUVBitCount, dwYBits, dwUBits, dwVBits, и dwYUVAlphaBits будут использоваться, чтобы извлечь информацию из пикселей.Если формат RGB присутствует, флажок DDPF_RGB будет установлен и члены dwRGBBitCount, dwRBits, dwGBits, dwBBits, и dwRGBAlphaBits будут использоваться, чтобы извлечь информацию из пикселей. Флажок DDPF_RGB может быть установлен вместе с флажком DDPF_FOURCC, если описывается ненормативный формат RGB.
Для преобразования цвета и формата, существует два набора FourCC кодов. Один набор FourCC кодов представляет то, к чему способны аппаратные средства блиттинга; другой представляет то, к чему способны оверлейные аппаратные средства.
Причины для разработки DirectX программ
DirectX был разработан, чтобы обеспечить прикладные программы для Microsoft Windows быстродействующий, в реальном масштабе времени доступом к существующим аппаратным средствам на персональных компьютерных системах. DirectX обеспечивает непротиворечивый интерфейс между аппаратными изготовителями и Вами, разработчиком прикладной программы, таким образом уменьшая сложность установки и конфигурации при использовании преимуществ аппаратных средств.Одной из первичных причин для создания DirectX была необходимость поддержать разработку игр на платформе Windows. Большинство игр, разработанных для персонального компьютера сегодня основаны на MS DOS. Однако, при разработке MS DOS игр, Вы должны учитывать различие реализаций аппаратных средств для ряда плат, усложняющее программирование. Кроме того, разработка MS DOS игры может быть намного сложнее на персональном компьютере чем на игровой платформе, из-за унифицированного процессора, большого размера оперативной и постоянной памяти персонального компьютера.
Быстродействующая же Windows игра будет:
Успешно установлена.
Пользоваться преимуществом аппаратной акселерации, разработанной для улучшения эффективности.
Пользоваться преимуществом аппаратных и программных средств Windows, таких как Plug and Play.
Пользоваться преимуществом коммуникаций, встроенных в Windows.
Обеспечение стандартов для аппаратных акселераторов
Основные задачи DirectX 2 SDK состоят в том, чтобы обеспечить переход с MS DOS платформы , не ставя под угрозу эффективность MS-DOS или игровых платформ, и удалить препятствия доступа к аппаратным ресурсам персонального компьютера.
Другая важная цель состоит в том, чтобы обеспечить руководящие принципы для компаний, разработчиков аппаратных средств, основанные на создании обратной связи от разработчиков быстродействующих прикладных программ и независимых аппаратных продавцов (IHV). Следовательно, DirectX 2 SDK компоненты часто обеспечивают спецификации для аппаратных особенностей акселератора, которые еще не существуют. Во многих случаях, эти спецификации эмулированы в программном обеспечении. Возможности аппаратных средств должны быть сначала опрошены, и должны игнорироваться если они не поддерживаются.
Некоторые аппаратные средства дисплея появятся в ближайшем будущем:
Оверлеи. Оверлеи для переключения страниц будут работать внутри окна в графическом интерфейсе устройства (GDI). Переключение страниц - схема двойного буфера, используемая, чтобы отобразить фреймы на всем экране.
Двигатели спрайтов, используемые, чтобы делать наложение спрайтов проще.
Растяжение с интерполяцией. Растяжение меньшего фрейма на весь экран - эффективный способ сохранить оперативную память дисплея.
Альфа смешивание, используемое, чтобы смешать цвета на аппаратном уровне.
Трехмерные (3D) акселераторы с перспективно - правильными текстурами. Это позволяет текстурам отображаться на поверхности 3D; например, прихожие в замке, сгенерированные 3D могут быть покрыты текстурой с кирпичом и стенки будут иметь правильную перспективу.
Z-buffer для 3D графики .
2 МБ памяти дисплея как стандарт. 3D игры нуждаются по меньшей мере в этой оперативной памяти дисплея.
Стандарт сжатия, так что Вы сможете помещать большое количество данных в память дисплея. Этот стандарт будет использоваться для текстур, будет включать сжатие прозрачности, и будет очень быстр когда выполняется как в программном обеспечении так и в аппаратных средствах.
Звуковые аппаратные средства будут включать:
3D аудио расширение, которое обеспечивает размещение различных звуков. Это будет особенно эффективно с наушниками.
Встроенная память для звуковых плат.
Комбинированные аудио-видео платы совместно использующие встроенную память.
Кроме того, воспроизведение видео будет улучшено для аппаратных акселераторов, которые будут совместимы с DirectX 2 SDK. Одна из особенностей, которые будут поддержаны будущими выпусками DirectX 2 SDK - ускоренная аппаратными средствами декомпрессия YUV видео.
Так как некоторые методы ведут
Так как некоторые методы ведут себя несколько по-разному в этих интерфейсах, смешивание методов из IDirectDraw и IDirectDraw2 может вызывать непредсказуемые результаты. Вы должны использовать функции только из одного из этих интерфейсов одновременно; не используйте некоторые функции из IDirectDraw и функции из IDirectDraw2.Для большего количества информации относительно использования интерфейса IDirectDrawSurface2, см. Интерфейс IDirectDrawSurface2.
Если IDirectDrawSurface:: SetPalette вызывается несколько раз последовательно для той же самой поверхности с той же самой палитрой, ссылка на палитру, будет увеличена только однажды. Последующие обращения не будут воздействовать на счет ссылки палитры.
Операции блиттинга обращаются только к одиночному уровню в mipmap цепочке. Для блиттинга всей цепочки mipmap, каждый уровень должен быть обработан отдельно.
Метод IDirectDrawSurface::Flip переключит все уровни mipmap из уровня, присоединненного к самому низкому уровню в карте. Поверхность адресата может также обеспечивать, что все уровни в mipmap переключатся на обратный буфер во всей цепочке. Этот обратный буфер соответствует обеспеченной отмене. Например, если третий обратный буфер в переключающейся цепочке обеспечен, все уровни в mipmap переключатся на третий обратный буфер.
Число уровней в mipmap цепочке сохранено явно. Когда поверхностное описание mipmap получено (используя IDirectDrawSurface:: Lock или IDirectDrawSurface:: GetSurfaceDesc), dwMipMapCount член будет содержать число уровней в mipmap, включая верхний уровень. Для других уровней в карте, dwMipMapCount определит число уровней от той карты до самой маленькой карты в цепочке.
Фактическая интерпретация значения глубины - специфична для 3D просчета.
Эффективность операционной системы может быть ухудшена, если слишком много памяти блокировано.
Возвращает DD_OK если успешно, или одно из следующих значений ошибки:
DDERR_CANTPAGELOCK DDERR_INVALIDOBJECT
DDERR_INVALIDPARAMS DDERR_SURFACELOST
dwFlags
Этот параметр не используется в это время и должен быть установлен в 0.
Этот метод работает только на поверхностях системной памяти; не будет блокироваться страница поверхности памяти дисплея или эмулированной основной поверхности. Если этот метод обратился к поверхности памяти дисплея,он не будет делать ничего за исключением возвращения DD_OK.
Чтобы гарантировать согласие с COM, этот метод - не, часть интерфейса IDirectDrawSurface, но принадлежит интерфейсу IDirectDrawSurface2. Чтобы использовать этот метод, Вы должны сначала сделать запрос для интерфейса IDirectDrawSurface2. Для большего количества информации, см. Интерфейс IDirectDrawSurface2.
Release
Разнообразные GetAvailableVidMemВсе интерфейсы COM наследуют методы интерфейса IUnknown, которые перечислены в группе “IUnknown” выше. Эти три метода позволяют дополнительным интерфейсам быть добавленными к объекту DirectDrawClipper без воздействия на функциональные возможности первоначального интерфейса.
Возможности палитры GetCaps
Входы палитры GetEntries
ReleaseDC
Переключение поверхностей FlipIUnknown AddRef
Restore
Управление поверхностями AddAttachedSurfaceв настоящее время видимая пользователю.
Основная поверхность - поверхность, в настоящее время видимая пользователю. Когда Вы создаете основную поверхность, Вы фактически создаете объект DirectDrawSurface, чтобы обратиться к уже существующей поверхности, используемой GDI. Следовательно, в то время как все другие типы поверхностей требуют значений dwHeight и dwWidth, основная поверхность не должна иметь их определенными, даже если Вы знаете, что они - те же самые размеры как у существующей поверхности.Члены структуры DDSURFACEDESC (ddsd ниже) подготовленные к созданию основной поверхности.
DDSURFACEDESC ddsd;
ddsd.dwSize = sizeof( ddsd );
//Tell DDRAW, которые поля имеют силу
ddsd.dwFlags = DDSD_CAPS;
//Ask для первичной поверхности
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
Создайте простую вне экранную поверхность
Создайте простую вне экранную поверхность типа, который мог бы использоваться, чтобы кэшировать растры, которые будут позже составлены для блиттинга. Высота и ширина требуется для всех поверхностей за исключением основной поверхности. Члены в структуре DDSURFACEDESC (ddsd ниже) подготовлены к созданию простой вне экранной поверхности.DDSURFACEDESC ddsd;
ddsd.dwSize = sizeof( ddsd );
//Tell DDRAW, которые поля имеют силу
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
//Ask для простой off-screen поверхности, установленной по размеру
//100 100 пикселями
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
dwHeight = 100;
dwWidth = 100;
DirectDraw создает эту поверхность в памяти дисплея, если это не будет успешно, тогда поверхность будет создана в памяти системы. Если поверхность была создана, используйте флажки DDSCAPS_SYSTEMMEMORY или DDSCAPS_VIDEOMEMORY в dwCaps, чтобы определить где, в памяти системы или памяти дисплея, соответственно. Ошибка возвращается, если поверхность не может быть создана в определенном расположении.
DirectDraw также учитывает создание сложных поверхностей. Сложная поверхность - набор поверхностей, созданных с одиночным обращением к IDirectDraw:: CreateSurface. Если флажок DDSCAPS_COMPLEX установлен в IDirectDraw:: CreateSurface, одна или много неявных поверхностей будут созданы DirectDraw в дополнение к поверхности, явно определенной. Сложные поверхности управляются вместе,одиночное обращение к IDirectDraw::Release разрушит все поверхности в структуре, и одиночное обращение к IDirectDrawSurface::Restore восстановит их все.
Одна из наиболее полезных сложных
Одна из наиболее полезных сложных поверхностей, которые Вы можете определять, составлена из первичной поверхности и одного или многих обратных буферов, которые формируют переключающуюся поверхность. Члены в структуре DDSURFACEDESC (ddsd ниже) подготовлены к сложному поверхностному созданию и заполнены, чтобы описать переключающуюся поверхность, которая имеет один обратный буфер.DDSURFACEDESC ddsd;
ddsd.dwSize = sizeof( ddsd );
//Tell DDRAW which fields are valid
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
//Ask для первичной поверхности с одиночным
//back буфер
ddsd.ddsCaps.dwCaps = DDSCAPS_COMPLEX | DDSCAPS_FLIP |
DDSCAPS_PRIMARYSURFACE;
ddsd.dwBackBufferCount = 1;
Пример создает поверхность с двойным буфером и переключающимися страницами, a одиночное обращение к IDirectDrawSurface::Flip обменивает поверхностную память основной поверхности с обратным буфером. Если BackBufferCount определен значением 2, будут созданы два обратных буфера, и каждое обращение к IDirectDrawSurface:: Flip вращает поверхности по кругу, обеспечивая тройную буфернуюпереключающуюся среду.
SetClipper
Описание поверхностей GetPixelFormatSetEntries
Все интерфейсы COM наследуют методы интерфейса IUnknown, которые перечислены в группе “IUnknown” выше. Эти три метода позволяют дополнительным интерфейсам быть добавленными к объекту DirectDrawPalette без воздействия на функциональные возможности первоначального интерфейса.SetPalette
Все интерфейсы COM наследуют методы интерфейса IUnknown, которые перечислены в группе “IUnknown” выше. Эти три метода позволяют дополнительным интерфейсам быть добавленными к объекту DirectDrawSurface без воздействия на функциональные возможности первоначального интерфейса.Соглашения
Используются следующие соглашения .Соглашение Означает
Курсивный текст Обозначает значение или переменную. Вы должны обеспечить фактическое значение. Например, утверждение SetCursorPos (X, Y) требует, чтобы Вы заменили значениями параметров X и Y.
[] Включают дополнительные параметры.
| Отделяет или / или выбор.
... Определяет, что предшествующая единица может быть повторена.
. Представляет опущенную часть типовой прикладной программы.
.
.
Кроме того, некоторые типичные соглашения используются, чтобы помочь Вам понять этот материал.
Соглашение Означающий
МАЛЕНЬКИЕ ЗАГЛАВНЫЕ БУКВЫ Указывают имена клавиш, последовательностей клавиш - типа ALT + ПРОБЕЛ.
ПОЛНЫЕ ЗАГЛАВНЫЕ БУКВЫ Указывают большинство типов и имен структур, которые также выделяются полужирными символами, и константы.
Monospace Примеры кода и синтаксиса.
Сolor Keying
Поддерживается исходный и адресуемый color key для блиттинга и оверлеев. Для обоих типов color key, может быть установлен цвет или цветовой диапазон.Исходный color key определяет цвет или цветовой диапазон, который при блиттинге не будет скопирован, или, в случае оверлея, не будет видимым в адресате. Адресуемый color key определяет цвет или цветовой диапазон,который при блиттинге будет заменен или, в случае оверлея, заменен на адресате. Исходный color key определяет то, что может и не может читаться из исходной поверхности. Адресуемый colot key определяет то, что может и не может быть записано, или заменено в поверхности адресата. Если поверхность адресата имеет color key, то только пикселы, цвет которых соответствует color key будут изменены на адресуемой поверхности.
Некоторые аппаратные средства поддерживают только YUV формат пикселя. Это обычно происходит, потому что YUV формат используется для видео, и, из-за ошибок квантования в течение преобразования, фон - не один цвет.
Основание должно быть приведено к одиночному цвету, когда только возможно, независимо от формата пикселя.
Совместное использование палитр
В DirectX 2, палитры могут быть разделены между поверхностями. Та же самая палитра может быть установлена на передней и обратной стороне буфераили разделяться между поверхностями текстуры. Когда палитра присоединена к поверхности методом IDirectDrawSurface:: SetPalette, поверхность увеличивает счет ссылки той палитры. Когда счет ссылки поверхности достигает 0, это будет декремент ссылки присоединенной палитры. Кроме того, если палитра отсоединяется из поверхности, вызывая IDirectDrawSurface:: SetPalette с указателем интерфейса палитры NULL, счет ссылки палитры поверхности будет декрементирован.Типовые прикладные программы
Типовые прикладные программы, которые показывают компоненты Windows 95 DirectX 2 SDK, размещены в каталоге SDK\SAMPLES.Типы объектов DirectDraw
Объект DirectDraw представляет устройство дисплея. Может иметься один объект DirectDraw для каждого логического устройства дисплея в операции. Среда разработки прикладной программы, например, могла бы иметь два монитора, прикладная программа использует DirectDraw и среда разработки использует GDI.Объект DirectDrawSurface представляет собой линейную область памяти дисплея, к которой можно непосредственно обращаться и управлять. Эти адреса памяти дисплея могут указывать на видимую память буфера изображения (основная поверхность) или на невидимые буферы (внеэкранные или оверлейные поверхности). Эти невидимые буфера обычно находятся в памяти дисплея, но могут быть созданы в памяти системы если это требуется в соответствии c аппаратным проектом или если DirectDraw делает программную эмуляцию. Оверлей - поверхность, которая выводится без изменения затененных пикселов. Оверлей и спрайт - синонимы. Карта текстуры - поверхность, которая может быть обернута вокруг 3D поверхности.
Объект DirectDrawPalette представляет 16 или 256 цветные палитры. Палитры предусмотрены для текстуры, внеэкранной поверхности, и оверлейной поверхности, для которых не требуются, иметь ту же самую палитру как первичную поверхность.
Объект DirectDraw создает объекты DirectDrawSurface, DirectDrawPalette, и DirectDrawClipper. Объекты DirectDrawPalette и DirectDrawClipper должны быть присоединены к объектам DirectDrawSurface, на которые они воздействуют. DirectDrawSurface может отказаться от присоединения DirectDrawPalette.Это не необычно, потому что большинство аппаратных средств не поддерживают много палитр.
Точность операций с плавающей запятой
DirectX архитектура использует для операций с плавающей запятой точность 53. Если ваша прикладная программа должна изменить эту точность, то она должна восстановить значение обратно в 53, когда вычисления закончены. Иначе, компоненты системы, которые зависят от значения по умолчанию, не будут работать.Различия Между Game SDK и DirectX 2 SDK
DirectX 2 SDK обеспечивает большее количество услуг, большее количество нововведений для разработки, чем Game SDK. Хотя DirectX 2 SDK содержит дополнительные функции и услуги, все прикладные программы написанные в Game SDK, компилируются и выполняются без изменений.
Этот раздел содержит некоторые из наиболее значительных различий и усовершенствований DirectX 2 SDK над Game SDK. Цель этого раздела состоит в том, чтобы помочь разработчикам, знакомым с Game SDK, быстро рассмотреть несколько важных частей DirectX SDK, которые значительно различны.
Typedef struct _DDBLTBATCH {
LPRECT lprDest;LPDIRECTDRAWSURFACE lpDDSSrc;
LPRECT lprSrc;
DWORD dwFlags;
LPDDBLTFX lpDDBltFx;
} DDBLTBATCH, FAR * LPDDBLTBATCH;
Подготавливает операции блиттинга для метода IDirectDrawSurface:: BltBatch.
lprDest
Адрес структуры RECT, которая определяет адресата для блиттинга.
lpDDSSrc
Адрес DirectDrawSurface, который будет источником блиттингаt.
lprSrc
Адрес структуры RECT, которая определяет исходный прямоугольник блиттинга.
dwFlags
Определяет дополнительные флажки управления.
Typedef struct _DDBLTFX {
DWORD dwSize;DWORD dwDDFX;
DWORD dwROP;
DWORD dwDDROP;
DWORD
dwRotationAngle;
DWORD
dwZBufferOpCode;
DWORD
dwZBufferLow;
DWORD
dwZBufferHigh;
DWORD
dwZBufferBaseDest;
DWORD
dwZDestConstBitDepth;
union
{
DWORD
dwZDestConst;
LPDIRECTDRAWSURFACE lpDDSZBufferDest;
};
DWORD
dwZSrcConstBitDepth;
union
{
DWORD
dwZSrcConst;
LPDIRECTDRAWSURFACE lpDDSZBufferSrc;
};
DWORD
dwAlphaEdgeBlendBitDepth;
DWORD
dwAlphaEdgeBlend;
DWORD
dwReserved;
DWORD
dwAlphaDestConstBitDepth;
union
{
DWORD
dwAlphaDestConst;
LPDIRECTDRAWSURFACE lpDDSAlphaDest;
};
DWORD
dwAlphaSrcConstBitDepth;
union
{
DWORD
dwAlphaSrcConst;
LPDIRECTDRAWSURFACE lpDDSAlphaSrc;
};
union
{
DWORD
dwFillColor;
DWORD
dwFillDepth;
LPDIRECTDRAWSURFACE lpDDSPattern;
};
DDCOLORKEY ddckDestColorkey;
DDCOLORKEY ddckSrcColorkey;
} DDBLTFX, FAR * LPDDBLTFX;
Передает растровые операции, эффекты в метод IDirectDrawSurface:: Blt. А также часть структуры DDBLTBATCH, используемой с IDirectDrawSurface:: BltBatch.
dwSize
Размер структуры. Должен быть инициализировано прежде, чем структура используется.
dwDDFX
Определяет тип операций FX.
Typedef struct _DDCAPS {
DWORDdwSize;
DWORD
dwCaps;
DWORD
dwCaps2;
DWORD
dwCKeyCaps;
DWORD
dwFXCaps;
DWORD
dwFXAlphaCaps;
DWORD
dwPalCaps;
DWORD
dwSVCaps;
DWORD
dwAlphaBltConstBitDepths;
DWORD
dwAlphaBltPixelBitDepths;
DWORD
dwAlphaBltSurfaceBitDepths;
DWORD
dwAlphaOverlayConstBitDepths;
DWORD
dwAlphaOverlayPixelBitDepths;
DWORD
dwAlphaOverlaySurfaceBitDepths;
DWORD
dwZBufferBitDepths;
DWORD dwVidMemTotal;
DWORD dwVidMemFree;
DWORD
dwMaxVisibleOverlays;
DWORD
dwCurrVisibleOverlays;
DWORD
dwNumFourCCCodes;
DWORD
dwAlignBoundarySrc;
DWORD
dwAlignSizeSrc;
DWORD
dwAlignBoundaryDest;
DWORD
dwAlignSizeDest;
DWORD
dwAlignStrideAlign;
DWORD
dwRops [DD_ROP_SPACE];
DDSCAPS ddsCaps;
DWORD
dwMinOverlayStretch;
DWORD
dwMaxOverlayStretch;
DWORD
dwMinLiveVideoStretch;
DWORD
dwMaxLiveVideoStretch;
DWORD
dwMinHwCodecStretch;
DWORD
dwMaxHwCodecStretch;
DWORD
dwReserved1;
DWORD
dwReserved2;
DWORD
dwReserved3;
DWORD
dwSVBCaps;
DWORD
dwSVBCKeyCaps;
DWORD
dwSVBFXCaps;
DWORD
dwSVBRops [DD_ROP_SPACE];
DWORD
dwVSBCaps;
DWORD
dwVSBCKeyCaps;
DWORD
dwVSBFXCaps;
DWORD
dwVSBRops [DD_ROP_SPACE];
DWORD
dwSSBCaps;
DWORD
dwSSBCKeyCaps;
DWORD
dwSSBCFXCaps;
DWORD
dwSSBRops [DD_ROP_SPACE];
DWORD
dwReserved4;
DWORD
dwReserved5;
DWORD
dwReserved6;
} DDCAPS, FAR * LPDDCAPS;
Представляет возможности аппаратных средств, предсставленных через объект DirectDraw. Содержит структуру DDSCAPS, используемую в этом контексте, чтобы описать то, какие виды DirectDrawSurfaces могут быть созданы. Не возможно одновременно создать все поверхности, описанные этими возможностями.
dwSize
Размер структуры. Должно быть инициализировано прежде, чем структура используется.
dwCaps
Определяет драйвер-специфические возможности.
Typedef struct _DDCOLORKEY {
DWORDdwColorSpaceLowValue;
DWORD
dwColorSpaceHighValue;
} DDCOLORKEY, FAR * LPDDCOLORKEY;
Описывает color key или color space источника или адресата. Color key определяется если начальное и конечное значение одинаковое.
dwColorSpaceLowValue
Начальное значение, включительно, цветного диапазона, который должен использоваться как color key.
dwColorSpaceHighValue
Высоко значение, включительно, цветного диапазона, который должен использоваться как color key.
Typedef struct _DDOVERLAYFX {
DWORD dwSize;DWORD dwAlphaEdgeBlendBitDepth;
DWORD dwAlphaEdgeBlend;
DWORD dwReserved;
DWORD dwAlphaDestConstBitDepth;
union
{
DWORD dwAlphaDestConst;
LPDIRECTDRAWSURFACE lpDDSAlphaDest;
};
DWORD dwAlphaSrcConstBitDepth;
union
{
DWORD dwAlphaSrcConst;
LPDIRECTDRAWSURFACE lpDDSAlphaSrc;
};
DDCOLORKEY dckDestColorkey;
DDCOLORKEY dckSrcColorkey;
DWORD dwDDFX;
DWORD dwFlags;
} DDOVERLAYFX, FAR * LPDDOVERLAYFX;
Проход отменяет информацию метода IDirectDrawSurface:: UpdateOverlay.
dwSize
Размер структуры. Должно быть инициализировано прежде, чем структура используется.
dwAlphaEdgeBlendBitDepth
Разрядная глубина, используемая, чтобы определить константу для края alpha смешивания.
dwAlphaEdgeBlend
Константа, чтобы использовать как alpha для края смешивания.
dwReserved
Резервируется для будущего использования.
dwAlphaDestConstBitDepth
Разрядная глубина, используемая, чтобы определить константу alpha для адресата.
dwAlphaDestConst
Константа, чтобы использовать как канал alpha для адресата.
lpDDSAlphaDest
Адрес поверхности, чтобы использовать как канал alpha для адресата.
dwAlphaSrcConstBitDepth
Разрядная глубина, используемая, чтобы определить константу alpha для источника.
dwAlphaSrcConst
Константа, чтобы использовать как канал alpha для источника.
lpDDSAlphaSrc
Адрес поверхности, чтобы использовать как канал alpha для источника.
dckDestColorkey
Отмена сolor key адресата.
dckSrcColorkey
Отмена исходного color key.
dwDDFX
Оверлейные FX флаги.
Typedef struct _DDPIXELFORMAT {
DWORD dwSize;DWORD dwFlags;
DWORD
dwFourCC;
union
{
DWORD
dwRGBBitCount;
DWORD
dwYUVBitCount;
DWORD
dwZBufferBitDepth;
DWORD
dwAlphaBitDepth;
};
union
{
DWORD
dwRBitMask;
DWORD
dwYBitMask;
};
union
{
DWORD
dwGBitMask;
DWORD
dwUBitMask;
};
union
{
DWORD
dwBBitMask;
DWORD
dwVBitMask;
};
union
{
DWORD
dwRGBAlphaBitMask;
DWORD
dwYUVAlphaBitMask;
};
} DDPIXELFORMAT, FAR * LPDDPIXELFORMAT;
Описывает формат пикселя объекта DirectDrawSurface.
dwSize
Размер структуры. Должен быть инициализировано прежде, чем структура используется.
dwFlags
Определяет дополнительные флажки управления.
Typedef struct _DDSCAPS {
DWORDdwCaps;
} DDSCAPS, FAR * LPDDSCAPS;
Определяет возможности DirectDrawSurface. Это - часть структуры DDCAPS, которая используется, чтобы описать возможности объекта DirectDraw.
dwCaps
Определяет возможности поверхности.
Unlock
Разнообразные GetDDInterfaceОверлеи AddOverlayDirtyRect
Установка палитр на неосновныхПоверхностях
В DirectX 2, палитры могут быть присоединены к любой палитровой поверхности (основной, обратному буферу, вне экранной плоскость, или текстурную карту). Только те палитры, которые присоединены к основной поверхности будут иметь любой эффект на системной палитре. Важно обратить внимание, что блиттинг DirectDraw никогда не выполняет преобразование цвета — все палитры, присоединенные к источнику, или поверхности адресата блиттинга игнорируются. Кроме того, метод IDirectDrawSurface::GetDC, также игнорирует любой DirectDrawPalette, выбранный для поверхности.Неосновные поверхностные палитры предназначены для использования прикладными программами или Direct3D.
Возвращает DDERR_ALREADYINITIALIZED.
lpGUIDАдрес GUID, используемого как идентификатор интерфейса.
Этот метод предусматривает согласие с моделью компонентных объектов (COM). Так как объект DirectDraw инициализируется, когда он создан, вызов этого метода будет всегда кончаться значением возврата DDERR_ALREADYINITIALIZED.
См. также IDirectDraw:: AddRef, IDirectDraw:: QueryInterface, IDirectDraw:: Release
lpDD
Адрес структуры DirectDraw, которая представляет объект DirectDraw.
lpDDSurfaceDesc
Адрес структуры DDSURFACEDESC для заполнения релевантными подробностями относительно поверхности.
Этот метод предусмотрен для согласия с COM протоколом. Так как объект DirectDrawSurface инициализирован при создании, вызов этого метода будет всегда возвращать DDERR_ALREADYINITIALIZED.
См. также IDirectDrawSurface:: AddRef, IDirectDrawSurface:: QueryInterface, IDirectDrawSurface:: Release
lpDD
Адрес структуры DirectDraw, которая представляет объект DirectDraw.
dwFlags
Этот параметр не используется в настоящеео время и должен быть установлен в 0.
Этот метод предусмотрен для согласия COM протоколом. Так как объект DirectDrawClipper инициализирован при создании, вызов этого метода будет всегда кончаться значением возврата DDERR_ALREADYINITIALIZED.
См. также IDirectDrawClipper:: AddRef, IDirectDraw:: CreateClipper, IDirectDrawClipper:: QueryInterface, IDirectDrawClipper:: Release
Возвраты DDERR_ALREADYINITIALIZED.
lpDDАдрес структуры DirectDraw, которая представляет объект DirectDraw.
dwFlags
Этот параметр не используется в настоящее время и должен быть установлен в 0.
lpDDColorTable
Этот параметр не используется в настоящее время и должен быть установлен в 0.
Этот метод предусмотрен для согласия с COM протоколом. Так как объект DirectDrawPalette инициализирован при создании, вызов этого метода будет всегда кончаться значением возврата DDERR_ALREADYINITIALIZED.
См. также IDirectDrawPalette:: AddRef, IDirectDrawPalette:: QueryInterface, IDirectDrawPalette:: Initialize
Введение в DirectDraw
DirectDraw обеспечивает доступ к памяти дисплея и услуги по управлению аппаратными средствами дисплея. Это обычные функциональные возможности, связанные управлением памятью: память может быть распределена, может перемещаться, преобразовываться, и освобождаться. Эта память представляет собой визуальное изображение и называется поверхностью. Через аппаратный уровень абстракции (HAL) DirectDraw, прикладные программы имеют доступ к уникальным функциональным возможностям аппаратных средств дисплея, включая протяжение, оверлеи, отображение текстуры, вращение, и зеркальное отражение.Вызов COM объектов из C
Любой метод интерфейса COM может вызываться из программы на C. Имеются две вещи, которые Вы должны помнить при вызове метода интерфейса из C:Первый параметр метода - всегда ссылка на объект, который был создан и вызывает метод ( параметр this).
Каждый метод в интерфейсе вызывается через указатель на vtable объекта.
Следующий пример создает поверхность, связанную с объектом DirectDraw, вызывая метод IDirectDraw:: CreateSurface , использующий язык программирования C:
ret = lpDD- > lpVtbl- > CreateSurface (lpDD, &ddsd, &lpDDS,
WaitForVerticalBlank
Установка поведения SetCooperativeLevelПоверхности DuplicateSurface
Z-буферы
В DirectX 2, DirectDraw HEL может создавать z-буферы для использования Direct3D или другим 3D, представляющим программное обеспечение. HEL поддерживает z-буферы, и 16- и с 32 битами. DirectDraw драйвер устройства для 3D ускоренной плата дисплея может разрешать создание z-буферов в памяти дисплея, экспортируя поверхностную возможность DDSCAPS_ZBUFFER. Он должен также определить z-буфер глубину используя dwZBufferBitDepths член структуры DDCAPS.Z-буферы могут быть очищены, используя IDirectDrawSurface:: Blt. Новый DirectDraw флажок блиттинга (DDBLT_DEPTHFILL) был определен, чтобы указать, что блиттинг очищает z-буфер. Если этот флажок определен, структура DDBLTFX, переданная в IDirectDrawSurface:: Blt должна иметь dwFillDepth набор членов к требуемой z-глубине . Если DirectDraw драйвер устройства для 3D ускоренной платы дисплея разработан, чтобы обеспечить поддержку для очистки z-буфера в аппаратных средствах, то экспортируя эту возможность, помечают DDCAPS_BLTDEPTHFILL и должен существовать код, чтобы обработать DDBLT_DEPTHFILL блиттинг. Поверхность адресата при блиттинге должна быть z-буфером.
Бизнес в интернете: Сайты - Софт - Языки - Дизайн
- Киберсантинг
- Киберсантинг как бизнес
- Виды Киберсантинга
- Создание игр
- Дизайн как бизнес
- Dreamweaver
- PHP
- Homesite
- Frontpage
- Studio MX
- Сайтостроительство
- Citrix MetaFrame
- Стили сайта
- ActiveX на сайте
- HTML как основа сайта
- Adobe GoLive
- Что такое WEB
- Мобильные WAP сайты
- 3D графика на сайтах
- 3DS MAX графические решения
- Графика в 3D Studio MAX и на сайте