Objek Geometry-Shader

Objek geometri-shader memproses seluruh primitif. Gunakan sintaks berikut untuk mendeklarasikan objek geometry-shader.

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

Parameter

[maxvertexcount(NumVerts)]

[in] Deklarasi untuk jumlah maksimum simpul yang akan dibuat.

  • [maxvertexcount()] - kata kunci yang diperlukan; tanda kurung dan karakter yang diperlukan untuk sintaksis yang benar.
  • NumVerts - Bilangan bulat yang menunjukkan jumlah simpul.

ShaderName

[in] String ASCII yang berisi nama unik untuk fungsi geometry-shader.

PrimitiveType DataType Name [ NumElements ]

PrimitiveType - Jenis primitif, yang menentukan urutan data primitif.

Jenis Primitif Deskripsi
Titik Daftar titik
Baris Daftar garis atau garis
segitiga Daftar segitiga atau strip segitiga
lineadj Daftar garis dengan bersebelahan atau garis garis dengan bersebelahan
triangleadj Daftar segitiga dengan strip segitiga atau segitiga dengan ketersingkatan

DataType - [in] Jenis data input; dapat berupa jenis data HLSL apa pun.

Nama - Nama argumen; ini adalah string ASCII.

NumElements - Ukuran array input, yang bergantung pada PrimitiveType seperti yang ditunjukkan dalam tabel berikut.

Jenis Primitif NumElements
Titik [1]
Anda hanya beroperasi pada satu titik pada satu waktu.
Baris [2]
Garis membutuhkan dua simpul.
segitiga [3]
Segitiga membutuhkan tiga simpul.
lineadj [4]
Lineadj memiliki dua ujung; oleh karena itu, dibutuhkan empat simpul.
triangleadj [6]
Segitiga berbatasan dengan tiga segitiga lagi; oleh karena itu, dibutuhkan enam simpul.

StreamOutputObject

Deklarasi objek stream-output.

Tampilkan Nilai

Tidak ada

Keterangan

Diagram berikut menunjukkan berbagai jenis primitif untuk objek shader geometri.

ilustrasi berbagai jenis primitif untuk objek shader geometri

Diagram berikut menunjukkan pemanggilan shader geometri.

ilustrasi pemanggilan shader geometri

Contoh

Contoh ini berasal dari latihan 1 dari Lokakarya Direct3D 10 Shader Model 4.0.

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

Minimum Shader Model

Objek ini didukung dalam model shader berikut.

Shader Model Didukung
Model Shader 4 dan model shader yang lebih tinggi ya

Model Shader 4