DirectX 11
DirectX 基本概念
Device
- Device用于创建资源,和列举显示适配器的功能。每个Device都是实现"ID3D11Device"接口。
- 每个应用至少拥有一个Device,通过 D3D11CreateDevice 或者 D3D11CreateDeviceAndSwapChain 从安装在机器上硬件驱动创建一个Device.
Device Context
- Device Context 存储一些Device的设置。比如渲染管道的状态和通过Device的资源生成渲染命令。接口: ID3D11DeviceContext
- Device Context 包含两种渲染方式,直接渲染和简介渲染。
- 直接渲染Context获取方式: D3D11CreateDevice, D3D11CreateDeviceAndSwapChain,ID3D11Device::GetImmediateContext
- 间接渲染获取方式: ID3D11Device::CreateDeferredContext
Resouce
为渲染管道提供数据和定义场景中那些是需要渲染的。 Resouce能够载入和动态加载游戏媒体资源,例如,texture data(贴图),vertex data(顶点数据),shader data(着色器)
Resouce Buffers
顶级几何图像数据
Textures
存储像素集合。有多多种类型,例如:1D,2D,3D,不论哪种类型,都是存储像素数据,可以根据不同的解析方式使用。 接口: - m_deviceResources->GetD3DDevice()->CreateVertexShader(
- m_deviceResources->GetD3DDevice()->CreatePixelShader(
Pipline
其中vertex and geometry shaders提供了可编程渲染,也就是通过HLSL文件进行自定义。
MultiThreading
- ID3D11DeviceContext 不是线程安全的,一般情况下,一个线程独占一个Context,如果需要共享则需要考虑线程安全问题。
- ID3D11Device 是线程安全的
代码解析
//class App
ref class App sealed : public Windows::ApplicationModel::Core::IFrameworkView
// class App继承实现了IFrameworkView的接口
virtual void Initialize(Windows::ApplicationModel::Core::CoreApplicationView^ applicationView);
virtual void SetWindow(Windows::UI::Core::CoreWindow^ window);
virtual void Load(Platform::String^ entryPoint);
virtual void Run();
virtual void Uninitialize();
// sealed 关键字?
// 在Load阶段,创建并实例化class AppMain(DirectX11的入口更新和渲染窗口内容)参考: App::Run实现
// App1Main DirectX 的主要实现
// TODO
//
class App1Main : public DX::IDeviceNotify
// class Sample3DSceneRenderer
// 加载自定义顶点渲染器
m_deviceResources->GetD3DDevice()->CreateVertexShader(
// 加载自定义像素渲染器
m_deviceResources->GetD3DDevice()->CreatePixelShader(