在阅读有关基元汇编的图形管道时,我有点困惑。在文档中说,
基元组装是从前几个阶段收集一系列顶点数据输出并将其组合成基元序列的过程。用户呈现的基元类型决定了此过程的工作方式。 此过程的输出是简单基元(直线、点或三角形(的有序序列。例如,如果输入是包含 12 个顶点的三角形条带基元,则此过程的输出将是 10 个三角形。
它说顶点数据处理成基元序列,但同时细分阶段操作基元,几何阶段操作基元(从输入基元它可以生成零个或多个基元(。我的问题是:为什么原始装配不在 Tesselation 和几何着色器阶段之前?
有不同类型的基元,每个阶段可以采用不同类型的原语作为输入,并产生不同类型的原语作为输出。
-
镶嵌评估着色器将修补程序作为输入。因此,不能将普通基元程序集放在镶嵌求值着色器之前,因为基元程序集会生成点、线或三角形。
-
几何着色器将点、线、三角形、邻接线或邻接三角形作为输入。因此,不能将普通基元程序集放在几何着色器之前,否则将无法将直线或三角形与邻接数据一起使用。
可以这样想:主要的基元组装阶段只是将一个基元流转换为可以转换为片段的基元流。因此,这是管道中的所有内容转换为片段之前发生的最后一件事。
请注意,在几何体和镶嵌评估着色器之前,确实会发生有限形式的基元程序集。从渲染管线概述:
如果曲面细分或几何着色器处于活动状态,则在这些顶点处理阶段之前执行有限形式的基元装配。这用于为这些特定的着色器阶段提供单独的基元,而不是一系列顶点。
原因是细分的结果和几何着色器阶段可以生成额外的顶点数据(您最终会得到更多的几何图形(。 在此之后,基元组装阶段可以将所有顶点数据(包括从细分和几何着色器生成的顶点数据(组装到基元中,然后进行光栅化。