I would revert to the use of the Java Docs recommended do/while loops. They work well. And you will have to figure out when to call your rendering method.
I use MemoryImageSource and render with the do/while loops in my newPixels() method. I use paint() with the do/while loops for expose events. And I toggle setIgnoreRepaint() as needed. The mods to you've made to the do/while loops look unnecessary. But our apps are different. You are on the right track. Don't forget about overriding update(). [EMAIL PROTECTED] wrote:
OK I have it working by overriding paint() to call the rendering method but this seems like a bit of wasted effort, at least on some occasions. Anyway, it's working but I have noticed that almost every render has to happen twice because the strategy.contentsRestored() method returns true. Is this normal? The following is a cut-down version of the code which exhibits this problem. [code] import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.image.BufferStrategy; import javax.swing.JFrame; import javax.swing.JPanel; public class StrategyTest extends JFrame { private class MyPanel extends JPanel { public MyPanel() { this.setIgnoreRepaint(true); this.addComponentListener(new ComponentAdapter() { @Override public void componentResized(final ComponentEvent e) { StrategyTest.this.render(); } }); } } private final BufferStrategy strategy; private Graphics2D g2d; public StrategyTest() { this.setLayout(new BorderLayout()); this.add(new MyPanel(), BorderLayout.CENTER); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.pack(); this.setSize(1024, 768); this.setIgnoreRepaint(true); this.createBufferStrategy(2); this.strategy = this.getBufferStrategy(); } public static void main(final String[] args) { new StrategyTest().setVisible(true); } @Override public void paint(final Graphics g) { this.render(); } public void render() { if (this.strategy == null) { return; } do { do { this.g2d = (Graphics2D)this.strategy.getDrawGraphics(); this.drawBox(); this.g2d.dispose(); if (!this.strategy.contentsRestored()) { break; } else { System.out.println("### BUFFER CONTENTS RESTORED ###"); } } while (true); this.strategy.show(); if (!this.strategy.contentsLost()) { break; } else { System.out.println("### BUFFER CONTENTS LOST ###"); } } while (true); } @Override public void update(final Graphics g) { this.paint(g); } private void drawBox() { this.g2d.setColor(Color.RED); this.g2d.fillRect(20, 20, this.getWidth() - 40, this.getHeight() - 40); } } [/code]
=========================================================================== 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".