Если program содержит шейдерные объекты типа GLJ/ERTEX_SHADER_ARB, но не содержит шейдерных объектов типа GL_FRAGMENT__SHAOER_ARS, вернтнный шейдер будет скомпонован как замена неявного интерфейса для стандартной функциональности. Точно так же, если program содержит шейдерные объекты типа GL_FRAGMENT_ SHADER_ARB, но не содержит шейдерных объектов типа GL_VERTEXJiHADER_ARB, фрагментный шейдер будет скомпонован как замена неявного интерфейса для стандартной функциональности.

Компоновка программного объекта может оказаться неуспешной по ряду причин. Приведем их.

□ Количество объявленных аИпЬиге-персменных больше, чем поддерживаемых реализацией.

□ Количество объявленных uniform-переменных больше, чем поддерживаемых реализацией.

□ Функция mai п отсутствует для вершинного или фрагментного шейдера.

□ Varying-переменная, используемая фрагментным шейдером, не объявлена с таким же типом или не объявлена вовсе в вершинном шейдере,

□ Существует неразрешенная ссылка на функцию или имя переменной (определение функции или переменной отсутствует).

□ Совместно используемая глобальная переменная объявлена с различными типами или начальными значениями.

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

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

Информацию о результатах компоновки можно получить функцией glGet-InfoLogARB (см. раздел 7.5) с аргументом program. Если программный объект был скомпонован успешно, результат будет содержать либо пустую строку, либо информацию о компоновке. При неудачной компоновке информационный журнал содержит информацию об ошибках, предупреждения и другие замечания.

Функция gl Li nkProgramARB не ожидает окончания операции компоновки и передает управление п риложению. Любая последующая команда, зависящая от результата компоновки, будет ожидать ее окончания. Убедиться в том, что операция компоновки закончена, можно, вызвав функцию glGetObjectParameterARB, которая будет ожидать ее окончания, а затем выдаст результат.

После успешного завершения компоновки можно устанавливать выполняемые файлы как часть текущего состояния для рендеринга функцией void gllfseProgramObjectARBCGLhandleARB program)

Она устанавливает данный программный объект program как часть текущего состояния для рендеринга. Программный объект будет содержать выполняемый модуль для вершинного процессора, если содержит один или несколько успешно скомпилированных и скомпонованных шейдерных объектов типа GLJ/ERTEX_ SHAD£R_ARB. Точно так же программный объект будет содержать выполняемый модуль для вершинного процессора, если содержит один или несколько успешно скомпилированных и скомпонованных шейдерных объектов типа GL_FRAGMENT_ SHAQER_ARB.


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