纹理视图 (Direct3D 10)

在 Direct3D 10 中,纹理资源通过视图进行访问,该视图是一种用于硬件解释内存中资源的机制。 视图允许特定管道阶段仅访问所需的子资源(采用应用程序所需的表示形式)。

视图支持无类型资源的概念。 无类型资源是使用特定大小而不是特定数据类型创建的资源。 数据在绑定到管道时动态解译。

下图例举了通过创建相应的着色器资源视图,将含 6 个纹理的 2D 纹理数组绑定作为着色器资源。 然后,以纹理数组的形式实行资源寻址。 (请注意:子资源不能同时绑定为管道的输入和输出。)

图示为含 6 个纹理的纹理数组

将 2D 纹理数组作为呈现对象时,资源可以被视为带 mipmap 层级(本例中为三个层级)的 2D 纹理(本例中,含 6 个纹理)数组。

针对呈现对象创建视图对象,并命名为“CreateRenderTargetView”。 然后,调用 OMSetRenderTargets 以设置针对管道的呈现目标视图。 通过调用绘制并使用 RenderTargetArrayIndex 对数组中的相应纹理编索引的方式呈现目标。 你可以使用子资源(mipmap 层级,数组下标组合)绑定到任何子资源组。 你可以绑定到第二 mipmap 层级并且只更新所需的特定 mipmap 层级,如下图所示。

图示为仅绑定到纹理数组的第二 mipmap 层级

Direct3D 9 与 Direct3D 10 之间的差异:

  • 在 Direct3D 10 中,不再将资源直接绑定到管道,创建资源的视图,然后将视图设置为管道。 这允许在创建视图时在运行时和驱动程序中执行验证和映射,从而最大程度地减少绑定时的类型检查。

 

Direct3D 10) (资源