Инициализация библиотеки DirectX
Для создания минимального приложения на базе DirectX необходимо установить пакет разработчика SDK и настроить интегрированную среду. Потребуются по крайней мере подкаталоги INCLUDE с заголовочными файлами и LIB с библиотеками. После этого при помощи директив Project/Setting/Link нужно включить библиотеку d3d9.lib в список компоновщика. Директивы Tools/Options/Directories помогут указать пути к заголовочным файлам и к lib-файлам девятой версии библиотеки. Каталоги интегрированной среды могут содержать соответствующие файлы для более ранней версии, поэтому следует переместить новые пути в начало списка путей к заголовочным и библиотечным файлам.
В проекте DirectX_minim инициализация библиотеки выполняется функцией, код которой приведен в листинге 23.4.
Листинг 23.4
#include <d3dx9math.h> LPDIRECT3D9 D3D - NULL; LPDIRECT3DDEVICE9 Device - NULL;
D3DVIEWP0RT9 VP; //Размеры области рисования в активной странице.
HRESULT StartDirectX(HWND hWnd )
{
if(!D3D) // Единственная глобальная функция библиотеки. Доступ к остальным //осуществляется через интерфейсы
if(NULL-(D3D - Direct3DCreate9(D3D_SDK_VERSI0N))) return E_FAIL;
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp. sizeof(d3dpp));
d3dpp.BackBufferWidth - 0; //Если задать нули.
d3dpp.BackBufferHeight - 0; //буфер создается по размеру окна.
d3dpp.Windowed - TRUE;
d3dpp.SwapEffect - D3DSWAPEFFECT_C0PY;
d3dpp.BackBufferFormat - D3DFMTJJNKN0WN;//Используем текущий видеорежим d3dpp.EnableAutoDepthStencil - TRUE; //Будет создан Z-буфер d3dpp.AutoDepthStencilFormat - D3DFMT_D16: //Разрядность Z-буфера. d3dpp. BackBufferCount - 1; d3dpp.hDevi ceWi ndow-hWnd;
if (Device) {Device->ReleaseO-.Device - NULL; } //Если уже был создан //интерфейс, то нужно уменьшить счетчик обращений к СОМ-объекту. иначе он //никогда не выгрузится из памяти.
Инициализация DirectX
//Пытаемся создать D3DDevice с аппаратным ускорением D3DDEVTYPE_HAL //если не получается - без ускорения D3DDEVTYPE_REF
if( FAILEDC D3D->CreateDevice( D3DADAPTER_DEFAULT. D3DDEVTYPE_HAL. hWnd.D3DCREATE_S0FTWARE_VERTEXPR0CESSING.&d3dpp.&Devi ce)))