Для создания программного объекта следует использовать функцию GLhandleARB glCreateProgramObjectARB(void)
Эта функция создает пустой программный объект и возвращает его идентификатор. Программным называется объект, к которому могут присоединяться тендерные объекты, чем обозначается, что данные шейдерные объекты будут скомпонованы вместе. Это позволяет также проверить совместимость шейдеров (например, совместимости вершинного шейдера с фрагментным). После того как шейдерные объекты больше не нужны как часть программы, их можно отсоединить.
После того как программный объект определен, к нему присоединяют шейдерные объекты. Присоединение в данном случае означает создание ссылки на шейдерный объект, который будет скомпонован. Шейдерные объекты присоединяются к программному объекту функцией
void glAttachObjectARBCGLhandleARB program. GLhandleARB shader)
Функция присоединяет шейдерный объект (shader) к программному объекту (program). Это означает, что шейдер будет обрабатываться операцией компоновки данного программного объекта.
Не существует ограничения на количество шейдерных объектов, которые можно присоединять к программному объекту. Все операции, выполняемые над шейдерный объектом, действуют независимо от того, присоединен ли шейдерный объект к программному. Шейдерный объект можно присоединять даже перед тем, как загружать в него исходный код, или перед компиляцией. Другими словами, функция gl AttachObjectARB просто указывает, какие шейдерные объекты будут компоноваться с программным объектом.
Для создания программы все присоединенные шейдерные объекты должны быть скомпилированы, а программный объект скомпонован. Операция компоновки определяет расположение uniform-переменных, устанавливает ссылки между скомпилированными шейдерными объектами и проверяет совместимость вершинного и фрагментного шейдеров. Для компоновки программного объекта используется функция
void glLinkProgramARB(GLhandleARB program)
1S6
API языка шейдеров OpenGL
Эта функция компонует указанный программный объект program. Если к объекту присоединены любые шейдерные объекты типа GLJ/ERTEX_SHADER_ARB, они будут использоваться для создания выполняемой программы, которая будет запускаться на программируемом вершинном процессоре. Если к объекту присоединены любые шейдерные объекты типа GL_FRAGHENT_SHADER_ARfi, будет создана программа, которая сможет выполняться на программируемом фрагментом процессоре.