Practical Rendering and Computation with Direct3D 11
+ -

1.3资源

2024-06-13 4 0

我们在上一节中讨论的渲染和计算管道是学习Direct3D 11 API时必须理解的两个主要概念。我们需要理解的下一个主要概念是在整个管道的不同位置连接的资源。如果您认为渲染管道是一条汽车装配线,那么资源将是进入该生产线的所有零部件,这些零部件被放在一起以创建汽车。当在没有资源的情况下使用时,管道无法执行任何操作,反之亦然。

在考虑如何构建算法时,我们可以使用多种不同的资源,每种类型都有不同的用例。通常,资源分为两组:纹理和缓冲区纹理大致按尺寸划分,可以创建为一维、二维和三维形式。缓冲区在某种程度上更均匀,并且总是被认为是一维的(尽管在某些情况下,它们实际上是O维的,例如单个数据点)。即便如此,也有各种不同的缓冲区类型,包括顶点和索引缓冲区、常量缓冲区、结构化缓冲区、附加和消耗缓冲区以及字节地址缓冲区。

这些资源类型中的每一种(包括纹理和缓冲区)都提供了不同的使用模式,我们将在第3章“渲染管道”中更详细地探讨它们的所有变体。然而,关于管道资源的使用,我们现在可以讨论一些常见的总体概念。一般来说,使用资源有两个不同的域——一个来自C/C++,另一个来自HLSL。C/C++主要关注创建资源并将它们绑定/解除绑定到所需的位置。HLSL更关心实际操作和使用资源的内容。我们将在整本书中看到这种区别。

必须将资源绑定到管道才能使用。当资源绑定到管道时,它可以用作数据输入或输出,也可以同时用作数据输入和输出。这主要取决于它在何处以及如何绑定到管道。例如,作为输入装配程序的输入绑定的顶点缓冲区显然是输入,而作为渲染目标绑定到输出合并阶段的2D纹理显然是输出。但是,如果我们想在后续渲染过程中使用输出渲染目标的内容,该怎么办?它也可以绑定到像素着色器,作为在下一次渲染操作中采样的纹理资源。

为了帮助运行时(和开发人员!)确定资源的预期用途,API提供了资源视图的概念。当特定资源可以在管道中的几个不同类型的位置绑定到管道时,它必须与指定如何使用它的资源视图绑定。有四种不同类型的资源视图:渲染目标视图、深度模具视图、着色器资源视图和无序访问视图。前两个分别用于将渲染目标和深度目标绑定到管道。着色器资源视图有些不同,允许在任何可编程着色器阶段绑定资源进行读取。无序访问视图也有所不同,允许绑定资源进行同时的随机读写访问,但仅可用于计算着色器和像素着色器阶段。还有其他资源绑定类型不需要绑定到管道的资源视图。这些通常用于为单一目的创建的资源,如顶点缓冲区、索引缓冲区或常量缓冲区,并且资源使用情况并不含糊。

有这么多的选项和配置可能性,当你第一次了解每种资源类型可以做什么以及它可以用于什么时,这似乎有些令人生畏。然而,正如您将在本书后面看到的,资源的这种可配置性为设计和实现新算法提供了很大的自由度和能力。

0 篇笔记 写笔记

作者信息
站长漫谈
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!