LibGDX - ShapeRenderer слишком медленный / низкий FPS на Android

Я только что написал «Игру жизни Конвея» на Java и хотел протестировать свое приложение на своем телефоне Android (Nexus 4). Для тестирования я рисую BitmapFont на моем SpriteBatch, показывающем FPS, гироскоп, живые ячейки и другие данные. На ПК у меня от ~500 до 4000 FPS, в зависимости от того, насколько быстро работает моя GOL-логика. Однако, если я запускаю его на Android, FPS падает до 10-15. Если я отключу свой ShapeRenderer (который является моим основным классом для рендеринга всех GOL-прямоугольников) с GOL-логикой почти на полной скорости, FPS будет постоянно на уровне 60 (я думаю, вы не можете отключить VSync на Nexus). 4).

Итак, вот мой вопрос: почему ShapeRenderer настолько неэффективен? Что еще я должен использовать для визуализации моих фигур?

Я опубликую свой (довольно простой) код рендеринга и картинку:

        this.setColor(new Color(1, 0, 0, 1));
    for (int i = 0; i < grid.getX_length(); i++) {
        for (int j = 0; j < grid.getY_length(); j++) {


                if (cells[i][j].getState()){ // checks if the cell is dead or alive
                    this.setColor(new Color (0,0,0,1));
                    rect(i * size, j * size, size-gap, size-gap); // draws it.
                } 

(http://s14.directupload.net/images/140929/qc3uu8ew.png)


person Marwin Lebensky    schedule 28.09.2014    source источник
comment
У меня нет проблем с ShapeRenderer на моем телефоне Android. Вы могли бы просто визуализировать небольшую текстуру png, используя SpriteBatch.draw(), а не регенерировать прямоугольники в каждом кадре? Я не уверен, что будет более эффективным, но стоит попробовать.   -  person Steven Trigg    schedule 29.09.2014
comment
Во-первых, не создавайте новый объект Color в каждом кадре около миллиона раз. Просто сохраните цвет в переменной, и все готово. В противном случае у вас будет много сбора мусора, что снижает производительность. Кроме того, вы создаете множество объектов внутри оперативной памяти, что также снижает производительность. Я не думаю, что это проблема, но это может уже что-то случиться. Покажите нам весь класс. Может это поможет.   -  person BennX    schedule 29.09.2014
comment
Спасибо вам обоим. Сейчас я рисую маленькие .png и использую переменные цвета. На андроиде у меня наконец-то 60 FPS, а на моем ПК FPS-Rate увеличился на 50-100%.   -  person Marwin Lebensky    schedule 30.09.2014


Ответы (1)


Я не знаю о прямоугольниках, но я столкнулся с той же проблемой с кругами. Причина в том, что для рисования круга требуется так много времени, заключается в том, что он рисует множество одиночных линий, чтобы сформировать круг.

Для справки см. исходный код: https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/glutils/ShapeRenderer.java#L833

person Boris Month    schedule 17.11.2014