摸爬滚打DirectX11_day03——Direct3D的初始化

Direct3D的初始化分为四步

  1. 创建Direct3D接口对象(注意区别Direct3D设备接口)
  2. 获取设备的硬件信息
  3. 填充D3DPRESENT_PARAMETERS结构体
  4. 创建Direct3D设备接口

1.创建Direct3D接口对象

这里写图片描述

LPDIRECT3D pD3D=NULLif(NULL==(pD3D=Direct3DCreate9(D3D_SDK_VERSION)))
    return E_FAIL;

2.获取设备的硬件信息

这一步操作可以得到系统中可用的显卡的性能,显示模式,格式以及其他相关信息。这些信息保存在一个叫做D3DCAPS9的结构体中。

这里写图片描述

我们主要关心的是显卡支不支持硬件顶点运算(硬件加速功能,其速度远远高于软件顶点运算),因为这种方式较为高效。

第一个参数表示显卡的序号,一般为默认显卡。

第二个参数表示设备类型。

第三个参数表示指向该包含设备信息结构体的指针。

关于获取设备信息,代码如下

D3DCAPS9 caps;
int vp=0;
if(FAILED(p3D->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVITYPE_HAL,&caps)))
{
    return E_FAIL;
}
if(caps.DevCaps&D3DDEVCAPS_HWTRANSFORMANDLTGHT)
//D3DDEVCAPS_HWTRANSFORMANDLTGHT表示显卡支持变换和光照
    vp=D3DCREATE_HARDWARE_VERTEXPROCESSING;//支持硬件顶点运算,那么采用硬件顶点运算
    vp=D3DCREATE_SOFTWARE_VERTEXPROCESSING;//不支持的话采用软件顶点运算。

3.填内容。(这一步其实就是做填空题,为我们后面创建硬件接口做准备)

D3DPRESENT_PARAMETERS结构体,也就是设置程序以及程序的一些基于硬件的基本信息(缓冲区,窗体模式等等)。

这里写图片描述

这里写图片描述

创建交换链

Direct3D动画显示和电影一样,通过每秒多帧的技术实现流畅的动画显示。而用到的技术就是交换链,交换链可以使动画平滑的过渡。交换链中存在两个或两个以上的平面组成,每个平面存储着2D图形的一个线性数组,数组中的每个元素都表示平面上的一个像素。(对于三维物体,还有一个关于深度信息,而这个深度信息一般保存在深度缓冲区上,对于每一个像素都对应着一个深度信息,深度信息是与他们的平面像素信息分开存储的)。
对于要在平面上显示的东西存储在缓冲区中,缓冲区又有前台和后台之分。而前台缓冲区和后台缓冲区是系统中的内存或者显存的内存块。前台缓冲区存储已经显示在屏幕上的信息,而后台存储区存储即将要显示的信息。通过前后缓冲区的配合,运用交换链的技术,就可以流畅的显示动画了。


D3DPRESENT_PARAMETERS d3dPP;
d3dPP.BackBufferCount=2;

注意在第三步中只是声明了要创建的缓冲区或者其他设备的信息,并没有真正的创建,在第四步设备接口创建时交换链才真正的在内存中被创建。

交换链在创建之后,需要我们去“驱动“其进行翻转操作,将前后缓冲区的信息进行翻转。这一步在Direct3D渲染的过程中进行驱动。
会调用到IDirect3DDevice9::Present()函数,进行页面的翻转和显示。(翻转主要是将内存中的指针进行调换)


4.创建设备接口
这一步其实就是利用第一步创建的Direct3D接口对象来调用IDirect3D::CreateDevice方法

if(FAILED(pD3D->CreateDevice(D3DADAPTE_DEFAULT,D3DDEVTYPE_HAL,hwnd,VP&d#dpp,&g_pd3dDevice)))
    return E_FAIL;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值