- if (reallyCleared) {
- // Really refreshed, do it all
- if (SwingScreen.doubleBuffer) {
- Graphics gr = frame.bufferStrategy.getDrawGraphics();
- frame.paint(gr);
- gr.dispose();
- frame.bufferStrategy.show();
- Toolkit.getDefaultToolkit().sync();
- } else {
- frame.repaint();
- }
+ /*
+ System.err.printf("flushPhysical(): reallyCleared %s dirty %s\n",
+ reallyCleared, dirty);
+ */
+
+ // If reallyCleared is set, we have to draw everything.
+ if ((frame.bufferStrategy != null) && (reallyCleared == true)) {
+ // Triple-buffering: we have to redraw everything on this thread.
+ Graphics gr = frame.bufferStrategy.getDrawGraphics();
+ frame.paint(gr);
+ gr.dispose();
+ frame.bufferStrategy.show();
+ // sync() doesn't seem to help the tearing for me.
+ // Toolkit.getDefaultToolkit().sync();
+ return;
+ } else if ((frame.bufferStrategy == null) && (reallyCleared == true)) {
+ // Repaint everything on the Swing thread.
+ frame.repaint();