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


BOOL

WINAPI lpCallback(GUID FAR * lpGUID,

LPSTR

lpDriverDescription, LPSTR

lpDriverName,

LPVOID

lpContext);

Определенная прикладная программой процедура callback для функции DirectDrawEnumerate.

Возвращает DDENUMRET_OK, чтобы продолжить перечисление, или DDENUMRET_CANCEL, чтобы остановить.

lpGUID

Адрес уникального идентификатора объекта DirectDraw.

lpDriverDescription

Адрес строки, содержащей описание драйвера.

lpDriverName

Адрес строки, содержащей имя драйвера.

lpContext

Адрес caller-определенной структуры, которая будет передана к функции callback каждый раз, когда вызывается функция.



Callback функции


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



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


Планирует этот  блиттинг, чтобы избежать разрывов.




Вращает поверхностьна  90 градусов по часовой стрелке.


Вращает поверхность на 180 градусов


Вращает поверхность на 180 градусов по часовой стрелке.


Вращает поверхность на 270 градусов


Вращает поверхность на 270 градусов по часовой стрелке.


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


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