□ Обеспечение актуальности языка в будущем.
При создании языка шейдеров OpenCL были приняты во внимание ранее созданные языки, такие как С и RenderMan. Разработчики языка шейдеров OpenGL надеются, что первые программы, написанные на нем, будут актуальными и через десять лет. Долговечность требует тщательной стандартизации, поэтому много усилий было потрачено на приведение стандарта к виду, удовлетворяющему как производителей аппаратного обеспечения, так и OpenGL ARB.
□ Невмешательство в более высокие уровни параллельной обработки.
Новые архитектуры графических ускорителей позволяют выполнять параллельную обработку как вершии, так и фрагментов, и чем новее модели, тем больше возможностей распараллеливания. Язык шейдеров OpenGL проектировался тщательно, с учетом возможного распараллеливания обработки на более высоких уровнях. На определение языка это повлияло не сильно, но изменения были важными.
□ Обеспечение легкости разработки программ.
Некоторые возможности языка С усложнили создание оптимизирующих компиляторов для него. Язык шейдеров OpenGL позволяет разрешить эту проблему, Например, С дает возможность использовать альтернативные имена для ссылки на одну и ту лее область памяти с помощью указателей; указатели могут передаваться как аргументы функций, и, таким образом, одна и та же область памяти может именоваться по-разному в пределах одной программы. Эти потенциальные альтернативные имена препятствуют оптимизатору, усложняют программы и делают код хуже оптимизируемым. Язык шейдеров OpenGL не поддерживает указатели и избегает альтернативных имен, используя передачу параметров по значению. В целом отсутствие альтернативных имен облегчает работу оптимизатора.
2.4.2. Основы С
Как говорилось ранее, язык шейдеров OpenGL основан на синтаксисе языка программирования ANSI С, и на первый взгляд его программы выглядят очень похожими на программы, написанные на языке С. Это было сделано умышленно, так как обычно разработчики графических программ используют С и/или C++, и им будет легче изучать и использовать язык шейдеров OpenGL.
Основная структура программы на языке шейдеров OpenGL аналогична структуре С-программы. Точкой входа группы шейдеров является функция void mai nС), тело которой находится внутри фигурных скобок. Константы, идентификаторы, операторы, выражения и предложения - понятия, идентичные для языка шейдеров и языка С. Организация потока в циклах, i -Г-then-el se и вызовы функций в языке шейдеров практически такие же, как в С.
2.4.3. Дополнения к языку С
В языке шейдеров OpenGL есть множество возможностей, которые отражают его специализированиость как языка для реализации графических алгоритмов. Далее перечислены возможности языка шейдеров OpenGL, которых нет в ANSI С.
Векторные типы здесь поддерживаются для чисел с плавающей запятой, целых и булевых значений. Для чисел с плавающей запятой они называются vec2 (два числа), vec3 (три числа), vec4 (четыре числа). С этими типами так же легко выполнять арифметические операции, как и со скалярными величинами. Чтобы сложить векторы v( и v2, нужно просто написать: vl + v2. К отдельным элементам вектора можно получить доступ либо с помощью индексации (как в массиве), либо по именованным полям (как в структуре). Значения цвета можно получить так: первое значение - добавляя . г к имени вектора, второе - добавляя . д, третье - добавляя . Ь, четвертое - добавляя .а. Значения координат доступны по именам .X, .у, .z, .w, а текстурные значения - по именам .t, .р, .q. Можно получить сразу несколько компонентов, указав их имена подряд, например .ху.