2016-02-07 3 views
4

Это, наверное, глупый вопрос, но ...:Пишет `gl_Position` в Vertex Shader necessery когда есть Geometry Shader

Пусть у меня есть геометрия шейдеров, которая вычисляет свой выход gl_Position из других входов чем gl_in[].gl_Position. Если предыдущие этапы трубопровода (вершина и тесселяция) не записываются в их out gl_Position, значит, действие всего конвейера по-прежнему остается четким?

Или иначе, значение gl_Position оказывает какое-либо влияние на функционирование GL перед завершением шейдера Geometry? Если нет, это означает, что я могу просто использовать его в качестве дополнительного слота для передачи данных без какой-либо специальной пространственной интерпретации между этапами, правильно?

(вопрос предполагает OpenGL 4.5 вперед профиль.)

ответ

2

gl_Position только должен быть написан на заключительном этапе Vertex Processing (В.С., тесселяции и GS) в конвейер визуализации. Поэтому, если у вас есть активный GS, VS, который подключается к нему, вообще не нужно записывать в gl_Position. Или он может помещать в него любые произвольные данные vec4.

Обратите внимание, что gl_Position все равно необходимо написать независимо от этапа обработки конечной вершины. Предполагая, что вы хотите растрировать, конечно. И нет, это не легкомысленно; вы можете делать обратную связь.

Если нет, это означает, что я могу просто использовать его в качестве дополнительного слота для передачи данных без какой-либо специальной пространственной интерпретации между этапами, правильно?

Если есть ГС, то ни один из выходов из предыдущих этапов шейдеров не будет иметь какую-либо специальную «пространственную интерпретацию». gl_Position не является особенным в этом отношении.

Интерполяция - это функция Растеризатора, которая происходит после обработки вершин. Действительно, в GLSL 4.30+ классификаторы интерполяции на вставках фрагментарного шейдера являются только, которые имеют значение. Они больше не используются для сопоставления интерфейсов.

+0

Отличный ответ. Я просто пытаюсь найти место в спецификации, которое подтверждает это. Пока моими лучшими кандидатами являются: «Координаты клипа для результата вершины из выполнения шейдера, который дает координату вершины gl_Position». из раздела «gl4.4core 13.6» и эквивалентных «Координаты клипа для результата вершины из вершины или, если активна, выполнение шейдера геометрии, которая дает вершинную координату gl_Position». из раздела «gl3.3core 2.13». Я в нужном месте? – Baggers