Direct3D 11 中的资源介绍

资源是组建场景的材料。它包含了大多数D3D用于解析和渲染场景的数据。所谓资源就是一片内存区域,这个区域可以被Direct3D管线访问。

你可以创建强类型或者无类型的资源,也可以控制资源是否同时拥有读和写的访问,还可以使资源仅能被CPU或者GPU访问,或者使两者都可以访问。每一个管线阶段可用最大128个资源。

Direct3D资源的生命周期是:

# 使用ID3D11Device接口中的方法创建资源。

# 使用一个上下文和ID3D11DeviceContext中的方法把一个资源和管线绑定。

# 调用资源的Release方法释放一个资源。

强类型与弱类型

有两种方式去指定一个资源的内存布局结构:

# 有类型的(Typed)- 当创建资源时指定资源的类型。

# 无类型的(Typeless)- 在资源绑定到管线时指定资源的类型。

创建的有类型的资源严格资源被创建的格式,这么做的好处是在运行时优化了访问速度(特别是在创建资源时使用标记指明本身不能被应用程序映射)。有类型的资源不能使用view机制重新解析为其他意义的资源,除非在创建时候指明了D3D10_DDI_BIND_PRESENT标记。If D3D10_DDI_BIND_PRESENT is set render-target or shader resource views can be created on these resources using any of the fully typed members of the appropriate family, even if the original resource was created as fully typed.(不知道该怎么翻 - -!)

无类型的资源在创建时是不知道数据类型的。应用程序必须选择可用的无类型格式(参考 DXGI_FORMAT)。你必须指定还要分配的内存大小和运行时是否需要在mipmap中生成子材质。不管怎样,资源的类型直到使用资源视图(resource view)绑定到管线时才能知道。就像材质格式在材质被绑定到管线前一直是灵活的一样的,资源也可以看做是一种弱类型的存储。弱类型的资源优势在于可以诶重用,重解析。

一个独立的资源可以被绑定到多个管线阶段,但每个管线阶段的视图必须区别与其他阶段,保证是唯一的。比如:使用DXGI_FORMAT_R32G32B32A32_TYPELESS创建的资源可以在管线中其他地方同时使用DXGI_FORMAT_R32G32B32A32_FLOAT和DXGI_FORMAT_R32G32B32A32_UINT解析。

资源视图

资源可以按照藏贵内存格式来存贮,以便被多个管线阶段共享。一个管线阶段使用一种视图来解析资源。

视图可以与无类型资源何用。你可以在编译时期建立一个资源,然后在资源绑定到管线时候设置他的类型。无类型资源的关联视图总是有相同的bit位,由视图类型决定这些bit如何被解析。在转换数据时,资源实际的类型必须和相关联的无类型声明相对应。举例来说:R8G8B8A8_TYPELESS类型的资源不能被转换为一个R32_FLOAT类型的资源,即使他们有相同的大小。

一个视图同时也提供一些其他能力诸如在着色器中读取后备深度/(模版)表面,在一个单独的pass中动态生成一个立方图,同时渲染一个体积影的多片段.

几种资源接口

# ID3D11DepthStencilView 在深度模版测试中访问一个纹理资源.

# ID3D11RenderTargetView 访问一个用于当作渲染目标的纹理资源.

# ID3D11ShaderResourceView 访问一个着色器资源,比如常量缓冲,纹理缓冲,一个纹理或者一个采样器.

# ID3D11UnorderedAccessView 使用像素着色器或者计算着色器访问一个无序资源.

over~

posted on 2011-03-15 22:50  Meta.Grfx  阅读(2095)  评论(0编辑  收藏  举报

导航