В моем приложении opengl я рисую один и тот же многоугольник примерно 50 000 раз, но в разных точках на экране.В моем текущем подходе я делаю следующее:
- Рисуем многоугольник один раз в списке отображения
- для каждого экземпляра многоугольника, нажимаем матрицу, переводим в эту точку, масштабируеми вращать соответствующим образом (масштабирование каждой точки будет одинаковым, перемещение и вращение не будут).
Однако, с 50k полигонов, это 50k push и pops и вычисления правильных матричных переводовчтобы перейти к правильной точке.
Мой коллега также предложил нарисовать всю сцену в буфер, а затем просто нарисовать весь буфер с одним переводом.Компромисс здесь заключается в том, что нам нужно хранить все вершины многоугольника в памяти, а не только список отображения, но нам не нужно было бы делать push / translate / scale / rotate / pop для каждой вершины.
Первый подход - это тот, который мы внедрили в настоящее время, и я бы предпочел посмотреть, сможем ли мы его улучшить, поскольку для второго способа потребуются серьезные изменения (однако, если второй способ намного быстрее, мы всегда можем сделатьпереписать).
Нужны ли все эти push / pops?Есть ли более быстрый способ сделать это?И стоит ли мне беспокоиться, что такое большое количество нажатий / падений ухудшит производительность?