Geometry-Shader 对象

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

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

参数

[maxvertexcount (NumVerts) ]

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

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

ShaderName

[in]包含 geometry-shader 函数的唯一名称的 ASCII 字符串。

PrimitiveType DataType 名称 [ NumElements ]

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

基元类型 说明
point 点列表
line 线条列表或线条带
三角形 三角形列表或三角形带
lineadj 带相邻的线条列表或带相邻的行带
triangleadj 带相邻的三角形列表或带相邻的三角形带

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

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

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

基元类型 NumElements
point [1]
一次只对一个点进行操作。
line [2]
一条线需要两个顶点。
三角形 [3]
三角形需要三个顶点。
lineadj [4]
lineadj 有两端:因此,它需要四个顶点。
triangleadj [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