DirectX11龙书-第四章:渲染管线

  1. COM
  2. 纹理
  3. 交换链和页面翻转
  4. 深度缓冲区
  5. 纹理资源视图
    1. 资源视图的作用
  6. 多重采样
  7. 特征等级
  8. 总结

COM

  • 我们必须使用特定的函数活其他的COM接口方法来获取指向COM接口的指针,而不能用new
  • 释放用其基类IUnkown的Release,而不能用delete
  • COM接口都以I为前缀,例如ID3D11Texture2D

纹理

  • 2D纹理是一种数据元素矩阵,可以用于存储图像数据,每个元素存储一个像素颜色。也可以存储纹理法线
  • 纹理只支持特定格式的数据类型。有DXGI_FORMAT枚举类型描述
  • 存在一种弱类型(typeless),预先分配空间,但不解释类型。

交换链和页面翻转

  • 离屏(off-screen) => 后台缓冲区(back buffer)
  • 前台缓冲区(front buffer)
  • 前后缓冲区互换的行为为呈现(presenting)

    这一操作只是交换两者指针指向的位置,所以速度很快

  • 前后缓冲区组成一个交换链(swap chain)

深度缓冲区

  • 深度缓冲区与后台缓冲区大小一样
  • D3D11 判断前后遮挡使用 深度缓存(depth buffering)或Z缓存(z-buffering)

纹理资源视图

  • 纹理可以被绑定到渲染管线(rendering pipeline)的不同阶段(stage)。

    将纹理作为渲染目标(即,Direct3D渲染到纹理,在渲染结果暂存在纹理中),使用标志D3D11_BIND_RENDER_TARGET
    着色器资源(即,在着色器中对纹理进行采样),使用标志D3D10_BIND_SHADER_RESOURCE

  • 纹理不能直接绑定到渲染管线,只能把与资源关联的资源视图绑定到不同的管线阶段

  • Direct3D始终要求我们在初始化时为纹理创建相关的资源视图(resource view),渲染目标视图(ID3D11RenderTargetView)和着色器资源视图(ID3D11ShaderResourceView)
  • 创建资源时一定要指定绑定标志值,不然将无法创建资源视图

    资源视图的作用

  • (1)告诉Direct3D如何使用资源(即,指定资源所要绑定的管线阶段);
  • (2)如果在创建资源时指定的是弱类型(typeless)格式,那么在为它创建资源视图时就必须指定明确的资源类型。对于弱类型格式,纹理元素可能会在一个管线阶段中视为浮点数,而在另一个管线阶段中视为整数。

多重采样

  • 超级采样(supersampling):比如4x ssaa,将屏幕分别率提高4倍,然后每4个像素采样后取平均值。相当于深度缓存和后台缓存都扩大4倍。
  • 多重采样(multisampling):比如4x msaa,只在三角形的边缘进行处理。且每一个像素分为4个子像素。深度缓存和后台缓存也会扩大4倍。

特征等级

  • 特征等级定义了一系列支持不同d3d功能的相应的等级,用意即如果一个用户的硬件不支持某一特征等级,程序可以选择较低的等级。

总结

https://enjoyphysics.cn/Article1513