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