Array ( )
Вход:




Главная | OpenGL | GLSL | AI | Сеть | Примеры | Библиотека

GLSL: Настройка OpenGL для GLSL: Создание программы






Следующая схема показывает необходимые для подготовки и запуска программы шейдера шаги:


создание



Первый шаг - создание обьекта - контейнера программы.

Синтаксис OpenGL 2.0:
GLuint glCreateProgram(void);


Синтаксис расширений ARB:
GLhandleARB glCreateProgramObjectARB(void);



Одновременно вы можете создавать столько программ-шейдеров, сколько хотите. Отрендерив
то, что вам нужно, вы можете запустить другую программу, или даже вернутся к фиксированному
функционалу. Например, вы можете захотеть отрендерить чайник с шейдерами отражения и преломления,
а текстурную карту на бекграунде нарисовать с фиксированным функционалом.

Следующий шаг присоединяет шейдеры, которые вы создали [a=http://masandilov.ru/coding/articles/glsl-setup-creating-shader:a]в прошлом уроке, к программе, которую вы создали
только что. Сейчас шейдеры ещё не то что не скомпилированы, нет ещё даже их исходного кода. Всё это нужно
присоединить к текущей программе - контейнеру шейдера.

Синтаксис OpenGL 2.0 для добавления шейдера в программу:
void glAttachShader(GLuint program, GLuint shader);

// Параметры:

//    program - дескриптор программы
//    shader - дескриптор шейдера, который вы присоединяете


Синтаксис расширений ARB для добавления шейдера в программу:
void glAttachObjectARB(GLhandleARB program, GLhandleARB shader);

// Параметры:

//    program - дескриптор программы
//    shader - дескриптор шейдера, который вы присоединяете


Если у вас есть два вершинных/пикселных шейдера, вам нужно присоединить к программе оба. У вас может быть
много шейдеров любого типа, присоединенных к программе, точно как в программе на C может быть
множество модулей. Но для каждого типа шейдеров в коде только ОДНОГО шейдера может быть
функция main(), точно так же, как в программе на C.

Вы можете добавлять шейдеры к нескольким программам, например если вы планируете использовать
вершинный шейдер в разных программах.

Следующий шаг - прилинковать программу. К этому моменту шейдеры должны быть уже скомпилированы, как
показано в предыдущем разделе.


Синтаксис функции линкования шейдера для OpenGL 2.0:
void glLinkProgram(GLuint program);

// Где program - дескриптор программы.



Синтаксис функции линкования шейдера для расширений ARB:
void glLinkProgramARB(GLhandleARB program);

// Где program - дескриптор программы.



После операции линковки исходный код шейдера может быть изменён и шейдер может
быть перекомпилирован без затрагивания программы.


Как показано на схеме вверху, после линковки программы идёт функция для загрузки и использования
шейдера. Каждая программа хранится как дескриптор, и вы можете иметь столько программ/шейдеров, прилинкованных
и готовых к употреблению, сколько хотите (или сколько позволит ваше железо).

Синтаксис OpenGL 2.0:
void glUseProgram(GLuint prog);

// Где prog - дескриптор программы.


Синтаксис расширений ARB:
void glUseProgramObjectARB(GLhandleARB prog);

// Где prog - дескриптор программы.




Если программа используется и будет снова прилинкована, нет необходимости заново вызывать эту
функцию.
Если передать вместо "prog" "0", будет активирован фиксированный функционал.










Комментарии:

Войдите, чтобы оставить комментарий:












Яндекс.Метрика
 Яндекс цитирования.