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


объект Geometry-Shader

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

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

Параметры

[maxvertexcount(NumVerts)]

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

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

шейдера

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

Имя dataType PrimitiveType [ NumElements ]

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

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

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

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

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

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

StreamOutputObject

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

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

Никакой

Замечания

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

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

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

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

Примеры

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