Аппаратное ускорение Java

Я потратил некоторое время на изучение возможностей аппаратного ускорения Java, и я все еще немного сбит с толку, поскольку ни один из сайтов, которые я нашел в Интернете, напрямую и четко не ответил на некоторые из вопросов, которые у меня есть. Итак, вот вопросы, которые у меня есть по поводу аппаратного ускорения в Java:

1) В Eclipse версии 3.6.0 с последним обновлением Java для Mac OS X (я думаю, 1.6u10) включено ли аппаратное ускорение по умолчанию? Я где-то читал, что

someCanvas.getGraphicsConfiguration().getBufferCapabilities().isPageFlipping()

должен указывать, включено ли аппаратное ускорение, и моя программа возвращает истину, когда она запускается на моем основном экземпляре Canvas для рисования. Если мое аппаратное ускорение не включено сейчас или по умолчанию, что мне нужно сделать, чтобы включить его?

2) Я видел пару статей о разнице между BufferedImage и VolatileImage, в которых в основном говорилось, что VolatileImage - это изображение с аппаратным ускорением, которое хранится во VRAM для операций быстрого копирования. Однако я также нашел несколько случаев, когда BufferedImage также считается аппаратным ускорением. Ускоряется ли оборудование BufferedImage в моей среде? В чем будет преимущество использования VolatileImage, если оба типа имеют аппаратное ускорение? Мое главное предположение в пользу преимущества наличия VolatileImage в случае наличия ускорения у обоих заключается в том, что VolatileImage может определять, когда его VRAM был сброшен. Но если BufferedImage теперь также поддерживает ускорение, разве он не будет иметь такого же типа обнаружения, просто скрытого от пользователя, в случае, если память выгружается?

3) Есть ли какие-либо преимущества в использовании

someGraphicsConfiguration.getCompatibleImage/getCompatibleVolatileImage()

] в отличие от

ImageIO.read()

В учебнике, который я читал для некоторых общих концепций правильной настройки окна рендеринга ( учебник ), он использует метод getCompatibleImage, который, как я считаю, возвращает BufferedImage, чтобы получить их "аппаратное ускорение" изображения для быстрого рисования, который связан с вопросом 2 о том, есть ли аппаратное ускорение.

4) Это меньшее аппаратное ускорение, но это то, что меня интересовало: нужно ли мне заказывать, какую графику рисовать? Я знаю, что при использовании OpenGL через C / C ++ лучше всего убедиться, что одна и та же графика отображается во всех местах, где ее нужно нарисовать, одновременно, чтобы уменьшить количество раз, когда необходимо переключать текущую текстуру. Судя по тому, что я прочитал, кажется, что Java позаботится об этом за меня и позаботится о том, чтобы все было прорисовано наиболее оптимальным образом, но, опять же, ничего подобного не говорилось четко.

5) What AWT / Классы Swing поддерживают аппаратное ускорение, и какие из них следует использовать? В настоящее время я использую класс, расширяющий JFrame для создания окна, и добавив к нему Canvas, из которого я создаю BufferStrategy. Это хорошая практика или есть какой-то другой способ, которым я должен ее реализовать?

Большое спасибо за ваше время, и я надеюсь, что предоставил четкие вопросы и достаточно информации, чтобы вы ответили на несколько моих вопросов.

19
задан Zixradoom 23 March 2015 в 13:55
поделиться