Если текстурная функция без вычисления глубины вызывается для семплера, текстура которого включает в себя глубину, результаты непредсказуемы. То же самое верно, если текстурная функция с вычислением глубины применяется для текстуры без глубины.
5.8. Функции обработки фрагмента Функции обработки фрагментов доступны только для фрагментных шейдеров, тех, что будут использоваться во фрагментном процессоре. В эту категорию попадают три функции, две из которых используются для получения производных, а третья - для оценки ширины фильтра, используемого в текстурах с антиалиасингом.
Функции производных, dFdx и dFdy, определяют скорость изменения результата математического выражения (скорость изменения функции в математическом смысле). Функция dFdx(p) вычисляет производную выражения р в направлениих оконных координат, а функция dFdy(p) вычисляет производную выраженияр в направлении у оконных координат. Эти значения показывают, как быстро меняется значение функции в оконном пространстве, и эта информация оказывается полезной для предотвращения неровностей изображения. Например, если текстурные координаты меняются слишком быстро, возможно, будет лучше устанавливать цвет как средний по текстуре, чтобы избежать эффекта наложения.
Применение этих функций имеет смысл только в отношении выражений, которые различаются от фрагмента к фрагменту. Так как значение uniform-переменной от одного пиксела к другому не меняется, производная и по х, и по у всегда будет иметь значение 0 (табл. 5.8).
Таблица 5.8. Функции обработки фрагмента Синтаксис Описание
float dFdx (float р) vec2 dFdx (vec2 p) Возвращает значение производной по х vec3 dFdx (vec3 p) vec4 dFdx (vec4 p) для аргумента p
float dFdy (float p) vec2 dFdy (vec2 p) Возвращает значение производной по у vec3 dFdy (vec3 p) vec4 dFdy (vec4 p) для аргумента £
float fwidth (float p) vec2 fwidth (Vec2 p) Возвращает сумму абсолютной производной по х vec3 fwidth (vec3 р) vec4 fwidth (vec4 p) и /для аргумента p, то есть
return = abs(dFdx( p)) + abs(dFdy( p))