Являются ли индексы и местоположения OpenGL одинаковыми для униформ и атрибутов вершин?

На справочных страницах OpenGL некоторые функции помечены как использующие одинаковые местоположения, в то время как другие функции отмечены как использующие одинаковые индексы. Это одно и то же?

Аналогично для атрибутов вершин некоторые функции помечаются как использующие индексы атрибутов вершин, в то время как другие функции помечаются как использующие местоположения атрибутов вершин. Это одно и то же?

1 ответ

Решение

В вашем первом случае расположение униформы отличается от индекса, используемого для glGetActiveUniform(),

За glGetActiveUniform() регистр, это просто значение между 0 и значением, которое вы получаете из glGetProgram( GL_ACTIVE_UNIFORMS,...) минус один. Этот API позволяет запрашивать любые ресурсы программы, и вы можете перебирать все активные формы с помощью этого метода. Унифицированные местоположения могут не начинаться с 0 и не могут быть последовательными вообще.

Во втором примере glGetAttribLocation() а также glEnableVertexAttribArray() оба ссылаются на один и тот же индекс. GL имеет набор общих атрибутов, на которые обычно ссылаются их индексы, начиная с 0. Однако, чтобы сделать вещи немного более интересными, есть также glGetActiveAttrib() что похоже на glGetActiveUniform() первый: здесь индекс относится только к списку активных атрибутов (в диапазоне от 0 до значения, полученного из glGetProgram( GL_ACTIVE_ATTRIBUTES,...) минус один, а не фактический атрибут индекса / местоположения. Опять же, этот API позволяет перебирать все атрибуты, которые присутствуют (и активны).

Другие вопросы по тегам