diff options
author | Kenneth Russel <[email protected]> | 2005-09-09 07:08:45 +0000 |
---|---|---|
committer | Kenneth Russel <[email protected]> | 2005-09-09 07:08:45 +0000 |
commit | ffb098e3eed864346f1bd9f53021b17f9148da49 (patch) | |
tree | c95f36b4e25fb8facace3e8ead0827e61a80093e /src/demos/jrefract/JRefract.java | |
parent | 6988570ed0a3ffa8f6d544cdb245cb7f0e77885c (diff) |
Refactored demos to mostly subclass common Demo superclass providing
shutdown capabilities. Moved DemoListener to demos.common package.
Added ManipManager removal code to demos using manipulators or
ExaminerViewer to fix memory leak when run in JRefract harness. Added
workaround for another seeming memory leak when run under current JDK
1.6 due to java.awt.Component now being finalizable and keeping data
alive longer than previously. Made ManipManager.unregisterWindow more
lenient with respect to null or invalid arguments.
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/jogl-demos/branches/JSR-231@122 3298f667-5e0e-4b4a-8ed4-a3559d26a5f4
Diffstat (limited to 'src/demos/jrefract/JRefract.java')
-rwxr-xr-x | src/demos/jrefract/JRefract.java | 71 |
1 files changed, 38 insertions, 33 deletions
diff --git a/src/demos/jrefract/JRefract.java b/src/demos/jrefract/JRefract.java index d6c3e04..b3953b4 100755 --- a/src/demos/jrefract/JRefract.java +++ b/src/demos/jrefract/JRefract.java @@ -42,6 +42,7 @@ import javax.swing.event.*; import javax.media.opengl.*; import com.sun.opengl.utils.*; import com.sun.opengl.utils.*; +import demos.common.*; import demos.hdr.HDR; import demos.hwShadowmapsSimple.HWShadowmapsSimple; import demos.infiniteShadowVolumes.InfiniteShadowVolumes; @@ -84,6 +85,17 @@ public class JRefract { private static final int WATER = 8; private JInternalFrame addWindow(int which) { + // FIXME: workaround for problem in 1.6 where ALL Components, + // including Swing components, are Finalizable, requiring two full + // GC cycles (and running of finalizers) to reclaim + System.gc(); + // Try to get finalizers run + try { + Thread.sleep(1); + } catch (InterruptedException e) { + } + System.gc(); + String str = ""; switch (which) { case GEARS: str = "Gears Demo"; break; @@ -122,6 +134,7 @@ public class JRefract { } }; + Demo demo = null; switch (which) { case GEARS: { // GLEventListener already added @@ -129,46 +142,35 @@ public class JRefract { } case HDR: { - HDR demo = new HDR(); - demo.setDemoListener(demoListener); - demo.setup(null); - inner.setSize(demo.getPreferredWidth(), demo.getPreferredHeight()); - canvas.addGLEventListener(demo); + demo = new HDR(); + ((HDR) demo).setup(null); + inner.setSize(((HDR) demo).getPreferredWidth(), ((HDR) demo).getPreferredHeight()); break; } case HWSHADOWS: { - HWShadowmapsSimple demo = new HWShadowmapsSimple(); - demo.setDemoListener(demoListener); - canvas.addGLEventListener(demo); + demo = new HWShadowmapsSimple(); break; } case INFINITE: { - InfiniteShadowVolumes demo = new InfiniteShadowVolumes(); - demo.setDemoListener(demoListener); - canvas.addGLEventListener(demo); + demo = new InfiniteShadowVolumes(); break; } case REFRACT: { - VertexProgRefract demo = new VertexProgRefract(); - demo.setDemoListener(demoListener); - canvas.addGLEventListener(demo); + demo = new VertexProgRefract(); break; } case VBO: { - VertexBufferObject demo = new VertexBufferObject(); - demo.setDemoListener(demoListener); - canvas.addGLEventListener(demo); + demo = new VertexBufferObject(); break; } case WARP: { - VertexProgWarp demo = new VertexProgWarp(); - demo.setDemoListener(demoListener); - demo.setTitleSetter(new VertexProgWarp.TitleSetter() { + demo = new VertexProgWarp(); + ((VertexProgWarp) demo).setTitleSetter(new VertexProgWarp.TitleSetter() { public void setTitle(final String title) { SwingUtilities.invokeLater(new Runnable() { public void run() { @@ -177,17 +179,18 @@ public class JRefract { }); } }); - canvas.addGLEventListener(demo); break; } case WATER: { - ProceduralTexturePhysics demo = new ProceduralTexturePhysics(); - demo.setDemoListener(demoListener); - canvas.addGLEventListener(demo); + demo = new ProceduralTexturePhysics(); break; } } + if (which != GEARS) { + demo.setDemoListener(demoListener); + canvas.addGLEventListener(demo); + } canvas.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { canvas.requestFocus(); @@ -196,20 +199,23 @@ public class JRefract { addJPanel(canvas); + final Demo fDemo = demo; + inner.addInternalFrameListener(new InternalFrameAdapter() { public void internalFrameClosed(InternalFrameEvent e) { - removeJPanel(canvas); - System.gc(); + if (fDemo != null) { + fDemo.shutdownDemo(); + } } }); inner.getContentPane().setLayout(new BorderLayout()); if (which == REFRACT) { - inner.getContentPane().add(canvas, BorderLayout.CENTER); - inner.getContentPane().add(new JButton("West"), BorderLayout.WEST); - inner.getContentPane().add(new JButton("East"), BorderLayout.EAST); - inner.getContentPane().add(new JButton("North"), BorderLayout.NORTH); - inner.getContentPane().add(new JButton("South"), BorderLayout.SOUTH); + // Testing scrolling + canvas.setSize(512, 512); + canvas.setPreferredSize(new Dimension(512, 512)); + JScrollPane scroller = new JScrollPane(canvas); + inner.getContentPane().add(scroller); } else if (which == GEARS) { // Provide control over transparency of gears background canvas.setOpaque(false); @@ -237,7 +243,6 @@ public class JRefract { } public void run(String[] args) { - JFrame frame = new JFrame("JOGL and Swing Interoperability"); desktop = new JDesktopPane(); desktop.setSize(1024, 768); @@ -350,7 +355,7 @@ public class JRefract { frame.setSize(desktop.getSize()); frame.setVisible(true); - animator = new Animator(); + animator = new FPSAnimator(60); animator.start(); } |