Тесселяционные шейдеры

Я пытаюсь изучить шейдеры тесселяции в openGL 4.1. Я понял большую часть вещей. У меня есть один вопрос.

Что такое gl_InvocationID?

Может ли кто-нибудь объяснить простым способом?


person Muhammad Awais Khalid    schedule 14.12.2014    source источник


Ответы (1)


gl_InvocationID имеет два текущих использования, но в обоих случаях представляет одну и ту же концепцию.

В геометрических шейдерах вы можете заставить GL запускать ваш геометрический шейдер несколько раз для каждого примитива. Это полезно в сценариях, когда вы хотите нарисовать одно и то же с разных точек зрения. Каждый раз, когда шейдер работает с одним и тем же набором данных, gl_InvocationID увеличивается.

Общим для шейдеров Geometry и Tessellation является то, что каждый вызов использует одни и те же входные данные. Шейдер управления тесселяцией может считывать каждую вершину во входном примитиве патча, и вам действительно нужно gl_InvocationID, чтобы понять, какую точку данных вы должны обрабатывать.

Вот почему вы обычно видите, что шейдеры управления тесселяцией написаны примерно так:

gl_out [gl_InvocationID].gl_Position = gl_in [gl_InvocationID].gl_Position;

gl_in и gl_out потенциально очень большие массивы в шейдерах управления тесселяцией (равные по размеру GL_PATCH_VERTICES), и вы должны знать, какая вершина вас интересует.

Кроме того, имейте в виду, что вам не разрешено записывать в любой индекс, кроме gl_out [gl_InvocationID], из шейдера управления тесселяцией. Это свойство продолжает вызывать шейдеры управления тесселяцией параллельно (это позволяет избежать зависимостей порядка и предотвращает перезапись данных, которые уже были записаны другим вызовом).

person Andon M. Coleman    schedule 14.12.2014
comment
Я, возможно, забыл указать на это - ваша TCS запускается (вызывается) GL_PATCH_VERTICES-много раз для каждого патча, который вы обрабатываете. - person Andon M. Coleman; 14.12.2014
comment
Уважаемый Андон, Не могли бы вы также сообщить мне, что подразумевается под GL_MAX_PATCH_VERTICES? - person Muhammad Awais Khalid; 14.12.2014
comment
@MuhammadAwaisKhalid: GL_**MAX**_PATCH_VERTICES? Это наибольшее количество контрольных точек, поддерживаемых вашей реализацией в примитиве исправления. У меня есть описание здесь. - person Andon M. Coleman; 14.12.2014
comment
Я хочу визуализировать поверхность, используя B-сплайны и шейдер тесселяции. У меня есть контрольные точки над поверхностью. Можете ли вы предложить мне несколько шагов, как это сделать.? - person Muhammad Awais Khalid; 15.12.2014