I've been trying to work around an issue involving tearing during a buffered
rendering process in my code. Im using a buffer strategy to page flip to
BufferedImages to conduct a animation. The problem is that on every interation
of the render the square box that I render it tearing. I have purchased
multiple books and have visted multiple web sites on how to solve the tearing
problem. And I in NO MEANS want to copy or use someone elses code. Pasted below
is the code that I developed. Any suggestions are welcome. Thanks.
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import java.awt.geom.*;
public class GameEngine implements Runnable
{
private GraphicsConfiguration[] gc;
private GraphicsDevice gd;
private GraphicsEnvironment ge;
private DisplayMode dm;
private DisplayMode dms[];
private JFrame frame;
private Container c;
private File file;
private FileWriter writer;
private BufferCapabilities buffercap;
private ImageCapabilities imagecap;
private Window window;
private BufferStrategy bufstrat;
private Thread t;
private int x = 0;
private BufferedImage back1;
private BufferedImage back2;
public GameEngine()
{
t = new Thread(this,"Game Loop");
try
{
SwingUtilities.invokeAndWait(new Runnable(){
public void run()
{
try
{
initGraphics();
init();
}
catch(Exception e)
{
e.printStackTrace();
}
}
});
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void initGraphics()
{
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
gd = ge.getDefaultScreenDevice();
dm = gd.getDisplayMode();
gc = gd.getConfigurations();
dms = gd.getDisplayModes();
back1 = new
BufferedImage(dm.getWidth(),dm.getHeight(),BufferedImage.TYPE_INT_ARGB);
back2 = new
BufferedImage(dm.getWidth(),dm.getHeight(),BufferedImage.TYPE_INT_ARGB);
try
{
file = new File("C:/GraphicsInfo.txt");
writer = new FileWriter(file);
writer.write("Ideology Software Corporation\n");
writer.write("Sample Game Information\n\n");
writer.write("Display Information");
writer.write("\n\n");
writer.write("Width " + dm.getWidth());
writer.write("Height " + dm.getHeight());
writer.write("\n\n");
writer.write("Supported Display Modes");
writer.write("\n\n");
for(int k = 0;k < dms.length;k++)
{
writer.write("\n\n");
writer.write("Display Mode " + k);
writer.write("\n\n");
writer.write("Width " + dms[k].getWidth());
writer.write("\n");
writer.write("Height " + dms[k].getHeight());
writer.write("\n");
writer.write("Bit Depth " +
dms[k].getBitDepth());
writer.write("\n");
writer.write("Refresh Rate " +
dms[k].getRefreshRate());
writer.write("\n");
}
for(int i = 0;i < gc.length;i++)
{
Rectangle rect = gc[i].getBounds();
buffercap = gc[i].getBufferCapabilities();
imagecap = gc[i].getImageCapabilities();
writer.write("\n\n");
writer.write("Graphics Configuration " + i);
writer.write("\n\n");
writer.write("Configuration Width " +
rect.width);
writer.write("\n");
writer.write("Configuration Height " +
rect.height);
writer.write("\n");
writer.write("Configuration x " + rect.x);
writer.write("\n");
writer.write("Configuration y " + rect.y);
rect = ge.getMaximumWindowBounds();
writer.write("Max Window Configuraiton\n\n");
writer.write("\n");
writer.write("Max Window Width " + rect.width);
writer.write("\n");
writer.write("Max Window Height " +
rect.height);
writer.write("\n\n");
writer.write("Buffer Capabilities");
writer.write("\n");
writer.write("FullScreen Required " +
buffercap.isFullScreenRequired());
writer.write("\n");
writer.write("MultiBuffer Support " +
buffercap.isMultiBufferAvailable());
writer.write("\n");
writer.write("Page Flipping Support " +
buffercap.isPageFlipping());
writer.write("\n\n");
writer.write("Image Capabilities");
writer.write("\n");
writer.write("Acceration Support " +
imagecap.isAccelerated());
writer.write("\n");
writer.write("Volatile Image Support " +
imagecap.isTrueVolatile());
writer.write("\n\n");
}
writer.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void init()
{
frame = new JFrame();
frame.setSize(800,800);
frame.setTitle("Game Application");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setIgnoreRepaint(true);
frame.setUndecorated(true);
c = frame.getContentPane();
c.setLayout(null);
c.setBackground(new Color(0,0,0));
frame.setResizable(true);
frame.setVisible(true);
if(gd.isFullScreenSupported())
{
gd.setFullScreenWindow(frame);
}
window = gd.getFullScreenWindow();
window.createBufferStrategy(2);
bufstrat = window.getBufferStrategy();
t.start();
}
public boolean renderBackOne()
{
if(back1 != null)
{
Graphics2D backg1 = back1.createGraphics();
backg1.setColor(new Color(255,255,255));
backg1.fillRect(x,100,100,100);
return true;
}
else
{
return false;
}
}
public boolean renderBackTwo()
{
if(back2 != null)
{
Graphics2D backg2 = back2.createGraphics();
backg2.setColor(new Color(255,255,255));
backg2.fillRect(x,100,100,100);
return true;
}
else
{
return false;
}
}
public void update()
{
if(!bufstrat.contentsLost())
{
bufstrat.show();
}
}
public void render()
{
Graphics2D g2 = (Graphics2D)bufstrat.getDrawGraphics();
g2.setColor(new Color(255,255,255));
if(g2 != null)
{
if(renderBackOne())
{
g2.drawImage(back1,new
AffineTransformOp(g2.getTransform(),g2.getRenderingHints()),0,0);
}
else
{
g2.drawImage(back2,new
AffineTransformOp(g2.getTransform(),g2.getRenderingHints()),0,0);
}
}
}
public void run()
{
try
{
for(;;)
{
Thread.sleep(750);
update();
render();
x++;
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static void main(String args[])
{
GameEngine gameengine = new GameEngine();
}
}
[Message sent by forum member 'xeondeveloper' (xeondeveloper)]
http://forums.java.net/jive/thread.jspa?messageID=108465
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA2D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".