资源 (Direct3D 10)

资源是内存中可由 Direct3D 管道访问的区域。 为了使管道能够高效地访问内存,提供给管道的数据(例如输入几何图形、着色器资源、纹理等)必须存储在资源中。 有两种类型的资源从中派生所有 Direct3D 资源:缓冲区或纹理。 每个管道阶段最多可以有 128 个资源处于活动状态。

每个应用程序通常会创建许多资源。 资源示例包括:顶点缓冲区、索引缓冲区、常量缓冲区、纹理和着色器资源。 有几个选项可以确定如何使用资源。 可以创建强类型化或类型较少的资源;可以控制资源是否具有读取和写入访问权限;你可以使资源只能访问 CPU、GPU 或两者。 自然,会有速度与功能权衡 - 允许资源拥有的功能越多,性能应降低。

由于应用程序经常使用许多纹理,Direct3D 还引入了纹理数组的概念来简化纹理管理。 纹理数组包含一个或多个纹理(所有相同类型和维度),这些纹理可以从应用程序内或着色器中编制索引。 纹理数组允许使用具有多个索引的单个接口来访问多个纹理。 可以根据需要创建任意数量的纹理数组来管理不同的纹理类型。

创建应用程序将使用的资源后,可以连接或将每个资源绑定到将使用它们的管道阶段。 这是通过调用绑定 API 来实现的,该 API 采用指向资源的指针。 由于多个管道阶段可能需要访问同一资源,Direct3D 10 引入了资源视图的概念。 视图标识可以访问的资源部分。 可以创建 m 视图或资源并将其绑定到 n 个管道阶段,前提是你遵循共享资源的绑定规则(如果没有,运行时将在编译时生成错误)。

资源视图提供用于访问资源(纹理、缓冲区等)的常规模型。 由于可以使用视图告知运行时要访问哪些数据以及如何访问数据,因此资源视图允许创建类型较少的资源。 也就是说,可以在编译时为给定大小创建资源,然后在资源绑定到管道时声明资源中的数据类型。 视图公开了许多使用资源的新功能,例如能够读取着色器中的回退深度/模具图面、在单个传递中生成动态多维数据集地图,以及同时呈现到卷的多个切片。

若要详细了解基本资源类型、纹理数组以及如何创建和使用资源,请参阅以下其他主题:

Direct3D 10 编程指南