Результат выполнения компоновки сохраняется какчасть состояния программного объекта. Это будет 3Ha4eHHe.GL_TRUE при успешной компоновке, когда программный объект уже готов к запуску, или GL FALSE. Этот результат можно запрашивать функцией gl GetObjectParameterARB с аргументам и program и GL JDBJECTLINK J>TATUS_ARB.
Если операция компоновки выполнена успешно и указанный программный объект уже используется (для него ранее вызывалась функция glUseProgramObjectARB), функция glLinkProgramARB установит выполняемые программы как часть текущего состояния для рендеринга.
В результате успешной компоновки все определенные разработчиком uniform-переменные данной программы program (см. раздел 7.7) устанавливаются в 0, каждая из них будет расположена в определенном месте, определить которое можно с помощью функции gl Getllni foritiLocationARB. Также будут назначены индексы тем определенным разработчиком attribute-переменным (см. раздел 7.6), которым они еще не были назначены.
Если program содержит шейдерные объекты типа GLJ/ERTEX_SHADER_ARB, но не содержит шейдерных объектов типа GL_FRAGMENT_SHADER_ARB, вершинный шейдер будет скомпонован как замена неявного интерфейса для стандартной функциональности. Точно так же, если program содержит шейдерные объекты типа GL_FRAGMENT_ SHADER_ARB, но не содержит шейдерных объектов типа GL_VERTEX SHADER_ARB, фраг-ментный шейдер будет скомпонован как замена неявного интерфейса для стандартной функциональности.
Компоновка программного объекта может оказаться неуспешной по ряду причин. Приведем их.
□ Количество объявленных attribute-переменных больше, чем поддерживаемых реализацией.
□ Количество объявленных uniform-переменных больше, чем поддерживаемых реализацией.
□ Функция mai п отсутствует для вершинного или фрагментного шейдера.
□ Varying-переменная, используемая фрагментным шейдером, не объявлена с таким же типом или не объявлена вовсе в вершинном шейдере.
□ Существует неразрешенная ссылка на функцию или имя переменной (определение функции или переменной отсутствует).