Я хочу запросить метаданные для данного атрибута.Надеюсь, я неправильно понял, как работает glGetActiveAttrib
.Вот что я думаю о том, как это работает:
Атрибут location можно получить , используя glGetAttribLocation(programId, attributeName)
.Метаданные можно получить , используя glGetActiveAttrib(programId, index, ...)
.
Как видите, glGetActiveAttrib
ожидает index вместо местоположения.Это не то же самое.
Пример:
В шейдере:
attribute vec3 position;
attribute vec3 textureCoordinate; // <-- this attribute is not used
attribute vec3 normal;
В этом примере атрибут location будет
locations = [
position: 0,
textureCoordinate: -1, // optimized away
normal: 2, // continues counting the attributes
]
Однако активный атрибут indexes будет
active_attribute_indices = [
position: 0,
// skips texture coordinate because it is not active
normal: 1,
]
Как видите, следующее не будет работать:
// get attribute location by name
int attrib_location = glGetAttribLocation(programId, "normal"); // = 2
// get attribute metadata
// Error: attrib_location being 2 is not a valid active attribute index.
glGetActiveAttrib(programId, attrib_location, ...)
Поэтому мой вопрос таков:
Как я могу получить индекс активного атрибута, а не местоположение?
Нужно ли циклически просматривать все атрибуты и проверять,имя соответствует имени моего атрибута?