Поигравшись с darkorbit и столкнувшись с тормозами на почве уменьшения FPS решил посмотреть сколько FPS дает моя заготовка.
Для начала написал небольшой тестовый примерчик с 2D, без света и всего прочего.... и содрогнулся. ~15-20 FPS и периодически (раз в секунд 10-15) все замирает на секунду.
Я был в шоке. Это никуда не годится, надо срочно что-то менять. Как бы я был в курсе, что мной выбран наиболее медленный способ работы с JOGL, но не знал что все настолько плохо.
Немножко покурил мануал и пошел по пути наименьшего сопротивления - отказался от GLJPanel в пользу другого варианта иcпользования JOGL cо Swing (совсем отказаться от Swing пока не решился. Нашел нелестные отзыва о ближайшей альтернативе - SWT). И случилось чудо - FPS разом подпрыгнул до 75, остановки прекратились.
Похоже GLJPanel не слишком хорошо работает с памятью - постоянно выделяет ее и освобождает, что приводит к частому вызову сборщика мусора. Другой причины для таких подвисонов я не вижу.
Собственно саму игру можно делать с использованием хоть AWT, но тогда всякие менюшки, окошки придется сразу делать средствами JOGL, а я пока не хочу тратить на это время.
З.Ы. А еще настоятельно порекомендовал бы всем использовать обертку следующего вида для обращений к функциям Swing:
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// Устанавливаем заголовок окна
Main.mainWindow.setTitle(count+"FPS "+fpsCount1+" Render "+renderTime+"ms");
}});
Иначе такое простейшее действие выполненное в таймере - блокирует его и подсчет времени сбивается
Комментариев нет:
Отправить комментарий