glLinkProgram - компонує програмний об'єкт

C-специфікація

void glLinkProgram (GLuint program) ;

Параметри

program передає ідентифікатор програмного об'єкта, який необхідно зкомпонувати.

Опис

Функція glLinkProgram компонує програмний об'єкт вказаний за допомогою значення параметру program. Якщо шейдерний об'єкт типу GL_VERTEX_SHADER прикріплений до програми program, він буде використовуватися для створення виконуваної програми, яка буде виконуватись на програмованому вертексному процесорі. Якщо будь-який шейдерний об'єкт типу GL_FRAGMENT_SHADER прикріплений до програми program, він буде використовуватися для створення виконуваної програми, яка буде виконуватися на програмованому фрагментному процесорі.

Статус операції компонування буде зберігатися у якості частини стану програмного об'єкта. Це значення буде встановлено у GL_TRUE якщо програмний об'єкт був скомпонований без помилок і готовий до використання, і GL_FALSE в іншому випадку. Він може бути отриманий за допомогою функції glGetProgram з аргументами program і GL_LINK_STATUS.

У якості результату успішної операції компонування, усі активні визначені користувачем уніфіковані змінні, які належать до програми program будуть ініціалізовані у значення 0, і кожній уніфікованій змінній програмного об'єкта буде надано розміщення, яке можна отримати за допомогою виклику функції glGetUniformLocation. Також, будь-які визначені користувачем активні атрибутні змінні, які не були зв'язаними до загального вертексного атрибутного індексу будуть зв'язані з ним.

Компонування програмного об'єкта може завершитись невдало з багатьох причин, як вказано у специфікації шейдерної мови OpenGL (OpenGL Shading Language Specification). Наступний список містить деякі причини, які можуть спричинити помилку компонування.

  • Кількість активних атрибутних змінних підтримуваних поточною реалізацією OpenGL вичерпано.
  • Обмеження простору зберігання для уніфікованих змінних вичерпано.
  • Кількість активних уніфікованих змінних підтримуване поточною реалізацією системи OpenGL вичерпано.
  • Обов'язкова функція main відсутня у вертексному або фрагментному шейдері.
  • Змінна використовувана у фрагментному шейдері не визначена аналогічним чином (або взагалі не визначена) у вертексному шейдері.
  • Адреса до функції або змінної залишилась невизначеною.
  • Розподілена глобальна сутність оголошена з двома різними типами або двома різними початковими значеннями.
  • Одне або декілька під'єднаних шейдерних об'єктів не було успішно скомпільовано.
  • Зв'язування загальної матриці атрибутів спричинило вихід деяких рядків матриці за дозволене обмеження GL_MAX_VERTEX_ATTRIBS.
  • Недостатньо безперервної послідовності комірок вертексних атрибутів.

Коли програмний об'єкт був успішно скомпонованим, програмний об'єкт може стати частиною поточного стану за допомогою виклику функції glUseProgram. В залежності від успіху операції компонування, інформаційних журнал програмного об'єкту буде перезаписаний. Інформаційний журнал можна отримати за допомогою виклику функції glGetProgramInfoLog.

Функція glLinkProgram також інсталює згенеровані виконувані програми у якості частини поточного стану рендерингу, якщо операція компонування завершилась успішно і вказаний програмний об'єкт використовується в даний момент у якості попереднього виклику функції glUseProgram. Якщо використовуваний в даний момент програмний об'єкт невдало перекомпоновано, його статус компонування буде встановлено у значення GL_FALSE, але виконувані файли і відповідні стани залишаться частиною поточного стану, поки наступний виклик функції glUseProgram видаляє її з використання. Після видалення з використання, вона не може ставати частиною поточного стану поки знову успішно не перекомпонується.

Якщо програма program містить шейдерні об'єкти типу GL_VERTEX_SHADER але не містять шейдерні об'єкти типу GL_FRAGMENT_SHADER, вертексний шейдер буде скомпонований проти опосередкованого інтерфейсу для фіксованого набору функцій для обробки фрагментів. Аналогічно, якщо програма program містить шейдерні об'єкти типу GL_FRAGMENT_SHADER, але не містить шейдерні об'єкти питпу GL_VERTEX_SHADER, фрагментний шейдер буде скопоновано проти опосередкованого інтерфейсу для фіксованого набору функцій для вертексної обробки.

Інформаційний журнал програмного об'єкту оновлюється і програма ганерується під час операції компонування. Після операції компонування, програми можуть модифікувати під'єднані шейдерні об'єкти, компілювати під'єднані шейдерні об'єкти, від'єднювати шейдерні об'єкти, видаляти шейдерні об'єкти, і під'єднювати додаткові шейдерні об'єкти. Жодне з цих операцій не модифікує інформаційних журнал або програму, яка є частиною програмного об'єкта.

Нотатки

Функція glLinkProgram доступна в системі OpenGL версії 2.0 або вище.

Якщо операція компонування завершилась невдало, будь-яка інформація про попередню операцію компонування є втраченою (тобто, провальне компонування не відновлює старий стан програми program). Деяка інформація все-одно може бути отримана з програми program навіть після неуспішної операції компонування. Перегляньте наприклад glGetActiveAttrib і glGetActiveUniform.

Помилки

GL_INVALID_VALUE генерується якщо параметр program не містить значення згенерованого системою OpenGL.

GL_INVALID_OPERATION генерується якщо параметр program не містить ідентифікатор (ім'я) об'єкта програми.

GL_INVALID_OPERATION генерується якщо glLinkProgram виконується між відповідними викликами функцій glBegin і glEnd.

Пов'язані параметри

glGet з аргументом GL_CURRENT_PROGRAM

glGetActiveAttrib з аргументом program і індексом активної змінної атрибуту.

glGetActiveUniform з аргументом program і індексом активної уніфікованої змінної

glGetAttachedShaders з аргументом program

glGetAttribLocation з аргументом program і ім'ям атрибутної змінної

glGetProgram з аргументами program і GL_LINK_STATUS

glGetProgramInfoLog з аргументом program

glGetUniform з аргументом program і розміщенням уніфікованої змінної

glGetUniformLocation з аргументом program і ім'ям уніфікованої змінної.

glIsProgram

Перегляньте також

glAttachShader, glBindAttribLocation, glCompileShader, glCreateProgram, glDeleteProgram, glDetachShader, glUniform, glUseProgram, glValidateProgram

Оригінал

https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glLinkProgram.xml