如何:为多个输出流编制索引
在着色器模型 5 中,几何着色器最多可以支持 4 个单独的流。 这意味着单个着色器可以在一到四个输出流之间输出,具体取决于声明的流数。
为多个输出流编制索引
使用流模板类型定义数据流。
inout PointStream<OutVertex1> myStream1,
使用流模板类型定义第二个数据流。
inout PointStream<OutVertex2> myStream2 )
使用流输出对象内部函数 ((如 Append 或 RestartStrip) )将数据输出到 (或两者) 流。
void MyGS( InVertex verts[2], inout PointStream<OutVertex1> myStream1, inout PointStream<OutVertex2> myStream2 ) { OutVertex1 myVert1 = TransformVertex1( verts[0] ); OutVertex2 myVert2 = TransformVertex2( verts[1] ); myStream1.Append( myVert1 ); myStream2.Append( myVert2 ); }
使用单个输出流时,可以发出三角形带、线条带或点列表。 在流出缓冲区中存储三角形和线条带时,它们将分别扩展到三角形和线条列表。 还可以光栅化一个流,而不将其发送到内存缓冲区。
使用多个输出流时,所有流都必须包含点,并且最多可以将一个输出流发送到光栅器。 更常见的是,应用程序不会光栅化任何流。
将数据流式传输到缓冲区后,可以使用该数据来呈现任何基元类型,而不仅仅是用于填充缓冲区的基元类型。
几何着色器的总输出限制为 1024 个标量。 如果存在多个流,则从最大流类型乘以最大顶点计数计算标量数。
着色器模型 4 和着色器模型 5 之间的差异:
着色器模型 4:
- 流输出的最大标量数为 64。
- 每个组件的寄存器掩码必须在索引范围内匹配。
- 流输出的最大标量数为 128。
- 每个组件寄存器掩码不需要在索引范围内匹配。
- 输出的动态索引必须跨所有流合法。
- 内插模式不需要匹配流。