Directx11 学习笔记一-新建出第一个窗口(Windows SDK)
项目结构如下 最基本的一些文件
d3dApp.h Direct3D应用程序框架类
d3dUtil.h 包含一些常用头文件及自己编写的函数
DXTrace.h 包含了HR宏与DXTraceW函数
GameApp.h 游戏应用程序扩展类,游戏逻辑在这里实现,继承自D3DApp类
GameTimer.h 游戏计时器类
D3DApp框架类
主要实在d3dApp.h中,里面包含了很多关于应用与窗口的句柄和相关函数.
Direct3D初始化
首先要创建出出一个D3D设备,D3D设备上下文。
D3D设备:通常代表一个显示适配器(即显卡)。(资源类(ID3D11Resource, 包含纹理和缓冲区),视图类以及着色器)
D3D设备上下文:可以看做是一个渲染管线。通常我们在创建D3D设备的同时也会附赠一个立即设备上下文(Immediate Context)。
一个D3D设备仅对应一个D3D立即设备上下文,并且只要我们拥有其中一方,就能通过各自的方法获取另一方(即ID3D11Device::GetImmediateContext和ID3D11DeviceContext::GetDevice)
DXGI初始化
多重采样
因为屏幕上的像素点不可以是无限小的,所以画出的直线会出现“不直”的现象。如下:
.
.
.
.
.
有明显的锯齿感。
Direct3D还支持一种在性能和效果等方面都较为折中的反走样技术,即多重采样(multisample,或MSAA,全称MultiSample Anti-Aliasing)技术。现在假设我们使用4X多重采样(原来的1个像素对应现在的2x2像素),则他同样使用4倍于游戏分辨率的后备缓冲区和深度缓冲区(注意我们在创建后备缓冲区的时候是指定分辨率而不是指定缓冲区宽高)。
页面翻转
为了避免动画中出现画面闪烁的现象,最好将动画帧完整地绘制在一种称为后备缓冲区(back buffer)的离屏纹理内。
DXGI交换链
交换链中缓存了一个或多个表面(2D纹理),它们都可以称作后备缓冲区(backbuffer)。后备缓冲区则是我们主要进行渲染的场所。
两种方法:
1.BitBlt Model(位块传输模型);
2.Flip Model(翻转模型);
DXGI交换链的创建
需要通过IDXGIFactory::CreateSwapChain方法进行。
但是,如果是要创建Direct3D 11.1对应的交换链,则需要通过IDXGIFactory2::CreateSwapChainForHwnd方法进行。
1、获取IDXGIFactory1或IDXGIFactory2接口类
2、IDXGIFactory2::CreateSwapChainForHwnd方法--Direct3D 11.1创建交换链
GameApp类
lass GameApp : public D3DApp
public:
GameApp(HINSTANCE hInstance);
~GameApp();
bool Init();