阿辉DirectX 11学习笔记二[通俗易懂]

阿辉DirectX 11学习笔记二[通俗易懂]上一小节任务完成了窗口初始化的任务,接下来将完成初始化Direct3D的任务,如下:1.定义我们想要检查的设备类型和特征级别;2.创建Direct3D设备,渲染环境和交换链;3.创建渲染对象;4.设置视口观察区;5.

阿辉DirectX

上一小节任务完成了窗口初始化的任务,接下来将完成初始化Direct3D的任务,如下:
1. 定义我们想要检查的设备类型和特征级别;
2. 创建Direct3D设备,渲染环境和交换链;
3. 创建渲染对象;
4. 设置视口观察区;
5. 屏幕的清除和显示;

定义我们想要检查的设备类型和特征级别:

在Direct3D11中我们可以使用四种设备类型和三种特征级别,他们的名称和作用分别如下:
硬件设备:运行在图形硬件上的D3D设备,在所有设备中时最快的;
引用设备:用于在CPU上执行图形硬件所不支持的特性渲染,换句话说,就是在软件中完全模拟硬件计算。
软件驱动设备:允许开发者编写自己的渲染驱动用于Direct3D中;
WARP设备:高效CPU渲染设备,可模拟Direct3D的全部特性。

具体代码:
RECT dimensions;
GetClientRect(hwnd,&dimensions);

unsigned int width=dimensions.right-dimensions.left;
unsigned int height=dimensions.bottom-dimensions.top;

//驱动类型
D3D_DRIVER_TYPE driverTypes[]=
{
    D3D_DRIVER_TYPE_HARDWARE,D3D_DRIVER_TYPE_WARP,
    D3D_DRIVER_TYPE_REFERENCE,D3D_DRIVER_TYPE_SOFTWARE
};
unsigned int totalDriverTypes=ARRAYSIZE(driverTypes);//返回设备类型的数目
//特征级别
D3D_FEATURE_LEVEL featureLevels[]=
{
    D3D_FEATURE_LEVEL_11_0,
    D3D_FEATURE_LEVEL_10_1,
    D3D_FEATURE_LEVEL_10_0
};
unsigned int totalFeatureLevels=ARRAYSIZE(featureLevels);//返回特征级别的数目
解释:

RECT:用来存储成对出现的参数;
GetClientRect:获得客户用户区的坐标;
D3D_DRIVER_TYPE:设备驱动类型;
D3D_FEATURE_TYPE: 特征级别类型

创建Direct3D设备,渲染环境和交换链:

交换链是设备中渲染目标的集合,所谓渲染目标,就是你想将目的窗口渲染为何种风格,所以首先我们要初始化交换链,确定风格:
具体代码:

DXGI_SWAP_CHAIN_DESC swapChainDesc;
ZeroMemory(&swapChainDesc,sizeof(swapChainDesc));//用0来填充某一存储区,第一个参数代表填充的起始地址,第二个参数代表填充的长度
swapChainDesc.BufferCount=1;//缓存页的数量
swapChainDesc.BufferDesc.Width=width;//缓存页的宽度
swapChainDesc.BufferDesc.Height=height;//缓存页的高度
swapChainDesc.BufferDesc.Format=DXGI_FORMAT_R8G8B8A8_UNORM;//缓存格式
swapChainDesc.BufferDesc.RefreshRate.Numerator=60;//刷新率的分子
swapChainDesc.BufferDesc.RefreshRate.Denominator=1;// 刷新率的分母
swapChainDesc.BufferUsage=DXGI_USAGE_RENDER_TARGET_OUTPUT;//缓存器的使用方法
swapChainDesc.OutputWindow=hwnd;//窗口句柄
swapChainDesc.Windowed=true;//是否在全屏模式中D3D继续原来的尺寸还是resize
swapChainDesc.SampleDesc.Count=1;//取样数量
swapChainDesc.SampleDesc.Quality=0;//取样质量

然后,我们需要告诉硬件我们需要渲染怎样的一个环境,设备又是如何去渲染的。针对这,我们有三个工作要做:
创建Direct3D设备:一种用于自身与硬件通信的设备;
渲染环境:一种告诉设备怎样去绘制的渲染环境;
创建交换链:绘制怎样的环境;

具体代码:
unsigned int creationFlags=0;

#ifdef _DEBUG
    creationFlags|=D3D11_CREATE_DEVICE_DEBUG;

今天的文章阿辉DirectX 11学习笔记二[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/63509.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注