Язык шейдеров OpenGL не поддерживает указатели, строки или символы и любые операции с ними. Это язык для работы с числовыми, а не строковыми данными, н нет смысла усложнять его. Не поддерживаются здесь и числа с плавающей запятой двойной точности, а также короткие и длинные целые, беззнаковые - чтобы не обременять компилятор и графический ускоритель.
Для упрощения языка шейдеров OpenGL в нем отсутствуют также union, enum, битовые поля и побитовые операторы. Так как язык не файловый, не будет никаких директив #т ncl ude или других ссылок на имена файлов.
2.4.6. Другие отличия В некоторых случаях язык шейдеров OpenGL предоставляет ту же функциональность, что и язык С, по действия выполняются по-другому. Например, конструкторы, а не операторы приведения используются для приведения типов; конструкторы, а не инициализация в стиле С используются для инициализации неременных. В языке не существует неявного приведения типов, и конструкторы помогают
Основы
сохранять типовую безопасность языка. В конструкторах сохраняется синтаксис вызова функции, где имя функции - это название нужного типа и аргументы - значения, используемые для инициализации.
Конструкторы предоставляют гораздо более богатый выбор операций, чем простое приведение типов или инициализация в стиле С, и эта гибкость делает еще более удобной работу с векторными и матричными типами данных. Например, конструктор vec3(1.0. 2.0. 3.0) создает переменную типа vec3 из трех скалярных значений, а конструктор vec3(rtiyVec4) отбрасывает четвертый компонент из myVec4, чтобы создать значение типа vec3.
Еще одно существенное отличие состоит в том, что все входные и выходные параметры функций передаются по значению, а не по указателю, как это возможно в С.
В языке тендеров OpenGL входные параметры копируются в функцию сразу после вызова, а выходные параметры копируются обратно перед выходом из нее. Так как функция работает только с копиями параметров, она не имеет доступа к внешним данным, которые, в свою очередь, не получают дополнительных псевдонимов. Входные параметры функции обозначаются спецификатором i п, выходные - спецификатором out, а входные и выходные одновременно - спецификатором nnout (если не указано конкретно, параметры считаются входными).