2015-03-05 1 views
0

Следующие вопросы касаются стиля кодирования. (в настоящее время используется JOGL + gl3)Каков наилучший способ рисования массива разных объектов с одинаковой текстурой с помощью JOGL

Если я хочу нарисовать массу разных объектов, содержащих ту же текстуру с JOGL, и уменьшить использование ресурсов, лучше ли разделять объекты и их текстуры (что означает, что создание другого class named texture) или сделать текстуру статичной в этих объектах?

Другой вопрос: если я хочу нарисовать много ветвей (скажем, сотню), имеющих разную форму, я должен написать класс с именем Branch, а затем создать сто экземпляров ветвей и вызвать метод drawMyself() в каждом из их? Или создать один экземпляр, содержащий сто VAO, каждый из которых содержит информацию о вершинах одной ветви и вызывает метод drawMyself() один раз? Какой из них лучше или есть другие варианты?

ответ

2

Для первого вопроса вам нужен только один экземпляр данных текстуры. После того, как вы загрузили его в VRAM, его можно освободить из памяти приложения, чтобы сэкономить место. С точки зрения OpenGL вы можете просто привязать текстуру до начала рисования и затем нарисовать все объекты, которые используют эту же текстуру. Это, по сути, один из способов совмещения вызовов рисования, очень общий метод улучшения производительности рендеринга.

Для второго вопроса вы должны пойти на меньшее количество вызовов методов и меньше VAO. Несмотря на то, что JVM Hotspot очень хорош в JIT-коде, каждый вызов метода по-прежнему будет налагать некоторые накладные расходы, не говоря уже о накладных расходах на вызов OpenGL. Самый лучший сценарий - если вы знаете свои вершины спереди, и они не будут меняться на основе каждого кадра, создайте один статический VBO с чередующимися атрибутами вершин, а затем вызовите один раз для лучшей производительности.

+0

Я согласен с Вашим комментарием. Я советую вам позаботиться о количестве элементов в VBO. Раньше я использовал GL_MAX_ELEMENTS_VERTICES в качестве подсказки, но это не в OpenGL ES 2 (который поддерживается JOGL), и его значение может быть неточным на множестве аппаратного обеспечения. – gouessej

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