Поделиться через


Объект Geometry-Shader

Объект геометрического шейдера обрабатывает целые примитивы. Используйте следующий синтаксис для объявления объекта geometry-shader.

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

Параметры

[maxvertexcount(NumVerts)]

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

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

Имя шейдера

[in] Строка ASCII, содержащая уникальное имя для функции геометрического шейдера.

PrimitiveType DataType Name [ NumElements ]

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

Примитивный тип Описание
Точки Список точек
line Список строк или полоса линий
треугольник Список треугольников или полоса треугольников
lineadj Список строк с примыкаемостью или полоса линий с примыкаемостью
triangleadj Список треугольников с примыкаемостью или полоска треугольника с примыкаемостью

DataType — [in] Тип входных данных; может быть любым типом данных HLSL.

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

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

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

StreamOutputObject

Объявление объекта stream-output.

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

Нет

Remarks

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

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

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

Иллюстрация вызовов геометрических шейдеров

Примеры

Этот пример является примером из упражнения 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