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


Создание буфера глубины (Direct3D 9)

Буфер глубины является свойством устройства. Чтобы создать буфер глубины, управляемый Direct3D, задайте соответствующие элементы структуры D3DPRESENT_PARAMETERS , как показано в следующем примере кода.

D3DPRESENT_PARAMETERS d3dpp; 
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed               = TRUE;
d3dpp.SwapEffect             = D3DSWAPEFFECT_COPY;
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16;

Задав для элемента EnableAutoDepthStencil значение TRUE, вы указываете Direct3D управлять буферами глубины для приложения. Обратите внимание, что параметру AutoDepthStencilFormat необходимо задать допустимый формат буфера глубины. Флаг D3DFMT_D16 указывает 16-разрядный буфер глубины, если он доступен.

Следующий вызов метода IDirect3D9::CreateDevice создает устройство, которое затем создает буфер глубины.

if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
                                D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                &d3dpp, &d3dDevice ) ) )
return E_FAIL;

Буфер глубины автоматически устанавливается в качестве целевого объекта отрисовки устройства. При сбросе устройства буфер глубины автоматически уничтожается и повторно создается в новом размере.

Чтобы создать новую поверхность буфера глубины, используйте метод IDirect3Device9::CreateDepthStencilSurface .

Чтобы задать новую поверхность буфера глубины для устройства, используйте метод IDirect3DDevice9::SetDepthStencilSurface .

Чтобы использовать буфер глубины в приложении, необходимо включить буфер глубины. Дополнительные сведения см. в разделе Включение буферизации глубины (Direct3D 9).

Буферы глубины