К любому фрагменту шейдер может применить ключевое слово di scard, чтобы сразу отбросить его.

Если при рисовании применяется буфер глубины, а шейдер не вычисляет gl_FragDepth, глубина вычисляется с помощью стандартных операций. При обработке фрагмента шейдер записывает значение глубины для текущего фрагмента в gl^FragDepth. После того как фрагментный шейдер завершится, это значение будет приведено к значению из диапазона [0,1 ] и к форме представления числа с фиксированной запятой с таким количеством бит, чтобы соответствовать размеру буфера кадров.

Разработчик шейдера должен позаботиться о том, чтобы переменная gl_F rag-Depth заполнялась при любом варианте прохождения выполняемых ветвей кода, иначе при некоторых условиях значение gl_FragDepth останется неопределенным.

Нет гарантии, что шейдер вычислит значение глубины точно так же, как это делают обычные OpenGL-операции, которые он замещает. Значение может отличаться даже в том случае, если оно просто копируется из gl_FragCoord . z в gl_Frag-Depth. Только инвариантность глубины гарантирует, что фрагментные шейдеры будут вычислять глубину так же, как это делается в стандартных операциях.

Значения, записываемые в gl_FragCol or и gl_FragOepth, не усекаются шейдером, но могут быть приведены позже к значению из диапазона, приемлемого для буфера, в который записывается фрагмент.

Если шейдер выполняет для фрагмента di sea rd, фрагмент отбрасывается, a gl _F rag -Depth и gl_FragCo.lor становятся не нужны.

Переменные для выходных данных фрагментного шейдера находятся в глобальной области видимости, к ним можно обращаться только из фрагментного шейдера и объявлены они таким образом:

vec4 gl_FragColor; float gl_FragDepth:

4.3. Встроенные uniform-переменные

OpenGL спроектирован как конечный автомат. Существует много состояний, в которые его можно устанавливать. Когда графические примитивы передаются в OpenGL для рендеринга, их обработка зависит от текущих установок OpenGL.

Некоторые приложения используют такие возможности OpenGL в большом объеме, и большое количество кода манипулирует состоянием OpenGL, что позволяет добиться различных эффектов визуализиции.


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