glUniform - встановлення значення уніфікованої змінної для поточного програмного об'єкта.

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

void glUniform1f (GLint location,
                  GLfloat v0) ;
 
void glUniform2f (GLint location,
                  GLfloat v0,
                  GLfloat v1) ;
 
void glUniform3f (GLint location,
                  GLfloat v0,
                  GLfloat v1,
                  GLfloat v2) ;
 
void glUniform4f (GLint location,
                  GLfloat v0,
                  GLfloat v1,
                  GLfloat v2,
                  GLfloat v3) ;
 
void glUniform1i (GLint location,
                  GLint v0) ;
 
void glUniform2i (GLint location,
                  GLint v0,
                  GLint v1) ;
 
void glUniform3i (GLint location,
                  GLint v0,
                  GLint v1,
                  GLint v2) ;
 
void glUniform4i (GLint location,
                  GLint v0,
                  GLint v1,
                  GLint v2,
                  GLint v3) ;

void glUniform1fv (GLint location,
                   GLsizei count,
                   const GLfloat *value) ;
 
void glUniform2fv (GLint location,
                   GLsizei count,
                   const GLfloat *value) ;
 
void glUniform3fv (GLint location,
                   GLsizei count,
                   const GLfloat *value) ;
 
void glUniform4fv (GLint location,
                   GLsizei count,
                   const GLfloat *value) ;
 
void glUniform1iv (GLint location,
                   GLsizei count,
                   const GLint *value) ;
 
void glUniform2iv (GLint location,
                   GLsizei count,
                   const GLint *value) ;
 
void glUniform3iv (GLint location,
                   GLsizei count,
                   const GLint *value) ;
 
void glUniform4iv (GLint location,
                   GLsizei count,
                   const GLint *value) ;

void glUniformMatrix2fv (GLint location,
                         GLsizei count,
                         GLboolean transpose,
                         const GLfloat *value) ;
 
void glUniformMatrix3fv (GLint location,
                         GLsizei count,
                         GLboolean transpose,
                         const GLfloat *value) ;
 
void glUniformMatrix4fv (GLint location,
                         GLsizei count,
                         GLboolean transpose,
                         const GLfloat *value) ;
 
void glUniformMatrix2x3fv (GLint location,
                           GLsizei count,
                           GLboolean transpose,
                           const GLfloat *value) ;
 
void glUniformMatrix3x2fv (GLint location,
                           GLsizei count,
                           GLboolean transpose,
                           const GLfloat *value) ;
 
void glUniformMatrix2x4fv (GLint location,
                           GLsizei count,
                           GLboolean transpose,
                           const GLfloat *value) ;
 
void glUniformMatrix4x2fv (GLint location,
                           GLsizei count,
                           GLboolean transpose,
                           const GLfloat *value) ;
 
void glUniformMatrix3x4fv (GLint location,
                           GLsizei count,
                           GLboolean transpose,
                           const GLfloat *value) ;
 
void glUniformMatrix4x3fv (GLint location,
                           GLsizei count,
                           GLboolean transpose,
                           const GLfloat *value) ;

 

Параметри

location вказує розміщення уніфікованої змінної, яку потрібно модифікувати.

v0, v1, v2, v3 вказує нові значення, яку необхідно використати для вказаних уніфікованих змінних.

count вказує кількість елементів, які потрібно модифікувати. Даний параметр повинен містити значення 1, якщо цільова уніфікована змінна не являється масивом, або значення 1 або більше, якщо вона являється масивом.

value вказує на вказівник на масив з кількістю count значень, які будуть використані для оновлення вказаних уніфікованих змінних.

transpose вказує чи перенести матрицю під час завантаження значень в уніфіковану змінну.v

Опис

Функція glUniform модифікує значення уніфікованих змінних чи масиву уніфікованих змінних. Розміщення уніфікованої змінної, яку необхідно змінити вказується за допомогою параметра location, яка повинна містити значення повернене функцією glGetUniformLocation. Функція glUniform оперує над програмним об'єктом, який став частиною поточного стану рендерингу за допомогою виклику функції glUseProgram.

Команди glUniform{1|2|3|4}{f|i} використовуються для встановлення значень, переданих у якості аргументів, уніфікованої змінної вказаної за допомогою параметра location. Число вказане у імені команди повинно співпадати з числом компонентів у типі даних вказаної уніфікованої змінної (тобто, 1 для дійсного числа, цілого числа і булевого значення; 2 для vec2, ivec2, bvec2 тощо). Суфікс f вказує, що передаються значення з плаваючою точкою (дійсні числа); суфікс i вказує, що передаються значення типу ціле число, і цей тип також повинен співпадати з типом даних вказаної уніфікованої змінної. Команди з суфіксом i повинні використовуватися для забезпечення значень для уніфікованої змінної визначеної у якості int, ivec2, ivec3, ivec4 або їх масивів. Варіанти команд з суфіксом f повинні використовуватися для встановлення значень для уніфікованих змінних типу float, vec2, vec3, vec4 або їх масиви. Обидві множини функцій з суфіксами f і i можуть використовуватися для встановлення значень типу bool, bvec2, bvec3, bvec4 або їх масивів. Уніфіковані змінні будуть встановлені у значення false якщо ввідні значення еквівалентні 0 або 0.0f, в іншому випадку у true.

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

Команди glUniform{1|2|3|4}{f|i}v можуть використовуватися для встановлення значення одиничної уніфікованої змінної або масиву уніфікованих змінних. Дані команди передаються кількість і вказівник на значення, які потрібно завантажити у уніфіковану змінну, або масив уніфікованих змінних. Під час модифікування одиничної уніфікованої змінної параметр count повинен містити значення 1, і значення 1 або більше потрібно вказувати у параметрі count при модифікуванні цілого масиву значень уніфікованих змінних. Під час завантаження значень n елементів від позиції m в масиві уніфікованих змінних, елементи m+n-1 у масиві будуть заміненими новими значеннями. Якщо m+n-1 являється більшим ніж розмір масиву уніфікованих змінних, значення для усіх елементів масиву за останнім елементом масиву будуть проігноровані. Число вказане в імені команди вказує на кількість елементів компонентів для кожного елементу у параметрі value і воно повинно співпадати з кількістю компонентів у типі даних вказаної уніфікованої змінної (тобто 1 для float, int, bool; 2 для vec2, ivec2, bvec2, тощо). Типи даних вказані у імені команди повинні співпадати з типом даних уніфікованих змінних, як попередньо описано для glUniform{1|2|3|4}{f|i}.

Для масиву уніфікованих елементів, вважається, що кожен елемент масиву має тип даних, які вказані в команді (тобто, glUniform3f, або glUniform3fv можуть використовуватися для завантаження масиву уніфікованих змінних типу vec3). Кількість елементів масиву уніфікованої змінної, які потрібно модифікувати вказується у count.

Команди glUniformMatrix{2|3|4|2x3|3x2|2x4|4x2|3x4|4x3}fv використовуються для модифікування матриці або масиву матриць. Число у назві команди інтерпретується у якості розмірності матриці. Число 2 вказує на матрицю з розмірністю 2×2 (тобто, 4 значення), число 3 вказує на матрицю 3×3 (тобто, 9 значень), і число 3 вказує на матрицю 4×4 (тобто, 16 значень). Не квадратної розмірності матриці являються явними, перше число в яких вказує на кількість стовпчиків і друге число відповідає кількості рядків. Наприклад, 2x4 вказує на матрицю з розмірністю 2×4 з 2 колонками і 4 рядками (тобто, 8 значень). Якщо параметр transpose встановлений у GL_FALSE, припускається, що кожна матриця має головним порядок колонок. Якщо параметр transpose містить значення GL_TRUE, вважається, що кожна матриця має головний порядок рядків. Аргумент count вказує на кількість матриць, які передаються. Параметр count повинен містити значення 1, якщо модифікується одна матриця, і значення 1 або більше, якщо модифікується масив матриць.

Нотатки

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

Функція glUniformMatrix{2x3|3x2|2x4|4x2|3x4|4x3}fv доступна в системах OpenGL версії 2.1 або вище.

Функції glUniform1i і glUniform1iv являються єдиними функціями, які можуть використовуватися для завантаження уніфікованих змінних визначених у якості типів семплерів. Завантаження семплерів за допомогою будь-яких інших функцій спричинить генерування помилки GL_INVALID_OPERATION.

Якщо параметр count містить значення більше за 1 і вказана уніфікована змінна не являється масивом, генерується помилка GL_INVALID_OPERATION і вказана уніфікована змінна залишиться без змін.

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

Якщо параметр location містить значення відмінне від -1 або або таке, що не представляє ідентифікатор розміщення уніфікованої змінної у поточному програмному об'єкті, генерується помилка, і жодні зміни виконуються відносно пам'яті збереження уніфікованої змінної поточного програмного об'єкта. Якщо параметр location містить значення -1, передані дані будуть ігноровані без генерування помилки і вказана уніфікована змінна не буде модифікована.

Помилки

GL_INVALID_OPERATION генерується якщо в даний момент немає програмного об'єкта.

GL_INVALID_OPERATION генерується якщо розмір уніфікованої змінної оголошений у шейдері не співпадає з розміром вказаним за допомогою команди glUniform.

GL_INVALID_OPERATION генерується якщо один з цілочислених варіантів цієї функції використовується для завантаження уніфікованих змінних типу float, vec2, vec3, vec4 або їх масиву, або одна з вказаних варіантів з плаваючою точкою даної функції використовується для завантаження уніфікованої змінної типу int, ivec2, ivec3 або ivec4 або їх масиву.

GL_INVALID_OPERATION генерується, якщо location містить значення некоректного розміщення уніфікованої змінної для поточного програмного об'єкту або параметр location не містить значення -1.

GL_INVALID_VALUE генерується якщо count містить значення менше за 0.

GL_INVALID_OPERATION генерується якщо count містить значення більше за 1 і вказана уніфікована змінна не являється масивом.

GL_INVALID_OPERATION генерується, якщо семплер завантажується з використанням команди відмінної від glUniform1i або glUniform1iv.

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

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

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

glGetActiveUniform з ідентифікатором програмного об'єкту і індексом активної уніфікованої змінної

glGetUniform з ідентифікатором програмного об'єкту і розміщенням уніфікованої змінної

glGetUniformLocation з ідентифікатором програмного об'єкту і ім'ям уніфікованої змінної

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

glLinkProgram, glUseProgram

Оригінал

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