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(


参考

DirectX 11 Overview HLSL Guide