У меня есть особенности производительности с Java2D. Я знаю параметр sun.java2d.opengl VM, чтобы включить 3D-ускорение для 2D, но даже с использованием этого есть некоторые странные проблемы.
Ниже приведены результаты проведенных тестов:
Рисование карты 25x18 с 32x32 пиксельными плитками на JComponent
Изображение 1 =.bmp формат, Изображение 2 = Формат .png
Без -Dsun.java2d.opengl = true
120 FPS с использованием .BMP image 1
13 FPS с использованием изображения .PNG 2
С -Dsun.java2d.opengl = true
12 FPS с использованием .BMP image 1
700 FPS с использованием изображения .PNG 2
Без ускорения я предполагаю, что какое-то преобразование происходит с каждым drawImage(), которое я делаю в программном обеспечении, и значительно уменьшает FPS в случае .PNG. Почему, хотя, с ускорением, результаты будут переключаться (и PNG на самом деле выполняет невероятно быстрее)?! Сумасшествие!
.BMP Изображение 1 преобразуется в тип изображения TYPE_INT_RGB..PNG Изображение 2 преобразуется в тип изображения TYPE_CUSTOM. Чтобы получить постоянную скорость с ускорением opengl и без него, мне нужно создать новый BufferedImage с типом изображения TYPE_INT_ARGB и нарисовать изображение 1 или изображение 2 на этом новом изображении.
Вот результаты, выполняемые с этим:
Без -Dsun.java2d.opengl = true
120 FPS с использованием .BMP image 1
120 FPS с использованием изображения .PNG 2
С -Dsun.java2d.opengl = true
700 FPS с использованием .BMP image 1
700 FPS с использованием изображения .PNG 2
Мой реальный вопрос: могу ли я предположить, что TYPE_INT_ARGB будет родным типом изображения для всех систем и платформ? Я предполагаю, что это значение может быть другим. Есть ли какой-то способ для меня получить собственное значение, чтобы я мог всегда создавать новые BufferedImages для максимальной производительности?
Спасибо заранее...