2012-06-11 6 views
0

У меня есть динамическая карта высот для моего ландшафта, ее нужно будет модифицировать почти каждый кадр, следует ли использовать gltexsubimage2d и текстуру в качестве карты высот или обновлять вершины для каждого кадра вместо создания vbo? Какой подход должен быть быстрее? Я понимаю, что я теряю аппаратный билинейный фильтр, отправляющий данные через vbo, но согласно google gltexxubimage2d вызывает проблемы на мобильных устройствах, и это не похоже, что я могу использовать его по кадру, потому что он медленный.HeightMap: gltexsubimage2d VS vertex attribute

На самом деле вопрос должен быть: Является ли передача данных в память gpu текстурой быстрее, чем использование атрибута вершины ?, зависит ли она от реализации? Может ли любое тело достичь обновления текстур в opengl в android, например, использовать квад в качестве холста воспроизведения видео? Я понимаю, что этот вопрос, вероятно, является нонсенсом на более новых устройствах, таких как mali-400 или tegra3, где оба подхода должны быть достаточными для производительности для меня, но я хотел бы иметь совместимость с adreno200 или sgx535.

ответ

0

Я бы посоветовал перейти к модификации текстуры по сравнению с манипуляциями с вершинами.

Это связано с тем, что манипуляция VBO требует гораздо большего перемещения данных и пропускной способности памяти, чем изменение памяти текстуры в память.

Учитывайте, что каждая вершина имеет не менее 5 элементов (x + y + z + tx + ty), но из 8 элементов, считая нормали, которые очень типичны для любого алгоритма освещения.

С другой стороны, текстура представляет собой только одно значение для каждой вершины (обычно).

Одна из распространенных ошибок этого решения, которая вызывает много медлительности, заключается в том, что многие новички (и я уверен, что это не ваш случай) позволяют генерировать mipmap для текстуры, которую они используют для своей карты высот.

Убедитесь, чтобы отключить его:

glTexParameteri (GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_FALSE);

Еще один совет - принять формат пикселей текстуры до минимального требования, имея 8888 намного тяжелее, чем разрешение 444 пикселя. Это приводит к гораздо более быстрой передаче памяти в каждый кадр.

Надеюсь, это поможет в некотором роде.

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