Geometry-Shader 对象

几何着色器对象处理整个基元。 使用以下语法声明几何着色器对象。

[maxvertexcount(NumVerts)] void ShaderNamePrimitiveType DataType Name [ NumElements ], inout StreamOutputObject ;

参数

[maxvertexcount(NumVerts)]

[in]要创建的最大顶点数的声明。

  • [maxvertexcount()] - 必需关键字;括号和括号是正确语法所必需的字符。
  • NumVerts - 表示顶点数的整数。

ShaderName

[in]包含几何着色器函数的唯一名称的 ASCII 字符串。

PrimitiveType DataType 名称 [ NumElements ]

PrimitiveType - 基元类型,用于确定基元数据的顺序。

基元类型 描述
点列表
线条列表或线条条带
三角形 三角形列表或三角形条带
lineadj 带相邻或带相邻的线条列表
三角形adj 带相邻或带相邻的三角形列表

DataType - [in] 输入数据类型;可以是任何 HLSL 数据类型

名称 - 参数名称;这是 ASCII 字符串。

NumElements - 输入的数组大小,具体取决于 PrimitiveType,如下表所示。

基元类型 NumElements
[1]
一次只对一个点进行作。
[2]
线条需要两个顶点。
三角形 [3]
三角形需要三个顶点。
lineadj [4]
lineadj 有两端;因此,它需要四个顶点。
三角形adj [6]
三角形adj 边框另外三个三角形:因此,它需要六个顶点。

StreamOutputObject

流输出对象的声明

返回值

没有

言论

下图显示了几何着色器对象的各种基元类型。

几何着色器对象的各种基元类型的插图

下图显示了几何着色器调用。

几何着色器调用插图

例子

本示例来自 Direct3D 10 着色器模型 4.0 研讨会练习 1。

[maxvertexcount(3)]
void GSScene( triangleadj GSSceneIn input[6], inout TriangleStream<PSSceneIn> OutputStream )
{   
    PSSceneIn output = (PSSceneIn)0;

    for( uint i=0; i<6; i+=2 )
    {
        output.Pos = input[i].Pos;
        output.Norm = input[i].Norm;
        output.Tex = input[i].Tex;
        
        OutputStream.Append( output );
    }
    
    OutputStream.RestartStrip();
}

最小着色器模型

以下着色器模型中支持此对象。

着色器模型 支持
着色器模型 4 和更高的着色器模型 是的

着色器模型 4