я знаю это glVertexAttribDivisor
может использоваться для изменения скорости, с которой общие атрибуты вершин продвигаются во время рендеринга экземпляра, но мне было интересно, есть ли способ продвинуть атрибуты с определенной скоростью БЕЗ экземпляра.
Вот пример того, что я имею в виду:
Допустим, вы определяете список позиций вершин, которые составляют серию линий, и с каждой строкой вы хотите связать идентификатор. Таким образом, вы создаете два виртуальных объекта, в каждом из которых находятся данные, относящиеся к одному из этих атрибутов (либо все позиции вершин, либо все идентификаторы вершин). Традиционно это означает, что каждый vbo должен иметь размер (в элементах) количества строк X 2 (поскольку каждая точка содержит две строки). Это, конечно, означает, что я дублирую одно и то же значение идентификатора для каждой точки линии.
Вместо этого я хотел бы указать, что идентификаторы продвигаются на 1 элемент на каждые 2 элемента, которые продвигает буфер позиции вершины. Я знаю, что это требует, чтобы мой буфер положения вершины был объявлен первым (чтобы я мог ссылаться на него, чтобы сообщить OpenGL, как часто следует расширять буфер идентификатора), но все равно кажется, что это возможно. Тем не менее, я не могу найти никаких функций в спецификации OpenGL, которые позволяют такой маневр.
То, что вы хотите, не всегда возможно в OpenGL. Это эффективно сдержанная форма многоиндексный рендеринг, поэтому вам придется использовать один из этих методов, чтобы получить его.
Других решений пока нет …