?? initenviroment.cpp
字號:
#include "StdAfx.h"
#include ".\InitEnviroment.h"
CInitEnviroment::CInitEnviroment(HWND hWnd,int backBufWidth,int backBufHeight,bool windowed)
{
this->windowed=windowed;
if(!this->CreateD3d9())
{
successful=false;
return;
}
if(!this->GetDisplayMode(this->p_D3d9))
{
successful=false;
return;
}
if(!this->CreatePP(hWnd,this->m_D3dDisplayMode,backBufWidth,backBufHeight))
{
successful=false;
return;
}
if(!this->CreateDev(hWnd,this->p_D3d9,this->m_D3dpp))
{
successful=false;
return;
}
successful=true;
}
CInitEnviroment::~CInitEnviroment(void)
{
this->ReleaseD3D();
}
CInitEnviroment::CInitEnviroment(void)
{
windowed=true;
}
bool CInitEnviroment::CreateD3d9(void)//創(chuàng)建D3D
{
if(NULL==(this->p_D3d9=Direct3DCreate9( D3D_SDK_VERSION)))
return false;
return true;
}
bool CInitEnviroment::GetDisplayMode(LPDIRECT3D9 p_d3d9)//獲得顯示模式
{
memset(&this->m_D3dDisplayMode,0,sizeof(D3DDISPLAYMODE));
if(D3D_OK!=p_D3d9->GetAdapterDisplayMode(D3DADAPTER_DEFAULT ,&m_D3dDisplayMode))
return false;
return true;
}
bool CInitEnviroment::CreatePP(HWND hwnd,D3DDISPLAYMODE mode,int backBufWidth,int backBufHeight)
{
ZeroMemory(&m_D3dpp,sizeof(m_D3dpp));
m_D3dpp.BackBufferFormat=mode.Format;
m_D3dpp.BackBufferWidth=backBufWidth;
m_D3dpp.BackBufferHeight=backBufHeight;
m_D3dpp.hDeviceWindow=hwnd;
m_D3dpp.Windowed=windowed;
m_D3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
m_D3dpp.EnableAutoDepthStencil=TRUE;
m_D3dpp.AutoDepthStencilFormat=D3DFMT_INDEX32;
m_D3dpp.MultiSampleType= D3DMULTISAMPLE_NONE;
m_D3dpp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;
return true;
}
bool CInitEnviroment::CreateDev(HWND hwnd, LPDIRECT3D9 d3d9, D3DPRESENT_PARAMETERS pp)//創(chuàng)建設(shè)備環(huán)境
{
D3DFORMAT format[12]={D3DFMT_INDEX32,D3DFMT_INDEX16,D3DFMT_VERTEXDATA
,D3DFMT_D24FS8,D3DFMT_D32F_LOCKABLE
,D3DFMT_D24X4S4,D3DFMT_D24X8,D3DFMT_D24S8,D3DFMT_D15S1
,D3DFMT_D32,D3DFMT_D16_LOCKABLE,D3DFMT_D16};
if(D3D_OK!=d3d9->CreateDevice( D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&pp,&p_D3dDevice)){
int index=0;
bool haveFormat=false;
while(index<12&&haveFormat==false) {
pp.AutoDepthStencilFormat=format[index++];
if(d3d9->CreateDevice( D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&pp,&p_D3dDevice)==D3D_OK){
haveFormat=true;
}
if(index==12&&haveFormat==false)
return false;
}
}
return true;
}
bool CInitEnviroment::ReleaseD3D(void)//釋放設(shè)備環(huán)境
{
if(this->p_D3dDevice)
p_D3dDevice->Release();
return true;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -