Я проводил некоторое время, изучая возможности аппаратного ускорения Java, и я все еще немного смущен, так как ни один из сайтов, которые я нашел онлайн напрямую и не ответил на некоторые из моих вопросов. Итак, вот вопросы, которые у меня есть для аппаратного ускорения в Java:
1) В Eclipse версии 3.6.0, с самым последним обновлением Java для Mac OS X (я думаю, 1.6u10), аппаратное ускорение включено по умолчанию? Я где-то читал, что
someCanvas.getGraphicsConfiguration().getBufferCapabilities().isPageFlipping()
должен указывать, включено ли аппаратное ускорение, а моя программа возвращает true, когда это выполняется на моем основном экземпляре Canvas для рисования. Если мое аппаратное ускорение не включено сейчас или по умолчанию, что мне нужно сделать, чтобы включить его?
2) Я видел пару статей здесь и там о различии между BufferedImage и VolatileImage, в основном говоря, что VolatileImage - это аппаратное ускоренное изображение и хранится в VRAM для быстрого копирования. Тем не менее, я также обнаружил некоторые случаи, когда BufferedImage, как говорят, также аппаратно ускоряется. Является ли аппаратное обеспечение BufferedImage ускоренным в моей среде? Каково было бы преимущество использования VolatileImage, если оба типа аппаратного ускорения? Мое основное предположение о том, что VolatileImage имеет ускорение, заключается в том, что VolatileImage способен обнаруживать, когда его VRAM был сброшен. Но если BufferedImage также поддерживает ускорение сейчас, не имеет ли он такого же типа обнаружения, встроенного в него, а просто скрытого от пользователя, в случае сбрасывания памяти?
3) Есть ли какие-либо преимущества при использовании
someGraphicsConfiguration.getCompatibleImage/getCompatibleVolatileImage()
в отличие от
ImageIO.read()
В учебном пособии, который я читал для некоторых общих концепций относительно правильной настройки окна рендеринга (учебник), он использует метод getCompatibleImage, который, как мне кажется, возвращает BufferedImage, чтобы получить свои "аппаратные ускоренные" изображения для быстрого рисования, что ставит под сомнение вопрос о том, если это аппаратное ускорение.
4) Это меньше аппаратного ускорения, но мне это любопытно: нужно ли заказывать графику? Я знаю, что при использовании OpenGL через C/С++ лучше всего сделать так, чтобы одна и та же графика рисовалась во всех местах, которые нужно нарисовать за раз, чтобы уменьшить количество переходов текущей текстуры. Из того, что я прочитал, похоже, что Java позаботится об этом для меня и убедится в том, что все будет сделано самым оптимальным образом, но опять-таки ничто никогда не говорило ничего подобного ясно.
5) Какие классы AWT/Swing поддерживают аппаратное ускорение и какие из них следует использовать? В настоящее время я использую класс, который расширяет JFrame для создания окна и добавления к нему Canvas, из которого я создаю BufferStrategy. Является ли это хорошей практикой или есть какой-то другой способ, которым я должен это реализовать?
Большое спасибо за ваше время, и я надеюсь, что предоставил вам четкие вопросы и достаточную информацию, чтобы вы могли ответить на мои несколько вопросов.