Специальный оператор discard может запретить записывать фрагмент в кадровый буфер. Если выполнение доходит до этого оператора, текущий фрагмент считается отброшенным. Реализация может продолжать или завершать выполнение шейдера, а данный оператор всего лишь гарантирует, что кадровый буфер не изменится.

В языке шейдеров нет эквивалента ключевому слову goto и нет аналогов меток. Выбор оператором swi ten одного из нескольких вариантов также отсутствует.

3.6.1. Функции Работа с функциями в языке шейдеров OpenGL построена почти так же, как в С++. Функции можно перегружать по количеству и типу входных параметров, но не исключительно по возвращаемому типу. Либо тело функции, либо ее объявление должны находиться в области видимости перед вызовом функции. Типы параметров всегда проверяются. Это значит, что пустой список параметров ( ) в объявлении функции однозначный - отсутствие аргументов. Типы передаваемых значений должны совпадать с объявленными параметрами, так как не происходит неявного преобразования типов. При перегрузке выбор нужной функции очень прост.

Выход из функции с помощью оператора return происходит так же, как и в С++. Функции, которые что-то возвращают, должны возвращать значение, совпадающее по типу с объявленным.

Нельзя вызвать функцию рекурсивно ни явно, ни косвенно.

3.6.2. Соглашение о вызовах

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

Чтобы определить, когда какие параметры будут копироваться, нужно указать для них соответствующие спецификаторы: in, out или inout. Если нужно, чтобы параметры копировались в функцию только перед ее выполнением, используется in. Это спецификатор по умолчанию, и он будет выставлен автоматически, если


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