介绍Direct3D 11中的资源(十三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoyafang123/article/details/89523863

资源是场景的组成块。它们包含了Direct3D用来解释和渲染场景的大部分数据。资源是可以通过Direct3D管道访问的内存区域(这里指显存)。资源包含以下类型的数据:几何、纹理、着色器数据。

你能创建强类型或者弱类型的资源;你能控制资源是否能同时读和写。你能控制资源是否访问CPU、GPU、或者两个同时访问。

每个管道最多能激活128个资源。

Direct3D资源的生命周期为:

  • 使用ID3D11Device接口里面的创建资源方法创建一个资源。
  • 使用ID3D11DeviceContext接口的设置方法将一个资源绑定到渲染管道。
  • 使用资源的Release方法释放这个资源。

这一节包含下面的话题:

  • 强类型与弱类型
  • 资源视图

强类型与弱类型

有两种方法可以指定资源的格式(或内存占用布局)

  • 强类型----资源创建的时候就指定类型。
  • 弱类型----资源绑定到渲染管线的时候指定类型。

创建强类型资源在创建时指定类型格式。这使D3D运行时能够优化访问,特别是在创建资源时使用了指示应用程序不能映射该资源的标志。使用特定类型创建的资源不能使用视图机制重新解释,除非使用D3D10_DDI_BIND_PRESENT标志创建该资。如果D3D10_DDI_BIND_PRESENT被设置为render-target或着色器资源视图,则可以使用适当家族的任何全类型成员在这些资源上创建资源视图,即使原始资源是作为全类型创建的。

在类型较少的资源中,当资源首次创建时,数据类型是未知的。应用程序必须从可用的少类型格式中进行选择。您必须指定要分配的内存大小,以及运行时是否需要在mipmap中生成子纹理。然而,直到资源绑定到具有资源视图的管道时,才会确定确切的数据格式(内存是否被解释为整数、浮点值、无符号整数等)。由于纹理格式在绑定到管道之前保持灵活性,所以将资源称为弱类型存储。弱类型存储的优点是,只要两种格式中的组件数量和每个组件的位计数相同,就可以以另一种格式重用或重新解释它。

一个资源可以绑定到多个管道阶段,只要每个阶段都有一个惟一的视图,就可以完全限定每个位置的格式。例如,使用DXGI_FORMAT_R32G32B32A32_TYPELESS格式创建的资源可以同时用作管道中不同位置的DXGI_FORMAT_R32G32B32A32_FLOAT和DXGI_FORMAT_R32G32B32A32_UINT。

资源视图

资源可以以通用的内存格式存储,以便可以由多个管道阶段共享。管道阶段使用视图解释资源数据。资源视图在概念上类似于转换资源数据,以便可以在特定上下文中使用它。

视图可以与无类型的资源一起使用。也就是说,您可以在编译时创建资源,并在将资源绑定到管道时声明数据类型。为无类型资源创建的视图总是具有相同数量的位;视图只决定如何解释这些位。在转换(解释)数据时,实际类型必须与无类型声明属于同一族类型。例如,不能将R8G8B8A8_TYPELESS源视为R32_FLOAT资源,即使这两种格式在内存中可能大小相同。

视图还公开了其他功能,比如在着色器中读取深度/模板表面.

猜你喜欢

转载自blog.csdn.net/xiaoyafang123/article/details/89523863