GI.ShaderAdd

From SunFlurry wiki
Jump to: navigation, search
  ShaderAdd (Функции шейдеров)
Объект:Шейдеры объекта GI
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Неверные аргументы, ошибка компиляции.
Визуальность:Нет

Функция добавляет новый шейдер с указанным типом в массив шейдеров. При добавлении происходит проверка синтаксиса и компиляция. В результате удачной операции, функция возвращает уникальный номер, по которому шейдер можно затем добавить в программу шейдеров. При ошибке будет вызвано исключение с развернутым описанием причины ошибки. Исходный текст может содержать комментарии с международными символами, использование международных символов в именах переменных и функций в исходных текстах шейдеров обычно не поддерживается. Процесс добавления шейдера включает процесс его компиляции графическим драйвером, поэтому, он может занимать небольшое время, которое может накапливаться, если необходимо добавить значительное количество шейдеров. При ошибке компиляции графический драйвер обычно возвращает развернутую информацию о ее причине.

Синтаксис

GI.ShaderAdd(<Тип шейдера (INT)>,<Исходный текст шейдера (STRING)>):<Уникальный номер (INT)>

Аргументы

  • <Тип шейдера (INT)> - Аргумент задает числовой тип шейдера. На данный момент доступны следующие типы:
    • 0: Шейдер фрагмента (fragment)
    • 1: Шейдер вершины (vertex)
    • 2: Шейдер геометрии (geometry)
    • 3: Шейдер контроля тесселяции (tesselation control)
    • 4: Шейдер оценки тесселяции (tesselation evaluation)
    • 5: Шейдер вычислений (compute)
  • <Исходный текст шейдера (STRING)> - Аргумент задает исходный текст для компиляции драйвером и превращении в псевдокод.

Возвращаемое значение

Возвращается числовое значение.

Примеры

//Примитивный шейдер-пример, создающий белый фон
Стр:="#version 130
|gl_FragColor=vec4(1,1,1,1);";

//Создадим программу из шейдера
Прг:=aGI.ShaderProgramAdd(aGI.ShaderAdd(0,Стр));

//Используем ее
aGI.ShaderProgramUse(Прг);

//Выполним рисование
aGI.glBegin(aGI.GL_QUADS);
aGI.glVertex3f(0,0,0.5);
aGI.glVertex3f(aGI.Width,0,0.5);
aGI.glVertex3f(aGI.Width,aGI.Height,0.5);
aGI.glVertex3f(0,aGI.Height,0.5);
aGI.glEnd();