glUseProgram - встановлює програмний об'єкт у якості частини поточного стану рендерингу.
C-специфікація
void glUseProgram (GLuint program) ;
Параметри
program вказує ідентифікатор програмного об'єкта виконуваний код якого повинен виконуватися у якості поточного стану рендерингу.
Опис
Функція glUseProgram інсталює програмний об'єкт вказаний через значення параметру program у якості частини поточного стану рендернигу. Один або множина виконуваних програм створюються у програмному об'єкті за допомогою прикріплювання до нього шейдерного об'єкта функцією glAttachShader, успішної компіляції шейдерних об'єктів функцією glCompileShader, і успішного компонування програмного об'єкта за допомогою glLinkProgram.
Програмний об'єкт буде містити виконувану програму, яка буде працювати на вертексному процесорі, якщо він містить один або декілька шейдерних об'єктів типу GL_VERTEX_SHADER, який був успішно скомпільованим і скомпонованим. Аналогічно, програмний об'єкт буде містити виконувану програму, яка буде працювати на шейдерному процесорі, якщо вона містить один або декілька шейдерних об'єктів типу GL_FRAGMENT_SHADER, який був успішно скомпільованим і скомпонованим.
Успішне інсталювання виконуваної програм на програмованому процесорі спричинить вимикання відповідних фіксованих функцій OpenGL. Конкретно, якщо програма встановлена на вертексний процесор, буде вимкнено наступний фіксований набір функцій OpenGL:
- матриця огляду сцени (modelview) не буде застосовуватися до вертексних координат;
- матриця проекції (projection) не застосовується до вертексних координат;
- матриці текстур не застосовуються до текстурних координат;
- нормалі не переносяться у координати огляду;
- нормалі не масштабуються чи нормалізуються;
- обчислення нормалізації нормалей GL_AUTO_NORMAL не виконується;
- текстурні координати не генеруються автоматично;
- не виконується повертексне освітлення;
- обчислення колірних поверхонь не виконується;
- коліріндексне освітлення не виконується;
- даний список також виконується під час встановлення поточної растрової позиції.
Очікується, що виконувана програма, яка встановлена на вертексному процесорі, реалізує будь-які виклики до бажаного функціоналу з попереднього списку. Аналогічно, якщо виконувана програма встановлена на фрагментному процесорі, вимкнеться наступний фіксований функціонал OpenGL:
- текстурне середовище і текстурні функції не застосовуються;
- текстурна програма не застосовується;
- сумування кольорів не застосовується;
- димка або туман недоступні.
Знову, очікується, що встановлений шейдер реалізує деякі або усі бажані функції з попереднього списку.
Поки програмний об'єкт є у використанні, програми можуть вільно модифікувати прикріплені шейдерні об'єкти, компілювати прикріплені шейдерні об'єкти, прикріпляти додаткові шейдерні об'єкти, і від'єднювати чи видаляти шейдерні об'єкти. Жодна з цих операцій змінить виконувані програми, які є частиною поточного стану. Однак, перекомпонування програмного об'єкта, який в даний момент використовується, інсталює його у якості частини поточного стану рендерингу, якщо операція компонування завершилась успішно (перегляньте glLinkProgram). Якщо використовуваний в даний момент об'єкт програми скомпонувався невдало, його статус компонування буде встановлено у значення GL_FALSE, але виконувані програми і асоційовані стани залишаться в поточному стані рендерингу, поки наступний виклик функції glUseProgram видалить його з використання. Після того, як вона видалена з використання, вона не може більше стати частиною поточного стану поки компонування не завершиться успіхом.
Якщо програма містить шейдерні об'єкти типу GL_VERTEX_SHADER, але вона не містить шейдерних об'єктів типу GL_FRAGMENT_SHADER, виконувана програма буде інстальована на вертексному процесорі, але фіксована функціональність буде використана для обробки фрагментів. Аналогічно, якщо програма program містить шейдерні об'єкти типу GL_FRAGMENT_SHADER, але вона не містить шейдерних об'єктів типу GL_VERTEX_SHADER, виконувана програма буде встановлена на фрагментному процесорі, але фіксована функціональність буде використовуватись для обробки вертексів. Якщо параметр program містить значення 0, програмовані процесори будуть вимкнені, і буде використовуватись фіксована функціональність для обробки вертексів і фрагментів.
Нотатки
Функція glUseProgram доступна у системі OpenGL версії 2.0 або вище.
Поки програмний об'єкт використовується поточним станом, стан який контролює вимкнену фіксовану функціональність може також оновлюватися за допомогою звичайних викликів OpenGL.
На подобі списків відтворення і текстурних об'єктів, простір імен для програмних об'єктів може розподілятися серед множини контекстів, поки серверна частина контекстів розділяє однаковий адресний простір. Якщо простір імен розподіляється між контекстами, будь-який прикріплений об'єкт і дані асоційовані з даним прикріпленим об'єктом також являються розподіленими.
Програми відповідальні за забезпечення синхронізації між викликами API коли до об'єктів отримується доступ з різних потоків виконання.
Помилки
GL_INVALID_VALUE генерується якщо параметр program містить значення відмінне від нуля або згенерованого системою OpenGL.
GL_INVALID_OPERATION генерується якщо програма program не являється програмним об'єктом.
GL_INVALID_OPERATION генерується якщо програма program не може стати частиною поточного стану.
GL_INVALID_OPERATION генерується якщо glUseProgram виконується між відповідними викликами glBegin і glEnd.
Пов'язані параметри
glGet з аргументом GL_CURRENT_PROGRAM
glGetActiveAttrib з коректним програмним об'єктом і індексом активної змінної атрибутів.
glGetActiveUniform з коректним програмним об'єктом і індексом активної уніфікованої змінної
glGetAttachedShaders з коректним програмним об'єктом.
glGetAttribLocation з коректним програмним об'єктом і ім'ям атрибутної змінної.
glGetProgram з коректним програмним об'єктом і параметром, який необхідно опитати.
glGetProgramInfoLog з коректним програмним об'єктом.
glGetUniform з коректним програмним об'єктом і розміщенням уніфікованої змінної.
glGetUniformLocation з коректним програмним об'єктом і ім'ям уніфікованої змінної.
glIsProgram
Перегляньте також
glAttachShader, glBindAttribLocation, glCompileShader, glCreateProgram, glDeleteProgram, glDetachShader, glLinkProgram, glUniform, glValidateProgram, glVertexAttrib
Оригінал
https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glUseProgram.xml