Я потратил некоторое время на изучение возможностей аппаратного ускорения 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()
В учебном пособии я читал некоторые общие понятия о правильной настройке окна рендеринга ( tutorial ).использует метод getCompatibleImage, который, я считаю, возвращает BufferedImage, чтобы получить их «аппаратно ускоренные» изображения для быстрого рисования, что связано с вопросом 2 о том, ускоряется ли аппаратно.
4) Это меньше аппаратного ускорения,но это то, что мне было любопытно: мне нужно заказать, какая графика рисуется?Я знаю, что при использовании OpenGL через C / C ++ лучше всего убедиться, что одна и та же графика рисуется во всех местах, где она должна быть нарисована одновременно, чтобы уменьшить количество раз, когда текущая текстура должна переключаться.Из того, что я прочитал, кажется, что Java позаботится об этом для меня и убедится, что все нарисовано наиболее оптимальным образом, но, опять же, ничего подобного не было ясно сказано.
5)Какие классы AWT / Swing поддерживают аппаратное ускорение, и какие следует использовать?В настоящее время я использую класс, который расширяет JFrame для создания окна, и добавляю к нему Canvas, из которого я создаю BufferStrategy.Это хорошая практика, или есть какой-то другой способ, которым я должен реализовать это?
Большое спасибо за ваше время, и я надеюсь, что предоставил четкие вопросы и достаточно информации, чтобы вы могли ответить на мои несколько вопросов.