Microsoft DirectX 2

         

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


Указывает, что эта поверхность - один уровень mipmap. Эта поверхность будет присоединена к другим DDSCAPS_MIPMAP поверхностям, чтобы сформировать mipmap. Это может быть выполнено явно,  создавая ряд поверхностей и присоединяя их  IDirectDrawSurface:: AddAttachedSurface или неявно с помощью IDirectDraw:: CreateSurface. Если эта возможность установлена, должен также быть установлен DDSCAPS_TEXTURE.



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_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


Самое большое увеличение эффективности в 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-порядок оверлея автоматически обрабатывает манипулирование прозрачностью между оверлеями.


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 эмулирует отсутствующие функциональные возможности.



DirectDrawCreate


HRESULT

DirectDrawCreate(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, которые представляют звуковые источники на той плате.

Кроме способности генерировать зависимые объекты, основной объект устройства определяет возможности аппаратного устройства, которое он представляет, типа размера экрана и числа цветов, или имеет ли звуковая плата таблицу волнового синтеза .