Рисование изображения на Java, чертовски медленно на нетбуке

В продолжение моих предыдущих вопросов (особенно этого: Java: VolatileImage медленнее, чем BufferedImage), я заметил, что простое рисование изображения (не имеет значения, буферизовано оно или нестабильно, поскольку компьютер не имеет ускоренной памяти *, и тесты показывают, что это ничего не меняет), как правило, очень долго.

(*) System.out.println(GraphicsEnvironment.getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getAvailableAcceleratedMemory()); --> 0

Сколько ? Для изображения 500x400 около 0,04 секунды. Это только рисование изображения в обратном буфере (полученном с помощью стратегии буферизации).

Теперь, учитывая, что world of warcraft работает на этом нетбуке (хотя он довольно медленный) и что в онлайн-играх с Java, похоже, нет никаких проблем, это довольно наводит на размышления.

Я совершенно уверен, что не пропустил ничего очевидного, я много искал в Интернете, но ничего не поделаешь. Итак, кто-нибудь из вас, java-гений, имеет представление о том, какая неясная проблема может быть причиной этого (или, может быть, это нормально, но я сомневаюсь в этом)?

PS: Когда я писал это, я понял, что это может быть вызвано моей установкой Linux (archlinux), но у меня есть правильный драйвер Intel. Но мой компьютер обычно имеет «Integrated Intel Graphics Media Accelerator 950», что означает, что он каким-то образом должен был ускорять видеопамять. Есть идеи по поводу этой стороны вещей?


person Norswap    schedule 30.04.2010    source источник
comment
Если вы отредактируете свой вопрос, вы можете использовать форматирование кода вокруг своего кода, что будет полезно.   -  person justkt    schedule 30.04.2010
comment
Создал совместимый буфер?   -  person Tom Hawtin - tackline    schedule 30.04.2010
comment
Почему бы вам не опубликовать свой SSCCE: sscce.org. Тогда, возможно, люди протестируют его в других средах. Мы понятия не имеем, какой у вас настоящий код и делаете ли вы что-нибудь не так. Я всегда спрашиваю, почему люди используют BufferStrategy. Swing имеет двойную буферизацию, что упрощает кодирование.   -  person camickr    schedule 30.04.2010
comment
@ Том Хотин: Ага || @ camickr: Я рисую на холсте, который не качается. Также в игре вы, очевидно, все равно хотите отключить автоматическое обновление поворота. Что касается SSCCE, это спорный вопрос, потому что, по сути, вы создаете простейший из простейших выигрышных и совместимых изображений (используя GraphicsDevice и прочее), а затем рисуете его, и он все еще медленный. Для сравнения, он работает примерно в 50 раз быстрее на первоклассном компьютере с Windows и примерно в 10 раз быстрее на другом нетбуке (с Intel Graphics Media Accelerator 3150).   -  person Norswap    schedule 01.05.2010
comment
Другой нетбук - с какой ОС он работает? См. Мой отредактированный ответ.   -  person Chris    schedule 03.05.2010
comment
Сегодня я узнал, что hell - это единица измерения времени 0,04 секунды. Я начну использовать этот термин, когда хочу обозначить небольшие промежутки времени.   -  person rockerest    schedule 04.03.2012


Ответы (2)


Я также использую Arch Linux и заметил, что мои игры иногда работают медленно, особенно при использовании альфа-прозрачности с моими изображениями. Оказывается, даже Windows, а не только Linux иногда по умолчанию отключает аппаратное ускорение.

Я искал решение проблемы и нашел следующее: http://web.archive.org/web/20120926022918/http://www.systemparadox.co.uk/node/29

Включение OpenGL значительно увеличило частоту кадров, и я предполагаю, что если вы снова запустите свои тесты, вы получите более быструю отрисовку.

person Dennis    schedule 04.03.2012
comment
Я не могу точно подтвердить, поскольку рассматриваемая тестовая конфигурация была выброшена некоторое время назад. Но я приму это в надежде, что это поможет другим. - person Norswap; 04.03.2012

Я не очень разбираюсь в java-графике, но если бы я был на вашем месте, я бы предположил, что измерение ничего не значит без значения для сравнения, которое, похоже, могло бы быть у вас, но вы не делились. Добавьте эту информацию в свой вопрос вместе со спецификациями системы сравнения (это настольный компьютер? Есть ли у него выделенная видеокарта? Работает ли он под управлением Windows или Linux?).


Что касается ваших измерений, которые показывают, что на другом нетбуке он работает в 10 раз быстрее, этот другой ноутбук работает под управлением Windows или он также работает под управлением Linux? У Linux исторически были очень посредственные графические драйверы - они просто не работали так хорошо, как эквиваленты Windows. Фактически долгое время единственные драйверы, которые вы могли получить, были написаны не ATI / nVidia / и т. Д., А скорее любителями. Меня бы совсем не удивило, если бы машина с Linux работала с графической программой в десять раз медленнее, чем аналогичная машина с Windows.

Такова была ситуация, как я понял лет пять назад. Сомневаюсь, что это сильно изменилось.

person Chris    schedule 30.04.2010
comment
Мы можем сделать некоторые расчеты. 500x400 / 0,04 - 5 000 000 пикселей в секунду. Предположительно, это будет чтение и запись по 32 бита каждая. Я был бы разочарован, если бы настольный компьютер двадцатилетней давности (не ПК) не справился с этим. - person Tom Hawtin - tackline; 30.04.2010
comment
Как насчет того, чтобы посмотреть на существующие игры, в которых используются сложные операции Java2D? Я бы порекомендовал материалы на goldenstudios.or.id/products/games/index.php как, возможно, эталон :) - person Chris Dennett; 30.04.2010
comment
@Chris: См. Мой ответ на camickr выше для сравнения значений. || @Tom: Мои собственные расчеты сказали мне то же самое :) || @Chris: Я поискал его некоторое время назад, но, похоже, там нет волшебных трюков, которые я ищу там. Собственно у меня сейчас около 99% вина лежит в стане ОС. Я открыл ветку на форумах Archlinux, но пока безуспешно. - person Norswap; 01.05.2010
comment
Думаю, Ubuntu Netbook Edition, 9.10 (Karmic Koala). Кстати, Intel делает качественный драйвер с открытым исходным кодом, который поддерживает графическое ускорение. Я осмотрелся и не нашел никого, у кого были бы сопоставимые проблемы - это определенно моя система, потому что glxgears (тест Linux 3D) дает мне 60 кадров в секунду, что очень мало (люди с моим нетбуком обычно сообщают о 300-400) . Я нашел одну или две вещи, которые стоит попробовать, но я очень сомневаюсь, что они сработают: s - person Norswap; 03.05.2010