⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initenviroment.cpp

📁 这是一款游戏中的粒子系统
💻 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)//创建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)//创建设备环境
{
	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)//释放设备环境
{
	if(this->p_D3dDevice)
		p_D3dDevice->Release();
	return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -