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

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

Что такое gl_InvocationID?

Любое тело, пожалуйста, объясните, как-то просто?

1 ответ

Решение

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

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

Общая тема между Geometry и Tessellation Shaders заключается в том, что каждый вызов использует одни и те же входные данные. Шейдер управления тесселяцией может читать каждую вершину во входном патче-примитиве, и вам действительно нужно 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] из шейдера управления тесселяцией. Это свойство продолжает вызывать шейдеры управления Tessellation в параллельном порядке (оно устраняет зависимости порядка и предотвращает перезапись данных, которые уже были записаны другим вызовом).

Другие вопросы по тегам