2013-03-18 5 views
6

Я знаю, что glVertexAttribDivisor может быть использован для изменения скорости, с которой атрибуты вершинной вершины продвигаются во время инстанционного рендеринга, но мне было интересно, есть ли способ продвинуть атрибуты с определенной скоростью БЕЗ instancing.Атрибут атрибута без стимуляции?

Вот пример того, что я имею в виду:

Допустим, вы определяете список позиций вершин, составляющих серию линий, и с каждой линией вы хотите связать идентификатор. Итак, вы создаете два vbos, каждый из которых содержит данные, относящиеся к одному из этих атрибутов (либо всех вершинных позиций, либо всех идентификаторов вершин). Традиционно это означает, что каждый vbo должен быть размером (в элементах) числа строк X 2 (поскольку каждая точка содержит две строки). Это, конечно, означает, что я дублирую одно значение идентификатора для каждой точки в строке.

Вместо этого я хотел бы указать, что идентификаторы продвигают 1 элемент для каждых 2 элементов, задерживает буфер положения вершины. Я знаю, что это требует, чтобы первый буфер позиции вершины был объявлен первым (так что я могу ссылаться на него, чтобы сообщить OpenGL, как часто продвигать буфер ID), но все же кажется, что это будет возможно. Однако я не могу найти никаких функций в спецификации OpenGL, допускающих такой маневр.

ответ

2

В OpenGL, как правило, не требуется. Это эффективно сдержанная форма multi-indexed rendering, поэтому вам придется использовать один из этих методов, чтобы получить ее.

+0

Можно ли использовать 'glMultiDrawArraysIndirect()' в этом случае, чтобы нарисовать линию по одному сегменту за раз, используйте делитель атрибута 1 над идентификатором VBO и используйте часть 'baseIndex' части косвенной структуры команды для увеличения индекса на нарисовать ID VBO? Вероятно, это будет больше данных в памяти GPU, но теоретически возможно? – Samik

+0

Это будет работать в этом конкретном случае, но не в * general *. –

Смежные вопросы