В Direct3D многопроходные шейдеры просты в использовании, потому что вы можете буквально определять проходы в программе. В OpenGL это выглядит немного сложнее, потому что в шейдерной программе можно задавать столько вершинных, геометрических и фрагментных шейдеров, сколько вам нужно.
Популярный пример многопроходного шейдера - toon shader. Один проход создает реальный эффект затенения, а другой создает контур. Если у меня есть два вершинных шейдера, «cel.vert» и «outline.vert», и два фрагментных шейдера, «cel.frag» и «outline.frag» (аналогично тому, как вы это делаете в HLSL), как я могу это сделать? объединить их, чтобы создать полный шейдер Toon?
Я не хочу, чтобы вы говорили, что для этого можно использовать геометрический шейдер, потому что я просто хочу знать теорию, лежащую в основе многопроходных шейдеров GLSL;)