Ответ 1
В OpenGL 3+:
-
varying
устарел -
const
для... ну, констант! -
uniform
для каждого вызова (самое большее) -
in
предназначен для ввода с предыдущего этапа конвейера, то есть на максимальные значения вершины (или на фрагмент), на примитив, если используется glAttribDivisor и аппаратное обеспечение -
out
для вывода на следующий этап
Что касается выходов для флеш-шейдеров: в OpenGL3 и выше большинство встроенных переменных для вывода шейдера фрагмента (например, gl_FragColor
, с заметным исключением gl_FragDepth
) устарели и должны быть заменены на пользовательские, определены переменные out
.
Если вы выводите на фреймбуфер по умолчанию, все, что вы объявляете, когда вывод шейдера фрагмента заканчивается в цветовом буфере. Если вы связали FBO с несколькими цветными буферами (т.е. Несколько целей рендеринга), вам необходимо вручную привязать каждую из ваших переменных out
к правильному индексу цветового буфера с помощью glBindFragDataLocationIndexed
.
Все детали, которые вы могли бы пожелать как для стороны GLSL ( "сервер" ), так и для стороны OpenGL ( "клиент" ), можно найти:
- в спецификация OpenGL, в частности страницы 248-250 для вывода цветового буфера на шейдеры фрагментов.
- в спецификации GLSL, стр. 38 и далее для выходов шейдеров.