Я пытаюсь изучить шейдеры тесселяции в openGL 4.1. Я понял большую часть вещей. У меня есть один вопрос.
Что такое gl_InvocationID?
Может ли кто-нибудь объяснить простым способом?
Я пытаюсь изучить шейдеры тесселяции в openGL 4.1. Я понял большую часть вещей. У меня есть один вопрос.
Что такое gl_InvocationID?
Может ли кто-нибудь объяснить простым способом?
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]
, из шейдера управления тесселяцией. Это свойство продолжает вызывать шейдеры управления тесселяцией параллельно (это позволяет избежать зависимостей порядка и предотвращает перезапись данных, которые уже были записаны другим вызовом).
GL_PATCH_VERTICES
-много раз для каждого патча, который вы обрабатываете.
- person Andon M. Coleman; 14.12.2014
GL_**MAX**_PATCH_VERTICES
? Это наибольшее количество контрольных точек, поддерживаемых вашей реализацией в примитиве исправления. У меня есть описание здесь.
- person Andon M. Coleman; 14.12.2014