Это было в основном освещено в комментариях, но в интересах иметь ответ на месте, позвольте мне резюмировать, какие предопределенные переменные GLSL исчезли в основном профиле, а какие все еще там.
В большинстве случаев предопределенные переменные были удалены из шейдеров основного профиля как прямое следствие того, что большие части фиксированного конвейера функций были удалены из API. Было много uniform
переменных, которые отражали состояние, которого просто больше не существует. Типичные примеры включают:
- Фиксированное состояние преобразования функции (
gl_ModelViewMatrix
, gl_ProjectionMatrix
и т. д.).
- Параметры освещения (
gl_Light*
).
- Параметры материала (
gl_Material*
).
- Обрезать плоскости (
gl_Clip*
).
Точно так же входные данные вершинного шейдера, которые получили фиксированные атрибуты вершины функции, исчезли, потому что в основном профиле поддерживаются только общие атрибуты. К ним относятся gl_Vertex
, gl_Normal
, gl_Color
и т. д.
Также раньше были некоторые предопределенные переменные varying
, такие как gl_FrontColor
, gl_BackColor
и gl_TexCoord
, которые исчезли, и их можно легко заменить, определив собственные переменные out
/in
.
Также исчезли предопределенные выходные данные фрагментного шейдера gl_FragColor
и gl_FragData
. Это интересный случай, поскольку причина не в устаревании функций. Насколько я понимаю, они устарели, потому что они не были достаточно гибкими, чтобы соответствовать текущей функциональности. Поскольку тип gl_FragColor
был vec4
, вывод фрагментного шейдера должен был быть вектором с плавающими компонентами. Это не работает, если ваша цель рендеринга имеет другой тип, например. если вы визуализируете целочисленную текстуру.
Итак, какие предопределенные переменные еще остались? Хотя их гораздо меньше, чем раньше, все же есть несколько, и все они относятся к фиксированным функциям, которые все еще присутствуют в программируемом конвейере. Примеры включают:
- Интерфейс координат вершин между вершинным шейдером и фрагментным шейдером, который в основном состоит из выходных данных
gl_Position
в вершинном шейдере и входных данных gl_FragCoord
во фрагментном шейдере. Между вершинными и фрагментными шейдерами все еще есть ряд фиксированных функциональных блоков, таких как отсечение и растеризация. Эти фиксированные функциональные блоки работают с координатами вершин, поэтому предопределенные переменные по-прежнему имеют смысл.
- Некоторые переменные, связанные с созданием экземпляров (
gl_VertexID
, gl_InstanceID
).
gl_ClipDistance
для поддержки отсечения с произвольными плоскостями, которые также все еще присутствуют в форме фиксированной функции.
gl_FrontFacing
. Порядок намотки треугольников оценивается фиксированной функцией и становится доступным для фрагментного шейдера.
Ни один из этих списков не является исчерпывающим, но я надеюсь, что это полезный обзор, дающий некоторую предысторию. Как всегда, документы спецификации дают окончательный и полный ответ.
person
Reto Koradi
schedule
26.06.2014
gl_Color
,gl_Normal
и т. д. - person Brett Hale   schedule 25.06.2014gl_*
устарели, и думал, что все они устарели. Спасибо тебе за пояснение. В любом случае, как мне заставить его работать с пользовательской выходной переменной? Или вы просто используете атрибут gl_Position для установки позиции вершины? - person michy04   schedule 25.06.2014gl_Position
. Эта переменная особенная, потому что она определяет координаты, которые используются фиксированными функциональными блоками между вершинными и фрагментными шейдерами (отсечение, растеризация и т. д.). Вы не можете заменить его переменной, которую вы определяете. В дополнение к примерам, уже упомянутым @BrettHale,gl_FragColor
, который раньше был предопределенным выходом шейдера фрагмента, также устарел. - person Reto Koradi   schedule 25.06.2014gl_Position
является частьюgl_PerVertex
. Точнее, это необязательная часть, все еще есть части с фиксированными функциями конвейера рендеринга, которые требуютgl_PerVertex.gl_Position
.gl_FragCoord
, как вы упомянули, фактически рассчитывается из этой переменной - после деления наw
и преобразования области просмотра. - person Andon M. Coleman   schedule 26.06.2014