Direct3D 10) (资源

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

每个应用程序通常将创建多个资源。 资源的示例包括:顶点缓冲区、索引缓冲区、常量缓冲区、纹理和着色器资源。 有多个确定资源的使用方式的选项。 你可以创建强类型的资源或无类型的资源;你可以控制资源是否具有读写访问权;你可以使资源仅可供 CPU 和/或 GPU 访问。 当然,将存在速度与功能之间的权衡 - 你允许资源拥有的资源越多,你将获得的性能越低。

由于应用程序通常使用许多纹理,Direct3D 还引入了纹理数组的概念来简化纹理管理。 纹理数组包含一个或多个纹理(所有这些纹理的类型和尺寸相同),可从应用程序中或通过着色器为这些纹理建立索引。 利用纹理数组,你可以将单个接口与多个索引结合使用来访问多个纹理。 你可以创建所需数目的纹理数组来管理不同的纹理类型。

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

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

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

Direct3D 10 编程指南