□ Превышено количество активных attribute-переменных, поддерживаемых данной реализацией.
□ Превышен объем памяти, выделяемой для хранения uniform-переменных.
□ Превышено количество активных uniform-переменных, поддерживаемых данной реализацией.
□ В вершинном или фрагментном шейдере отсутствует функция mai п.
□ Varying-переменные, используемые во фрагментном шейдере, не объявлены соответствующим образом или вообще не объявлены в вершинном шейдере.
□ Код шейдера содержит ссылки на несуществующие или недоступные функции или переменные.
□ Глобальная переменная объявлена в разных местах с разными типами или начальными значениями.
□ Один или более связанных шейдерных объектов был не скомпилирован или скомпилирован с ошибками.
□ Некоторые строки матрицы дополнительных атрибутов превышают разрешенный максимум GL_MAX_VERTEX_ATTRIBS_ARB.
□ Для матрицы дополнительных атрибутов не найдено достаточно свободных смежных участков памяти в массиве атрибутов вершин.
После успешной компоновки программный объект становится частью текущего состояния с помощью функции gl UseProgramObjectARB. Вне зависимости от успеха компоновки информационный журнал можно получить с помощью функции glGetlnfoLogARB.
Функция gl Li nkProgramARB после успешной компоновки устанавливает созданные выполняемые программы, но только в том случае, если заданный программный объект ранее уже устанавливался в текущее состояние функцией gl UseProgramObjectARB.
Если с program связаны шейдерные объекты типа GL_VERTEX_SHADER_ARB, но нет ни одного шейдерного объекта типа GL_FRAGMENT_SHADER_ARB, созданный вершинный шейдер будет работать совместно со стандартной функциональностью обработки фрагментов OpenGL. И наоборот, если с program связаны шейдерные объекты типа GL_FRAGMENT_SHADER_ARВ, но нет ни одного шейдерного объекта типа GL_VERTEX_SHADER_ARB, созданный фрагментный шейдер будет работать совместно со стандартной функциональностью обработки вершин OpenGL.
Информационный лог программного объекта обновляется с каждой компоновкой, и в это же время создаются выполняемые программы. После операции компоновки приложение может изменять связанные шейдерные объекты, компилировать их, отсоединять, удалять, присоединять дополнительные шейдерные объекты. До следующей операции компоновки это никак не повлияет ни на информационный журнал, ни на выполняемые программы.
Примечания
Функция gl Li nkProgramARB не ожидает окончания операции компоновки и сразу же возвращает управление приложению. Все следующие вызовы функций, зависящие от результатов компоновки (например, gl UseProgramObjectARB), будут ожидать окончания компоновки. Ожидая завершения компоновки, для получения статуса компоновки приложение может использовать функцию glGetObjectParameterARB, которая будет ожидать появления результатов компоновки.