Объект Geometry-Shader

Объект Geometry-Shader обрабатывает все примитивы. Используйте следующий синтаксис, чтобы объявить объект Geometry-Shader.

[максвертекскаунт (нумвертс) ] void Шадернаме ( тип PrimitiveType DataType Name [ нумелементс ], InOut стреамаутпутобжект );

Параметры

[максвертекскаунт (нумвертс)]

[в ] объявлении для максимального числа создаваемых вершин.

  • [максвертекскаунт () ] — обязательное ключевое слово; квадратные скобки и круглые скобки являются обязательными символами для правильного синтаксиса.
  • Нумвертс — целое число, представляющее количество вершин.

шадернаме

[в ] строке ASCII, содержащей уникальное имя для функции Geometry-Shader.

Имя типа данных тип PrimitiveType [ нумелементс ]

Тип PrimitiveType -примитивный тип, который определяет порядок примитивных данных.

Тип-примитив Описание
точки Список точек
line Линейный список или полоса строк
значок Список треугольников или полоса треугольников
линеадж Список линий с соседкой или линейной полосой с соседкой
трианглеадж Список треугольников с соседкой или треугольной полосой с соседкой

Тип данных - [ в ] типе входных данных аргумент может иметь любой тип данных HLSL.

Name — имя аргумента; Это строка ASCII.

Нумелементс — размер массива входных данных, который зависит от тип PrimitiveType , как показано в следующей таблице.

Тип-примитив нумелементс
точки [1]
Вы действуете только на один момент времени.
line [2]
Для линии требуется две вершины.
значок [3]
Для треугольника требуется три вершины.
линеадж [4]
У линеадж есть две конечные точки; Поэтому требуется четыре вершины.
трианглеадж [6]
Трианглеадж границы еще три треугольника; Поэтому для него требуется шесть вершин.

стреамаутпутобжект

Объявление объекта потока вывода.

Возвращаемое значение

Нет

Remarks

На следующей диаграмме показаны различные типы-примитивы для объекта шейдера Geometry.

Иллюстрация различных типов-примитивов для объекта шейдера Geometry

На следующей диаграмме показаны вызовы шейдера Geometry.

Иллюстрация вызовов шейдера Geometry

Примеры

В этом примере из упражнения 1 в семинаре по модели шейдера Direct3D 10 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();
}

Минимальная модель шейдера

Этот объект поддерживается в следующих моделях шейдеров.

Модель шейдера Поддерживается
Модели шейдеров 4 и более поздних шейдеров Да

Модель шейдера 4