Direct3D可以引用整个资源,也可以引用资源的子集。术语子资源指的是资源的子集。
缓冲区定义为单个子资源。纹理有点复杂,因为有几种不同的纹理类型(1D、2D等),其中一些支持mipmap级别和/或纹理数组。
从最简单的情况开始,一维纹理被定义为单个子资源,如下图所示。
这意味着组成一维纹理的纹素数组包含在单个子资源中。如果您使用三个mipmap级别展开一维纹理,可以将其可视化,如下图所示。
把它看作一个由三个子资源组成的单一纹理。可以使用针对单个纹理的详细级别(LOD)对子资源进行索引。当使用纹理数组时,访问特定的子资源需要LOD和特定的纹理。另一种方法是,API将这两个信息组合成一个从零开始的子资源索引,如下图所示。
选择子资源
一些API访问一个完整的资源(例如ID3D11DeviceContext::CopyResource方法),其他一次方法访问部分资源(ID3D11DeviceContext::UpdateSubresource方法或者ID3D11DeviceContext::CopySubresourceRegion方法)。访问资源部分的方法通常使用视图描述(例如D3D11_TEX2D_ARRAY_DSV结构)来指定要访问的子资源。
下面几节中的插图显示了视图描述在访问纹理数组时使用的术语。
数组切片
给定一个纹理数组,每个带有mipmaps的纹理,一个数组切片(由白色矩形表示)包含一个纹理及其所有子资源,如下图所示。
Mip片
一个mip切片(由白色矩形表示)为数组中的每个纹理包含一个mipmap级别,如下图所示。
选择单个子资源
您可以使用这两种类型的片来选择单个子资源,如下图所示。
选择多个子资源
或者您可以使用这两种带有mipmap级别和/或纹理数量的切片来选择多个子资源,如下图所示。
注意,render-target视图只能使用单个子资源或mip片,并且不能包含来自多个mip片的子资源。也就是说,render-target视图中的每个纹理都必须是相同的大小。着色器资源视图可以选择子资源的任何矩形区域,如图所示。