Введение в программирование трехмерных игр с DX9

       

Проверка поддержки аппаратной обработки вершин



1.4.2. Проверка поддержки аппаратной обработки вершин

Создавая объект IDirect3DDevice9, представляющий первичный видеоадаптер, мы должны указать используемый им способ обработки вершин. Мы хотим по-возможности использовать аппаратную обработку вершин, но не все видеокарты поддерживают ее и мы сперва должны проверить наличие поддержки аппаратной обработки вершин.

Чтобы сделать это мы сперва должны инициализировать экземпляр D3DCAPS9 на основании возможностей первичного видеоадаптера. Воспользуемся следующим методом:

HRESULT IDirect3D9::GetDeviceCaps( UINT Adapter, D3DDEVTYPE DeviceType, D3DCAPS9 *pCaps );

Adapter— указывает физический видеоадаптер, возможности которого мы хотим определить.

DeviceType — задает тип устройства (т.е. аппаратное устройство (D3DDEVTYPE_HAL) или программное устройство (D3DDEVTYPE_REF)).

pCaps — возвращает инициализированную структуру с описанием возможностей устройства.

Теперь мы можем проверить возможности устройства, как описывалось в разделе 1.3.8. Это иллюстрирует следующий фрагмент кода:

// Заполняем структуру D3DCAPS9 информацией о // возможностях первичного видеоадаптера.

D3DCAPS9 caps; d3d9->GetDeviceCaps( D3DADAPTER_DEFAULT, // Означает первичный видеоадаптер. deviceType, // Задает тип устройства, обычно D3DDEVTYPE_HAL. &caps); // Возвращает заполненную структуру D3DCAPS9, которая содержит // информацию о возможностях первичного видеоадаптера.

// Поддерживается аппаратная обработка вершин? int vp = 0; if(caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) { // да, сохраняем в vp флаг поддержки аппаратной // обработки вершин. vp = D3DCREATE_HARDWARE_VERTEXPROCESSING; } else { // Нет, сохраняем в vp флаг использования программной // обработки вершин. vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING; }

Обратите внимание, что мы сохраняем способ обработки вершин, который будем использовать, в переменной vp. Это вызвано тем, что нам надо будет указать используемый тип обработки вершин, когда позднее мы будем создавать объект IDirect3DDevice9.

ПРИМЕЧАНИЕ

Идентификаторы D3DCREATE_HARDWARE_VERTEXPROCESSING и D3DCREATE_SOFTWARE_VERTEXPROCESSING — это предопределенные константы, означающие соответственно аппаратную обработку вершин и программную обработку вершин.
СОВЕТ

Разрабатывая приложения, использующие новые, специальные или дополнительные возможности (другими словами, возможности не поддерживаемые большинством устройтв) следует всегда проверять возможности устройства (D3DCAPS9), чтобы перед использованием требуемой возможности убедиться, что устройство поддерживает ее. Никогда не предполагайте, что необходимая вам возможность будет доступна. Также обраите внимание, что приложения из этой книги в большинстве случаев не следуют данной рекомендации — в большинстве случаев мы не проверяем возможности устройств.
ПРИМЕЧАНИЕ

Если какое-либо из рассматриваемых в книге приложений не работает на вашей системе, это скорее всего вызвано тем, что ваша аппаратура не поддерживает возможности, необходимые приложению. В таких случаях попробуйте использовать устройство REF.
Содержание раздела