Я экспериментирую с несколькими способами нарисовать много спрайтов (например, для системы частиц), и у меня есть некоторые неубедительные результаты.Итак, вот что я попробовал и что у меня есть: Это сделано для рисования 25 000 спрайтов:
- Использование обычного
glBegin
/ glEnd
и использование трига для вычисления точек вершины - 17-18fps. - Используя обычные
glBegin
/ glEnd
, но используя glRotate
, glTranslate
и glScale
для преобразования спрайта - 14-15fps. - Использование массивов вершин вместо
glBegin
и glEnd
, но по-прежнему используется триггер для вычисления положения точки вершины - 10-11fps. - Использование массивов вершин вместо
glBegin
и glEnd
, но с использованием glRotate
, glTranslate
и glScale
для преобразования спрайта - 10-11fps.
Итак, мой вопрос: почему использование массивов вершин медленнее, чем использование glBegin
/ glEnd
, хотя я прочитал (здесь даже), что он долженбыть быстрее?
И почему использование вашей собственной тригонометрии (которая в моем случае составляет 5 cos, 5 sin, более 5 делений, 15 умножений и около 10 сложений / вычитаний) быстрее, чем использование 5 функций (glPushMatrix()
, glTranslated()
, glRotated()
, glScaled()
, glPopMatrix()
).Хотя они сделаны на GPU, так что это должно быть намного, намного быстрее .
Я получаю более многообещающие результаты, когда рисую меньше спрайтов.Например, когда я рисую 10 тыс. Спрайтов, массивы вершин могут быть примерно на 5 кадров в секунду быстрее, но все еще несовместимы.Также обратите внимание, что эти fps могут быть увеличены в целом, потому что у меня есть другие расчеты, так что я на самом деле не смотрю на сам fps, а на разницу между ними.Например, если бы массивы вершин и gl-преобразование были на 5-10 кадров в секунду больше, чем glBegin
/ glEnd
с ручным триггером, я был бы счастлив, но сейчас это, похоже, не стоит хлопот.Они бы помогли с портированием на GLES (поскольку у него нет glBegin
/ glEnd
), но я думаю, что я сделаю отдельную реализацию для этого.
Так есть ли способ ускорить этобез использования геометрических шейдеров?Я не совсем понимаю их (может быть, какое-то отличное учебное пособие?), И они могут нарушить совместимость со старым оборудованием, поэтому я хочу сжать весь сок, который могу, без использования шейдеров.