Jogamp
Fix Window destroyNotify() -> QUIT
authorSven Gothel <sgothel@jausoft.com>
Thu, 27 Jun 2013 14:41:10 +0000 (16:41 +0200)
committerSven Gothel <sgothel@jausoft.com>
Thu, 27 Jun 2013 14:41:10 +0000 (16:41 +0200)
src/jake2/render/opengl/GLDriver.java
src/jake2/render/opengl/JoglDummyDriver.java
src/jake2/render/opengl/JoglES1Driver.java
src/jake2/render/opengl/JoglES2Driver.java
src/jake2/render/opengl/JoglGL2Driver.java
src/jake2/render/opengl/NEWTWin.java

index d350811..7f86430 100644 (file)
@@ -18,6 +18,7 @@ public interface GLDriver {
     
     void beginFrame(float camera_separation);
     
+    /** Performs <code>swapBuffers()</code>, ticks the fps counter and performs <code>QUIT</code> if requested. */ 
     void endFrame();
 
     void appActivate(boolean activate);
index 73620b2..e962c37 100644 (file)
@@ -102,9 +102,9 @@ public abstract class JoglDummyDriver extends DummyGL implements GLDriver {
     }
 
     public void endFrame() {
-        // newtWin.window.swapBuffers();
+        newtWin.checkQuit();
+        // newtWin.swapBuffers();
         // deactivate();
-        newtWin.fpsCounter.tickFPS();
     }
 
     public void appActivate(boolean activate) {
index f9a29f8..6f138cd 100644 (file)
@@ -113,9 +113,8 @@ public abstract class JoglES1Driver extends JoglGL2ES1 implements GLDriver {
     }
 
     public void endFrame() {
-        newtWin.window.swapBuffers();
+        newtWin.endFrame();
         // deactivate();
-        newtWin.fpsCounter.tickFPS();
     }
 
     public void appActivate(boolean activate) {
index 2548b62..08c95b9 100644 (file)
@@ -118,9 +118,8 @@ public abstract class JoglES2Driver extends JoglGL2ES1 implements GLDriver {
     }
 
     public void endFrame() {
-        newtWin.window.swapBuffers();
+        newtWin.endFrame();
         // deactivate();
-        newtWin.fpsCounter.tickFPS();
     }
 
     public void appActivate(boolean activate) {
index cad9c0a..0c95680 100644 (file)
@@ -114,9 +114,8 @@ public abstract class JoglGL2Driver extends JoglGL2ES1 implements GLDriver {
     }
 
     public void endFrame() {
-        newtWin.window.swapBuffers();
+        newtWin.endFrame();
         // deactivate();
-        newtWin.fpsCounter.tickFPS();
     }
 
     public void appActivate(boolean activate) {
index bc514ed..ff7b949 100644 (file)
@@ -18,6 +18,7 @@ import jake2.sys.NEWTKBD;
 import java.util.List;
 
 import javax.media.nativewindow.CapabilitiesChooser;
+import javax.media.nativewindow.WindowClosingProtocol.WindowClosingMode;
 import javax.media.nativewindow.util.Dimension;
 import javax.media.nativewindow.util.DimensionImmutable;
 import javax.media.nativewindow.util.SurfaceSize;
@@ -39,6 +40,7 @@ public class NEWTWin {
     MonitorMode oldDisplayMode = null;
     volatile Screen screen = null;
     volatile GLWindow window = null;
+    volatile boolean shouldQuit = false;
     final FPSCounterImpl fpsCounter = new FPSCounterImpl();
 
     public List<MonitorMode> getModeList() {
@@ -119,14 +121,11 @@ public class NEWTWin {
             }
         }
         window = GLWindow.create(screen, caps);
+        window.setDefaultCloseOperation(WindowClosingMode.DO_NOTHING_ON_CLOSE); // we do handle QUIT on our own, no GLWindow.display() called.
         window.setCapabilitiesChooser(chooser);
         window.addWindowListener(new WindowAdapter() {
             public void windowDestroyNotify(WindowEvent e) {
-                if (!Globals.appletMode) {
-                    if( null != window ) { // already in shutdown ?
-                        Cbuf.ExecuteText(Defines.EXEC_APPEND, "quit");
-                    }
-                }
+                shouldQuit = !Globals.appletMode && null != window; // not applet and not already in shutdown ?
             }
 
             public void windowResized(WindowEvent e) {
@@ -220,6 +219,23 @@ public class NEWTWin {
         }        
     }
     
+    /** Performs {@link GLWindow#swapBuffers()}, ticks the fps counter and performs <code>QUIT</code> if requested. */
+    public final void endFrame() {
+        window.swapBuffers();
+        fpsCounter.tickFPS();
+        if( shouldQuit ) {
+            deactivateGLContext();
+            Cbuf.ExecuteText(Defines.EXEC_APPEND, "quit");
+        }
+    }
+    /** Performs <code>QUIT</code> if requested. */
+    public final void checkQuit() {
+        if( shouldQuit ) {
+            deactivateGLContext();
+            Cbuf.ExecuteText(Defines.EXEC_APPEND, "quit");
+        }
+    }
+    
     void shutdown() {
         shutdownImpl(true);
     }
http://JogAmp.org git info: FAQ, tutorial and man pages.