Для создания программного объекта следует использовать функцию GLhandleARB glCreateProgramObjectARBС voi d)

Эта функция создает пустой программный объект и возвращает его идентификатор. Программным называется объект, к которому могут присоединяться шейдерные объекты, чем обозначается, что данные шейдерные объекты будут скомпонованы вместе. Это позволяет также проверить совместимость шейдеров (например, совместимости вершинного шейдера с фрагментным). После того как шейдерные объекты больше не нужны как часть программы, их можно отсоединить.

После того как программный объект определен, к нему присоединяют шейдерные объекты. Присоединение в данном случае означает создание ссылки на шейдерный объект, который будет скомпонован. Шейдерные объекты присоединяются к программному объекту функцией

void glAttachObjectARBCGLhandl eARB program. GLhandl eARB shader)

Функция присоединяет шейдерный объект (shader) к программному объекту (program). Это означает, что шейдер будет обрабатываться операцией компоновки данного программного объекта.

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

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

void glLinkProgramARBCGLhandleARB program)

Эта функция компонует указанный программный объект program. Если к объекту присоединены любые шейдерные объекты типа GL J/ERTEX_SHADER_ARB, они будут использоваться для создания выполняемой про!раммы, которая будет запускаться на программируемом вершинном процессоре. Если к объекту присоединены любые шейдерные объекты типа GL_FRAGMEMT_SHADER_ARB, будет создана программа, которая сможет выполняться на программируемом фрагментном процессоре.

Результат выполнения компоновки сохраняется как часть состояния программного объекта. Это будет значение G__TRL._ при успешной компоновке, когда программный объект уже готов к запуску, или GL FALSE. Этот результат можно запрашивать функцией gl GetObjectParameterARB с аргументам и program и GL 0BJЕСТ LINK STATUS ARB.

Если операция компоновки выполнена успешно и указанный программный объект уже используется (для него ранее вызывалась функция glUseProgramObjectARB), функция gl Li nkProgramARB установит выполняемые программы как часть текущего состояния для рендеринга.

В результате успешной компоновки все определенные разработчиком uniform-переменные данной программы program (см. раздел 7.7) устанавливаются в 0, каждая из них будет расположена в определенном месте, определить которое можно с помощью функции glQetlini formLocationARB. Также будут назначены индексы тем определенным разработчиком attribute-переменным (см. раздел 7,6), которым они еще не были назначены.


⇐ вернуться назад | | далее ⇒