package MyGame;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.VolatileImage;
/**
* Extended volatile image class
*
* @author 10uR
*/
public class VImage
{
private BufferedImage sourceImage;
private VolatileImage volatileImage;
private static GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
private static GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
public VImage(BufferedImage sourceImage)
{
this.sourceImage = sourceImage;
}
public Image getVolatileImage()
{
if(Program.useVolatileImages){
if (volatileImage == null || volatileImage.validate(gc) != VolatileImage.IMAGE_OK)
reload();
return volatileImage;
}
return sourceImage;
}
public void setSourceImage(BufferedImage sourceImage)
{
this.sourceImage = sourceImage;
}
private void reload()
{
do
volatileImage = getVolatileImageFromImage(sourceImage);
while (volatileImage.contentsLost());
}
public static VolatileImage getVolatileImageFromImage(BufferedImage image)
{
VolatileImage volatileImage = gc.createCompatibleVolatileImage(image.getWidth(null), image.getHeight(null), image.getTransparency());
Graphics2D g = (Graphics2D) volatileImage.getGraphics();
g.setComposite(AlphaComposite.Src);
g.setBackground(new Color(0, 0, 0, 0));
g.clearRect(0, 0, volatileImage.getWidth(), volatileImage.getHeight());
g.drawImage(image, 0, 0, null);
g.dispose();
return volatileImage;
}
}
This is what i wrote for handle volatile images like explained here: http://gpwiki.org/index.php/Java:Tutorials:VolatileImage
To test this VImage class i made a program that has 2 balls which can controllable form keyboard and added a 1920x1200 background image.It worked well with volatile images on window mode but when i toggle full screen mode fps dropped down immediately from 60 to 40 and sometimes i got heap space exception.After set useVolatileImages as false fps increased again and working perfect.Now i’m wondering am i doing something wrong?