D3D学习笔记1-D3D9设备的初始化

目录

创建D3D设备 IDirect3DDevice9 *

绘制框架


创建D3D设备 IDirect3DDevice9 *

 D3D9设备的初始化步骤:

1.创建IDirect3D9对象 

2.检查硬件 

3.填充D3DPRESENT_PARAMETERS结构体

4.创建D3D设备

bool InitD3D(HWND hwnd, bool isFullScreen, D3DDEVTYPE deviceType, IDirect3DDevice9** device)
{

	//1.创建IDirect3D9对象
	IDirect3D9* pd3dp{ NULL };
	pd3dp = Direct3DCreate9(D3D_SDK_VERSION);
	if (!pd3dp)
	{
		PrintDebugMsg("创建IDirect3D9对象失败\n");
		return false;
	}

	//2.检查硬件
	D3DCAPS9 caps;
	pd3dp->GetDeviceCaps(D3DADAPTER_DEFAULT, deviceType, &caps);
	int vp = 0;

	if (caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)//是否支持硬件
		vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
	else
		vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

	//3.  填充D3DPRESENT_PARAMETERS结构体
	D3DPRESENT_PARAMETERS d3dp;
	
	ZeroMemory(&d3dp, sizeof(d3dp));
	d3dp.BackBufferHeight = 768;
	d3dp.BackBufferWidth = 1024;
	d3dp.BackBufferFormat = D3DFMT_UNKNOWN;//后台缓存的像素点
	d3dp.BackBufferCount = 1;//后台缓存的个数
	d3dp.MultiSampleType = D3DMULTISAMPLE_NONE;
	d3dp.MultiSampleQuality = 0;
	d3dp.SwapEffect = D3DSWAPEFFECT_DISCARD;//交换链置换
	d3dp.hDeviceWindow = hwnd;//绘制的窗口
	d3dp.Windowed = isFullScreen;//是否全屏
	d3dp.EnableAutoDepthStencil = true;//是否创建维护深度缓存
	d3dp.AutoDepthStencilFormat = D3DFMT_D16;//深度缓冲区格式 如果 EnableAutoDepthStencil为false 则忽略该参数
	d3dp.Flags = 0;
	d3dp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;//刷新率
	d3dp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;// 交换频率
	/*
	ZeroMemory(&d3dp, sizeof(d3dp));
	d3dp.Windowed = TRUE;
	d3dp.SwapEffect = D3DSWAPEFFECT_DISCARD;
	d3dp.BackBufferFormat = D3DFMT_UNKNOWN;
	d3dp.EnableAutoDepthStencil = TRUE;
	d3dp.AutoDepthStencilFormat = D3DFMT_D16;
	d3dp.PresentationInterval = D3DPRESENT_INTERVAL_ONE;
	*/

	//4.创建D3D设备
	HRESULT hr = pd3dp->CreateDevice(D3DADAPTER_DEFAULT,//显卡设备
		deviceType,//设备类型
		hwnd, //与D3D设备所关联的窗口句柄
		vp,//软件 / 硬件 运算方式
		&d3dp,//参数结构体
		device); //传出参数 IDirect3DDevice9*的指针
	if (FAILED(hr))
	{
		PrintDebugMsg("创建D3D9设备对象失败\n");
		pd3dp->Release();
		return false;
	}

	pd3dp->Release();
	return true;
}

绘制框架

    if (g_d3dDevice)
	{
		//1.缓冲区个数 2.指定清除缓冲区 3.清楚的是那些缓冲区(后台|深度) 4 5 6 ->用来那些值来清除相应的缓冲区 
		g_d3dDevice->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 255, 0), 1.0f, 0);

		//开始在后台缓冲区进行绘制
		g_d3dDevice->BeginScene();

		//结束后台缓冲区绘制
		g_d3dDevice->EndScene();
		
		//将后台缓冲区提交到前台
		g_d3dDevice->Present(0, 0, 0, 0);

	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员陈子青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值