A geometry-shader object processes entire primitives. Use the following syntax to declare a geometry-shader object.

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

## Parameters

[maxvertexcount(NumVerts)]

[in] Declaration for the maximum number of vertices to create.

• [maxvertexcount()] - required keyword; brackets and parenthesis are required characters for correct syntax.
• NumVerts - An integer number representing the number of vertices.

[in] An ASCII string that contains a unique name for the geometry-shader function.

PrimitiveType DataType Name [ NumElements ]

PrimitiveType - Primitive type, which determines the order of the primitive data.

Primitive Type Description
point Point list
line Line list or line strip
triangle Triangle list or triangle strip

DataType - [in] An input data type; can be any HLSL data type.

Name - Argument name; this is an ASCII string.

NumElements - Array size of the input, which depends on the PrimitiveType as shown in the following table.

Primitive Type NumElements
point

[1]

You operate on only one point at a time.

line

[2]

A line requires two vertices.

triangle

[3]

A triangle requires three vertices.

[4]

A lineadj has two ends; therefore, it requires four vertices.

[6]

A triangleadj borders three more triangles; therefore, it requires six vertices.

StreamOutputObject

The declaration of the stream-output object.

None

## Remarks

The following diagram shows the various primitive types for a geometry shader object.

The following diagram shows geometry shader invocations.

## Examples

This example is from exercise 1 from the Direct3D 10 Shader Model 4.0 Workshop.

[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();
}



This object is supported in the following shader models.

• 本文已收录于以下专栏：

## Unity5 Compute && Geometry Shader

• winchyy
• 2016年11月04日 15:29
• 753

## OpenGL 几何着色器 Geometry Shader 初探

• yulinxx
• 2016年12月26日 00:35
• 625