Эта функция позволяет вам указать индекс атрибута для определенного пользователем атрибута шейдера (не для униформы, как предлагает ваш пример кода), который вы позже будете использовать при обращении к атрибуту.
Скажем, у вас есть вершинный шейдер:
...
attribute vec4 vertex; //or 'in vec4 vertex' in modern syntax
attribute vec3 normal;
...
Затем вы можете привязать индексы к этим переменным с помощью
glBindAttribLocation(program, 0, "vertex");
glBindAttribLocation(program, 1, "normal");
Вы можете использовать любые неотрицательные числа, которые вам нравятся (в небольшом диапазоне). Затем при обращении к этим атрибутам вы используете их индексы, например, в glVertexAttribPointer
или glEnableVertexAttribArray
функциях.
Но имейте в виду, что glBindAttribLocation
должен быть вызван перед подключением программы. Вы также можете опустить это. Затем OpenGL автоматически связывает индексы со всеми используемыми атрибутами во время связывания, что позже может быть запрошено с помощью glGetAttribLocation
. Но с помощью glBindAttribLocation
вы можете установить собственную семантику индекса атрибута и поддерживать их согласованными.
Более новые версии GLSL даже позволяют указывать индексы атрибутов в шейдере (используя синтаксис layout
), устраняя необходимость в glBindAttribLocation
или glGetAttribLocation
, но я не уверен, поддерживается ли это в ES.
Но мой ответ не говорит вам больше, чем те "различные" сайты, на которые вы смотрели, или какая-либо хорошая книга OpenGL / GLSL, так что если вы все еще не получаете ее, углубитесь в основы GLSL.