summaryrefslogtreecommitdiffstats
path: root/src/demos/jrefract/JRefract.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/demos/jrefract/JRefract.java')
-rwxr-xr-xsrc/demos/jrefract/JRefract.java71
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();
}