Программирование стратегических игр с DirectX 9.0

         

Создание устройства трехмерной визуализации


Вы уже установили параметры отображения, так что настало время создать объект устройства IDirect3DDevice9. Он является основой для всех относящихся к визуализации вызовов и поэтому исключительно важен. Без этого маленького объекта вы ничего не сможете отобразить на экране. Для его создания применяется функция IDirect3D9::CreateDevice(). Вот как выглядит ее прототип:

HRESULT CreateDevice( UINT Adapter, D3DDEVTYPE DeviceType, HWND hFocusWindow, DWORD BehaviorFlags, D3DPRESENT_PARAMETERS *pPresentationParameters, IDirect3DDevice9 **ppReturnedDeviceInterface );

Первый параметр, Adapter, содержит порядковый номер используемой видеокарты. Для большинства систем с одним монитором можно использовать значение D3DADAPTER_DEFAULT. Этот параметр работает точно так же как и первый параметр функции GetAdapterDisplayMode(), который я описал ранее.

Второй параметр, DeviceType, является перечислением, задающим тип устройства. Доступные типы перечислены в таблице 6.5. В данной программе я использую значение D3DDEVTYPE_HAL. Из-за этого программа может не работать с видеокартами, не поддерживающими аппаратное ускорение. В этом случае для того, чтобы программа запустилась попробуйте изменить значение этого параметра на D3DDEVTYPE_REF.

Таблица 6.5. Типы устройств

Значение Константа Описание
1 D3DDEVTYPE_HAL Визуализация выполняется аппаратурой видеокарты. Этот метод позволяет использовать преимущества доступных методов аппаратного ускорения.
2 D3DDEVTYPE_REF Direct3D всю визуализацию выполняет программно. Это плохой выбор, если видеокарта поддерживает аппаратное ускорение.
3 D3DDEVTYPE_SW Используется программное устройство визуализации, эмулирующее аппаратуру.

Третий параметр, hFocusWindow, задает окно, которому будет принадлежать фокус системы визуализации DirectX. Для полноэкранного режима это должно быть окно самого верхнего уровня. В рассматриваемом примере я использую дескриптор окна, созданного в функции WinMain(). Это общепринятая практика для приложений, работающих в оконном режиме.

Четвертый параметр, BehaviorFlags, задает один или несколько флагов, определяющих параметры создаваемого устройства отображения. Доступные флаги перечислены в таблице 6.6.

Таблица 6.6. Флаги, задающие поведение устройства

Значение Описание
D3DCREATE_FPU_PRESERVE Приложение требует вычислений с плавающей точкой двойной точности.
D3DCREATE_MULTITHREADED Direct3D будет работать в безопасном многопоточном режиме. Этот режим приводит к значительному падению производительности и должен применяться только в случае крайней необходимости.
D3DCREATE_PUREDEVICE Указывает, что устройство не поддерживает вызовы Get для использования в блоках состояния. Кроме того, устройство не будет поддерживать обработку вершин. Лично я никогда не использую этот флаг.
D3DCREATE_HARDWARE_VERTEXPROCESSING Обработка вершин производится аппаратурой видеокарты. Этот флаг используется в рассматриваемой программе. Если приложение на вашем компьютере не работает, попробуйте заменить его на следующее значение из спсика.
D3DCREATE_SOFTWARE_VERTEXPROCESSING Обработка вершин производится программно. Это значительно медленнее, чем аппаратная обработка.
D3DCREATE_MIXED_VERTEXPROCESSING Обработка вершин производится как аппаратурой, так и программно. Этот вариант может работать медленнее, чем чисто аппаратная обработка.
D3DCREATE_DISABLE_DRIVER_MANAGEMENT Устраняет драйвер видеокарты от управления ресурсами. Если флаг установлен, всеми ресурсами управляет Direct3D.
D3DCREATE_ADAPTERGROUP_DEVICE Используется, если одновременно работают несколько видеокарт.
D3DCREATE_MANAGED Передает вопросы управления памятью в ведение устройства.

Пятый параметр, pPresentationParameters, задает параметры отображения для устройства. В рассматриваемом примере я использую указатель на инициализированную ранее структуру.

Последний параметр, ppReturnedDeviceInterface, содержит адрес указателя, который после завершения работы функции будет представлять созданное устройство. В этом параметре я передаю глобальный указатель на интерфейс IDirect3DDevice9 с именем g_pd3dDevice.

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



Содержание раздела