У меня есть вопрос. Недавно я искал способы реализации аппаратного рендеринга с использованием Java. Моей целью было не использовать внешнюю библиотеку, такую как OpenGL. Я нашел сообщение на веб-сайте, где подробно описано, как это сделать.
Вот какой код был (я переименовал некоторые элементы):
@Override
public void paint(Graphics g) {
createVolatileImage();
do {
GraphicsConfiguration gc = getGraphicsConfiguration();
Graphics offscreenGraphics = volatileImage.getGraphics();
int validationCode = volatileImage.validate(gc);
if (validationCode == VolatileImage.IMAGE_INCOMPATIBLE) {
createVolatileImage();
}
offscreenGraphics.setColor(getBackground());
offscreenGraphics.fillRect(0, 0, getSize().width, getSize().height);
offscreenGraphics.setColor(getForeground());
paint(offscreenGraphics);
g.drawImage(volatileImage, 0, 0, this);
} while (volatileImage.contentsLost());
}
private void createVolatileImage() {
GraphicsConfiguration gc = getGraphicsConfiguration();
volatileImage = gc.createCompatibleVolatileImage(getWidth(), getHeight());
}
К сожалению, если я изменю размер окна - метод paint (Graphics) (в классе Canvas) вызывается примерно 1000 раз в секунду, вызывая исключение OutOfMemoryException.
Кто-нибудь сталкивался с этим раньше?
Большое спасибо заранее!