До сих пор мы применяли в основном стандартные функции Direct3D, совместимые практически с любыми современными видеоадаптерами. И только в предыдущем проекте мы столкнулись с возможной несовместимостью. Возникает вопрос, а можно ли написать программу так, чтобы она узнавала «на месте» возможности оборудования и автоматически выбирала наиболее оптимальный режим работы, либо отказывалась работать при необходимости? Можно. Для этого в DirectX имеется структура Caps, содержащая всю необходимую информацию об оборудовании. Пользоваться ей очень просто. Добавьте в модуль modDX общую переменную типа D3DCAPS8:

код на языке vb
 
Public Caps As D3DCAPS8
 

А в процедуру D3DInit строку для ее заполнения:

код на языке vb
 
  d3d.GetDeviceCaps D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Caps
 

Теперь мы можем узнавать необходимые нам сведения. Например, в предыдущем проекте можно таким образом выбрать уровень анизотропии:

код на языке vb
 
  If Caps.MaxAnisotropy >= 4 Then
    d3dDevice.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC
    d3dDevice.SetTextureStageState 0, D3DTSS_MAXANISOTROPY, 4
  ElseIf Caps.MaxAnisotropy >= 2 Then
    d3dDevice.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_ANISOTROPIC
    d3dDevice.SetTextureStageState 0, D3DTSS_MAXANISOTROPY, 2
  Else
    d3dDevice.SetTextureStageState 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR
  End If
 

Можно также предоставить возможность пользователю программы самому выбрать режим фильтрации из возможных вариантов. Полный список всех полей Caps имеется в DirectX SDK. Мы еще не раз будем возвращаться к этой полезной структуре.