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".