Поделиться через


Включение альфа-каналов в Full-Screen задних буферах

В DirectDraw DDI создание основной цепочки перелистывания не имеет встроенного формата пикселей. Следовательно, поверхности в этой цепочке принимают формат пикселей в режиме отображения. Например, основная перевернутая цепочка, созданная в режиме 32bpp, принимает D3DFMT_X8R8G8B8 формат.

Такая цепочка создается для многих полноэкранных приложений. Так как задний буфер цепочки не имеет альфа-канала, состояние D3DRS_ALPHABLENDENABLE отрисовки и связанные состояния blend-render для конечных поверхностей определены плохо. В DirectX 8.1 появилась новая функция, которую среда выполнения Direct3D использует для информирования драйвера о запросе приложения на создание полноэкранной цепочки поверхностей с альфа-каналом в пиксельных форматах этих поверхностей.

Чтобы указать поддержку этой функции, драйвер должен задать бит D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD (определенный в файле d3d8caps.h ) в члене Caps3 структуры D3DCAPS8. Драйвер возвращает структуру D3DCAPS8 в ответ на запрос GetDriverInfo2 , как описано в статье Создание отчетов о возможностях Direct3D в стиле Direct3D для DirectX 8.0. Поддержка этого запроса описана в разделе Поддержка GetDriverInfo2.

После определения поддержки этой функции драйвер может принимать вызовы DdCreateSurface с битом DDSCAPS2_ENABLEALPHACHANNEL (определенным в файле ddraw.h ), заданным в элементе dwCaps2 структуры DDSCAPS2 . Этот бит задается только для создания поверхностей, которые являются частью основной цепочки переворачивания или находятся в автономных задних буферах.

Если драйвер обнаруживает этот бит, драйвер определяет, что поверхности принимают не формат режима отображения, а формат режима отображения и альфа-канал. Например, в режиме 32bpp такие поверхности должны иметь D3DFMT_A8R8G8B8 формат.

Эта функция доступна в Windows XP и более поздних версиях, а также в операционных системах Windows 2000, на которых установлена среда выполнения DirectX 8.1.