Лучше использовать устаревший glTranslatef или обновить координаты, используя glBufferSubData?

1

Я хочу сделать свой VBO-движок, и мне было интересно, нужно ли обновлять все VBO с обновленными значениями с помощью glBufferSubData или просто использовать устаревший glTranslatef для перемещения моей вещи.

И если бы я просто обновил значения в VBO, должен ли я использовать отдельный VBO для координат вершин, нормалей и текстур, или я должен поместить их все в один?

Благодарю.

Теги:
opengl
lwjgl

1 ответ

3
Лучший ответ

1: Обычно вы всегда должны стараться сократить объем данных, передаваемых между CPU и GPU, до минимума, чтобы поддерживать максимальную производительность.

Таким образом, следует избегать обновления всего вершинного буфера с помощью glBufferSubData() и как можно дольше, и следует использовать такие преобразования, как glTranslate() и glLoadMatrix() (которые устарели) или шейдеры.

Но поскольку вы уже работаете с VBOs, я бы рекомендовал использовать шейдеры для преобразования с использованием равномерной переменной шейдера и glUniformMatrix().

2: Разделение вершин, нормалей и текстурных координат или объединение их в один VBO зависит от вас. В большинстве случаев я их объединяю, потому что он создает только один дескриптор, и мне нужен только один вызов glBufferData(). Но если есть ситуация, когда обновляется только одна часть, такая как координаты текстуры, а остальная часть остается такой, какая она есть, тогда разделение будет лучше, так как вы также можете обновить их отдельно.

Еще более продвинутый: если вы используете переплетение буфера, вы, очевидно, должны их комбинировать. Иногда использование переплетения буфера может быть быстрее, чем без, потому что данные, необходимые для одной вершины, хранятся вместе, и кеши могут использоваться. Но вы должны попробовать, какое влияние это оказывает на производительность (если есть), поскольку это сильно зависит от используемого вами оборудования.

  • 0
    Благодарю. Я собираюсь научиться использовать шейдеры вместо устаревших функций и glBufferSubData так как они мне все равно понадобятся. Также разделение VBO, вероятно, является лучшей идеей, поскольку иногда требуется обновление только вершин или координат текстуры.
  • 0
    Сначала я хотел бы выяснить, возможно ли это сделать в шейдерах или подготовить буфер вариантов в памяти :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню