Язык шейдеров OpenGL имеет множество удобных встроенных функций для операций над скалярными числами и векторами. Основная часть этих функций относятся к одной из трех категорий.
1. Функции, удобно дополняющие какую-либо аппаратную функциональность, например доступ к текстурным картам. Эти функции нельзя имитировать в шей-дере.
2. Функции для тривиальных операций (преобразование, смешивание и т. д.); они просты в использовании, но очень общие, поэтому должны непосредственно поддерживаться аппаратной базой.
3. Функции для операций, которые в той или иной мере ускоряются с помощью графического ускорителя. Тригонометрические функций тоже относятся к этой категории.
Довольно много функций носят такие же имена, как и функции из библиотек языка С, но здесь они могут принимать и векторные аргументы. Так как язык шейдеров OpenGL поддерживает перегрузку функций, встроенные в язык функции обычно имеют несколько вариантов с одним и тем же именем, различающихся типами входных и возвращаемого значений. Большинство функций существует вчетырех вариантах: одна получает float-аргументы и возвращает float, вторая получает уес2-аргументы и возвращает vee2, третья получает УесЗ-аргументы и возвращает vec3, четвертая получает уес4-аргументы и возвращает vec4.
Всякий раз при необходимости выполнять описанные вычисления предпочтительно использовать функции, а не писать собственный код. Ожидается, что встроенные функции сделаны наиболее оптимально, иногда даже поддерживаются аппаратно. Почти все встроенные функции можно использовать и в вершинном, и во фрагментном шейдере, но некоторые из них доступны только для шейдеров одного вида. Можно также заменить встроенную функцию, объявив ее заново и определив в коде шейдера с теми же именем и списком аргументов.
В качестве иллюстраций далее будет приведено графическое представление некоторых функций. Эти функции просты, и читателям не составит труда нарисовать их графики самостоятельно. Но, как будет вил'^ '', последующих глав,