DX 的配置还是很方便的,这里是 DX11 SDK 的下载地址,在微软 DC 下载后,直接一路 Next 就可以成功安装了 。之后打开 Visual Studio,建立新项目,在项目属性的 VC++ 目录的 Include 加入 DX 安装路径里的 Include 文件夹, Library 加入 Libs 文件夹(这个和 OpenGL 在 Visual Studio 下的配置基本相同,不多介绍)。
配置好了之后,我们先建立一个 Win32 窗口,这个我们在第一篇文章中有介绍。建立完毕后现在开始配置 DX11 (希望你不会被这一个配置吓得失去信心)。
<!--more-->
首先看一下 D3D 程序的基本结构:(如果你对 DX 一点基本概念都没有,可以看这里 DirectX 维基百科)
我们今天要做的,就是初始化 D3D 程序这里,当显示了一个窗口后,下面继续创建一个Direct3D 11设备,这个设备用于绘制3D场景。首先必须创建三个对象:一个设备、一个立即执行上下文(immediate context)和一个交换链(Swap Chain),立即执行上下文对象是Direct3D 11中新添加的。
设备对象用于将内容绘制在一个缓冲中,设备还包含创建资源的方法。
交换链即表示对缓冲的操作,这些缓冲就是设备绘制的和显示在屏幕上的内容。交换链包含两个或两个以上的缓冲,主要是前缓冲和后备缓冲,它们就是设备绘制形成的纹理,用于显示在屏幕上。前缓冲(front buffer)就是当前显示在屏幕上的内容,这个缓冲是只读的,无法修改。后备缓冲(back buffer)是设备将要绘制的渲染目标,一旦它完成了绘制操作,交换链就会通过交换前缓冲和后备缓冲,将后备缓冲的内容显示在屏幕上,此时后备缓冲就变成了前缓冲。
交换链在 DX 中有定义好的结构体 DXGI_SWAP_CHAIN_DESC
typedef struct DXGI_SWAP_CHAIN_DESC { DXGI_MODE_DESC BufferDesc; // 描述后台缓冲的结构体 DXGI_SAMPLE_DESC SampleDesc; // 描述多重采样的结构体 DXGI_USAGE BufferUsage; // 对于交换链,为DXGI_USAGE_RENDER_TARGET_OUTPUT UINT BufferCount; // 后台缓冲数量 HWND OutputWindow; // 将要渲染到窗口的句柄 BOOL Windowed; // 以窗口(window)还是全屏(full-screen)模式运行 DXGI_SWAP_EFFECT SwapEffect; // 设为DXGI_SWAP_EFFECT_DISCARD,让显卡驱动程序选择最高效的显示模式 UINT Flags; // 通常为 0 } DXGI_SWAP_CHAIN_DESC;