Тысяча спрайтов рисует низкую производительность - PullRequest
1 голос
/ 04 июня 2019

Я пишу приложение, и я столкнулся с низким fps, я обнаружил, что почти все процессорное время используется методами spriteBatch.draw () (около тысячи вызовов). Итак, я создал простое приложение для рисования

public void render() {
    spriteBatch.begin();
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    for (int i = 0; i < 2000; i++) {
        spriteBatch.draw(tex, 0, 0);
    }
    spriteBatch.end();
}

Приложение работает со скоростью 18 кадров в секунду. когда я увеличиваю размер окна, чтобы он почти заполнял весь экран, число кадров в секунду падает до 7 !, когда размер окна меняется очень маленьким, он работает на 60 кадрах в секунду, в полноэкранном режиме я получаю 20 кадров в секунду (1600x900) - лучше, чем развернутое окно Я использую только одну текстуру (512, 512 - png), maxRenderCalls на spriteBatch - 2, 5 на polygonSpriteBatch - оба одинаковых FPS отключено смешивание -> без изменений, тот же FPS

  1. Это нормально, что 2k спрайтов падает на 20 кадров в секунду на рабочем столе? - (Процессор Core i5-3210M (2,50 ГГц, 1600 МГц, 3 МБ), NVIDIA® GeForce® GT630M)

  2. Это нормально, что изменение размера окон влияет на производительность?

1 Ответ

0 голосов
/ 05 июня 2019

Я постараюсь ответить на него сам (не стесняйтесь размещать лучшие ответы) Это нормально.

Основным резонансом проблемы с производительностью стал размер. Рисование размер действительно имеет значение, когда я рисую его на десятой части размера, я получаю 30 кадров в секунду даже при 50 000 спрайтах!

Я также могу получить немного больше (48 к / с) при использовании PolygonSpriteBatch, даже с включенным смешиванием!

Кроме того, слишком частое включение и отключение наложения (я делал это более 1000 раз за кадр) может реально негативно сказаться на производительности.

...