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


Метод IDirect3D9::CheckDeviceFormat (d3d9.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 констант (только подмножество констант D3DUSAGE допустимо для CheckDeviceFormat; см. таблицу на странице 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).
При переносе кода с Direct3D 9 на Direct3D 10 эквивалентом Direct3D 10 является CheckFormatSupport.

Требования

Требование Значение
Целевая платформа Windows
Header d3d9.h (включая D3D9.h)
Библиотека D3D9.lib

См. также раздел

IDirect3D9