2013-07-04 2 views
2

Я пытаюсь создать систему рендеринга OpenGL ES 2.0 на Android. У меня есть один FloatBuffer, в который я помещаю все данные вершин. В настоящее время я просто выделяю его с огромным количеством байтов и игнорирую призывы рисования, если они будут переполнять буфер с таким размером. Есть ли способ динамического изменения размера буфера? Если я просто освободил буфер и перераспределил его после каждого рендеринга, я предполагаю, что это будет очень медленно.Android OpenGL динамически размер FloatBuffer?

ответ

1

Есть ли способ, чтобы динамически изменять размер буфера?

Нет. Ваш текущий подход выглядит хорошо. Возможно, вам захочется расширить его, что если данные не соответствуют текущему буферу, вы создаете новый, более крупный и заполняете его новыми данными.

К сожалению, OpenGL-ES не имеет функции as OpenGL-3 does, которая позволяет копировать данные между буферными объектами. Используя это, вы можете копировать между BOs, которые полностью остаются в памяти GPU, так что вам придется обновлять только недостающие части.

Если я только что освободил буфер и перераспределил его после каждого рендера, я предполагаю, что это будет очень медленно.

Это не приведет к повышению производительности точно, это верно. В зависимости от вашей реальной реализации это может иметь огромное влияние на производительность, это верно. Поэтому я не рекомендую это делать.

2

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

Вот некоторые источники для дальнейшего чтения:

  1. Android Lesson Seven: An Introduction to Vertex Buffer Objects (VBOs)

    Это хорошо, когда есть не много данных для передачи, но, как наши сцены становятся все более сложными с большим количеством объектов и треугольники, это может наложить дополнительную плату на использование ЦП и памяти. Что мы можем сделать о ? Мы можем использовать объекты буфера вершин. Вместо передачи вершины информация из клиентской памяти в каждый кадр, информация будет передаваться один раз , а затем рендеринг будет выполнен из этой графики кэш памяти.

  2. OpenGL Vertex Buffer Object (VBO) -> Updating VBO

  3. Vertex Specification Best Practices -> Dynamic VBO

+0

Благодарим вас за ссылки, но они не очень подходят для решения моего вопроса. : / – chimitos