glBindAttribLocation - асоціювання індексу загального вертексного атрибуту до іменованої змінної атрибуту.

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

void glBindAttribLocation (GLuint program,
                           GLuint index,
                           const GLchar *name) ;

 

Параметри

program вказує обробник програмного об'єкта у якому необхідно зробити асоціацію.

index вказує індекс загального вертексного атрибуту, який необхідно зв'язати.

name вказує рядок символів з завершуючим значенням нуля, яке містить ім'я змінної атрибуту вертексного шейдера до якого необхідно прив'язати index.

Опис

Функція glBindAttribLocation використовується для асоціювання визначених користувачем атрибутрих змінних у програмному об'єкті вказаному за допомогою параметр program, з загальним індексом атрибутів вертекса. Ім'я визначеної користувачем змінної атрибуту передається у якості рядка символів з завершуючим значенням нуля в параметрі name. Загальний індекс атрибутної змінної який повинен бути прив'язаний до цієї змінної вказується за допомого параметра index. Коли програма program встановлюється у якості частини поточного стану, значення надані за допомогою загальних вертексних атрибутів за індексом index будуть модифікувати значення визначених користувачем атрибутних змінних вказаних за допомогою параметру name.

Якщо name посилається на матричну атрибутну змінну, параметр index посилається на перший стовпчик матриці. Інші стовпці матриці автоматично прив'язуються до розміщень index+1 для матриці типу mat2; index+1 і index+2 для матриці типу mat3; і index+1, index+2 і index+3 для матриці типу mat4.

Дана команда уможливлює використання наглядних імен для атрибутних змінних вертексного шейдера, у контрасті до використання загальних змінних по номерам від 0 до GL_MAX_VERTEX_ATTRIBS - 1. Значення надіслані для кожного загального атрибутного індексу являються частиною поточного стану, на подобі стандартних вертексних атрибутів на подобі кольору, нормалі і позиції вертекса. Якщо поточним встановлюється інший програмний об'єкт за допомогою виклику функції glUseProgram, за загальними вертексними атрибутами ведеться спостереження у такий спосіб, при якому однакові значення розглядаються атрибутами у новому програмному об'єкті як прив'язаними до індекса index.

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

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

Нотатки

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

Функція glBindAttribLocation може викликатися перед зв'язуванням шейдерного об'єкту до певного програмного об'єкту. Також дозволяється зв'язувати загальний індекс атрибуту до атрибутної змінної, яка ніколи не використовувалася у вертексному шейдері.

Якщо параметр name був попередньо зв'язаний, дана інформація втрачається. Тобто не можна зв'язати одну змінну визначену користувачем до багатьох індексів, але можна зв'язати багато атрибутних змінних визначених користувачем до одного індексу.

Програмам дозволяється зв'язувати більш ніж одну визначену користувачем атрибутну змінну до одного загального індексу вертексного атрибуту. Це називається "створення псевдонімів", і дозволяється щоб тільки одна атрибутна змінна з псевдонімом була активна у виконуваній програмі, або якщо жоден шлях у шейдері споживає більш ніж один атрибут з множити атрибутів з псевдонімами у одному розміщенні. Компілятор і компонувальник можуть припускати, що виконується жодне створення псевдонімів, і вільні застосовувати оптимізації які працюють тільки за відсутності псевдонімів. Від реалізацій систем OpenGL не вимагається виконання перевірок на помилки щоб виявити пседоніми. Через те що не існує шляху зв'язування стандартних атрибутів, неможливо створювати псевдоніми до загальних атрибутів з звичаними (за вийнятком атрибуту 0).

Активні атрибути, які безпосередньо не зв'язуються будуть зв'язуватися компонувальником під час виклику функції glLinkProgram. Прив'язані розміщення можуть опитуватися за допомогою виклику функції glGetAttribLocation.

Система OpenGL копіює вміст параметру name під час виклику функції glBindAttribLocation, отож програма може вивільняти її копію вмісту парамтру name одразу ж після повернення функції.

Помилки

GL_INVALID_VALUE генерується якщо параметр index містить значення більше або рівне до значення параметру GL_MAX_VERTEX_ATTRIBS.

GL_INVALID_OPERATION генерується якщо вміст параметру name зрозпочинається з префіксу "gl_".

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

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

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

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

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

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

glGetAttribLocation з аргументами program і name

glIsProgram

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

glDisableVertexAttribArray, glEnableVertexAttribArray, glUseProgram, glVertexAttrib, glVertexAttribPointer

Оригінал

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