Метод IDirect3D9::CheckDeviceFormat (d3d9helper.h)
Определяет, доступен ли формат поверхности в качестве указанного типа ресурса и может ли его использовать в качестве текстуры, буфера трафарета глубины, целевого объекта отрисовки или любого сочетания этих трех элементов на устройстве, представляющем этот адаптер.
Синтаксис
HRESULT CheckDeviceFormat(
[in] UINT Adapter,
[in] D3DDEVTYPE DeviceType,
[in] D3DFORMAT AdapterFormat,
[in] DWORD Usage,
[in] D3DRESOURCETYPE RType,
[in] D3DFORMAT CheckFormat
);
Параметры
[in] Adapter
Тип: UINT
Порядковый номер, обозначающий адаптер дисплея для запроса. D3DADAPTER_DEFAULT всегда является основным видеоадаптером. Этот метод возвращает D3DERR_INVALIDCALL, если это значение равно или превышает число видеоадаптеров в системе.
[in] DeviceType
Тип: D3DDEVTYPE
Член D3DDEVTYPE перечислимого типа, определяющий тип устройства.
[in] AdapterFormat
Тип: D3DFORMAT
Член D3DFORMAT перечислимого типа, определяющий формат режима отображения, в который будет помещен адаптер.
[in] Usage
Тип: DWORD
Запрошенные варианты использования для поверхности. Параметры использования — это любое сочетание констант D3DUSAGE и D3DUSAGE_QUERY (для CheckDeviceFormat допустимо только подмножество констант D3DUSAGE; см. таблицу на странице D3DUSAGE).
[in] RType
Тип: D3DRESOURCETYPE
Тип ресурса, запрошенный для использования в запрашиваемом формате. Член D3DRESOURCETYPE.
[in] CheckFormat
Тип: D3DFORMAT
Формат поверхностей, которые могут использоваться, как определено в разделе Использование. Член D3DFORMAT.
Возвращаемое значение
Тип: HRESULT
Если формат совместим с указанным устройством для запрошенного использования, этот метод возвращает D3D_OK.
D3DERR_INVALIDCALL возвращается, если значение Adapter равно или превышает число видеоадаптеров в системе или если DeviceType не поддерживается.
D3DERR_NOTAVAILABLE возвращается, если формат не приемлем для устройства для этого использования.
Комментарии
Ниже приведены некоторые примеры использования CheckDeviceFormat для проверка для аппаратной поддержки:
- Обычный формат поверхности вне экрана: укажите использование = 0 и RType = D3DRTYPE_SURFACE.
- Формат трафарета глубины. Следующий фрагмент кода проверяет переданный в формате трафарета глубины:
BOOL IsDepthFormatExisting( D3DFORMAT DepthFormat, D3DFORMAT AdapterFormat ) { HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, AdapterFormat, D3DUSAGE_DEPTHSTENCIL, D3DRTYPE_SURFACE, DepthFormat); return SUCCEEDED( hr ); }
Дополнительные сведения о процессе перечисления см. в разделе Выбор устройства (Direct3D 9).
- Можно ли визуализировать эту текстуру в определенном формате. Учитывая текущий режим отображения, в этом примере показано, как проверить, совместим ли формат текстуры с конкретным форматом обратного буфера:
BOOL IsTextureFormatOk( D3DFORMAT TextureFormat, D3DFORMAT AdapterFormat ) { HRESULT hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, AdapterFormat, 0, D3DRTYPE_TEXTURE, TextureFormat); return SUCCEEDED( hr ); }
- Альфа-наложение в пиксельном шейдере— задайте для D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING значение "Использование". Ожидается, что это завершится ошибкой для всех целевых объектов отрисовки с плавающей запятой.
- Автоматическое создание MIP-карт. Задайте для параметра Использование значение D3DUSAGE_AUTOGENMIPMAP. Если автоматическое создание MIP-карты завершается сбоем, приложение получит текстуру без mipmapped. Вызов этого метода считается подсказкой, поэтому этот метод может возвращать D3DOK_NOAUTOGEN (допустимый код успешного выполнения), если единственным сбоем является создание MIP-карты. Дополнительные сведения о создании MIP-карт см. в статье Автоматическое создание MIP-карт (Direct3D 9).
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | d3d9helper.h (включая D3D9.h) |
Библиотека | D3D9.lib |