Если вершинный шейдер отсутствует, а фрагментный шейдер есть, нужно учитывать некоторые тонкости; к примеру, если обработка фрагментов происходит после обычной растеризации пиксельного прямоугольника или растрового изображения, а фрагментный шейдер использует не встроенные varying-переменные, результаты обращения к таким переменным не определены. В данном случае заполненными оказываются только встроенные varying-переменные, в которых содержатся данные о положении используемого растра.

Вообще фрагментные шейдеры могут получать данные из определенных разработчиком varying-переменных. И встроенные, и определенные в шейдере varying-переменные содержат результат интерполяции с поправкой на перспективу значений для каждой вершины.

4.2. Фрагнентный процессор

4.2.2. Uniform-переменные Состояние OpenGL доступно и для вершинных, и для фрагментных шейдеров через встроенные uniform-переменные, имена которых начинаются с зарезервированного префикса gl_ (см. раздел 4.1.2). Список uniform-переменных, из которых можно получать параметры состояния OpenGL, приведен в разделе 4.3.

Определенные разработчиком uniform-переменные можно определять и использовать во фрагментных шейдерах точно так же, как и в вершинных. Существуют OpenGL API-функции для доступа к таким переменным (см. раздел 7.7).

Максимальное количество uniform-переменных можно получить функцией gl'Get, передав в нее константу GL_MAX_FRAGMENT_UMIFORM_COMPONENTS_ARB. Суммарное количество всех uniform-переменных, и встроенных, и определенных в шейдерах, должно быть не больше этого зависящего от реализации количества.

4.2.3. Переменные для входных данных Фрагментному шейдеру переменная gl _FragÇoord доступна только для чтения, она содержит относительные оконные координаты фрагмента x,y,zw\ Jw. Эти значения - результат интерполяции примитивов после обработки вершин, используются они для формирования фрагментов. Z-компонент после вычисления смещений многоугольников содержит значение глубины. Эта встроенная переменная нужна для реализации операций вычисления оконных координат, например прозрачности экранного окна (применение di scare! к любому фрагменту с нечетными gl_FragCoord. х или g1_FragCoord.y, но не с обеими сразу).


⇐ Предыдущая| |Следующая ⇒