diff options
author | Kenneth Russel <[email protected]> | 2005-07-07 22:50:13 +0000 |
---|---|---|
committer | Kenneth Russel <[email protected]> | 2005-07-07 22:50:13 +0000 |
commit | 3cce9fefe99b2a9fe7372c5be21ba7a49f98bf66 (patch) | |
tree | f1c260f62b6659b9fb5fa6d96e4c8723e4fc55d7 | |
parent | 9d278dff86c07218ff2616745381ccc2689f8ea5 (diff) |
Merged with main trunk (tag JOGL_PRE_1_1_1)
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/jogl-demos/branches/JSR-231@98 3298f667-5e0e-4b4a-8ed4-a3559d26a5f4
42 files changed, 699 insertions, 160 deletions
diff --git a/make/build.xml b/make/build.xml index 95afeee..2f330f0 100644 --- a/make/build.xml +++ b/make/build.xml @@ -31,7 +31,15 @@ </fail> </target> - <target name="init" depends="java.class.path.validate"> + <target name="setup.cg.excludes" unless="jogl.cg"> + <property name="jogl.cg.excludes" value="demos/cg/**,demos/hdr/**" /> + </target> + + <target name="skip.cg.excludes" if="jogl.cg"> + <property name="jogl.cg.excludes" value="" /> + </target> + + <target name="init" depends="java.class.path.validate,setup.cg.excludes,skip.cg.excludes"> <property name="jogl.jar" value="../../jogl/build/jogl.jar" /> <property name="classes" value="../build/classes" /> <property name="src" value="../src" /> @@ -50,7 +58,7 @@ <pathelement path="${classpath}" /> <pathelement location="${jogl.jar}" /> </path> - <javac destdir="${classes}" excludes="demos/cg/**" source="1.4" debug="true" debuglevel="source,lines"> + <javac destdir="${classes}" excludes="${jogl.cg.excludes}" source="1.4" debug="true" debuglevel="source,lines"> <src path="${src}" /> <classpath refid="jogl.classpath" /> </javac> @@ -59,6 +67,14 @@ <exclude name="gleem/**" /> <exclude name="demos/util/**" /> </fileset> + <fileset dir="${src}"> + <include name="demos/cg/**/*.cg" /> + </fileset> + <fileset dir="${src}"> + <include name="demos/hdr/shaders/**/*.cg" /> + <include name="demos/hdr/shaders/**/*.arbvp1" /> + <include name="demos/hdr/shaders/**/*.arbfp1" /> + </fileset> </jar> <jar destfile="${jogl.demos.util.jar}"> <fileset dir="${classes}"> diff --git a/src/demos/cg/runtime_ogl/cgGL_vertex_example.java b/src/demos/cg/runtime_ogl/cgGL_vertex_example.java index ec2cb9a..f1f41dd 100644 --- a/src/demos/cg/runtime_ogl/cgGL_vertex_example.java +++ b/src/demos/cg/runtime_ogl/cgGL_vertex_example.java @@ -31,11 +31,14 @@ * */ +package demos.cg.runtime_ogl; + import net.java.games.cg.*; import net.java.games.jogl.*; import java.awt.*; import java.awt.event.*; +import java.io.*; /** * cgGL_vertex_example: simple demo of Nvidia CgGL API. Based upon C version @@ -187,9 +190,14 @@ public class cgGL_vertex_example implements GLEventListener CheckCgError(); /* Test adding source text to context */ - Program = CgGL.cgCreateProgramFromFile( - Context, CgGL.CG_SOURCE, "cgGL_vertex_example.cg", - profile, null, null); + try { + Program = CgGL.cgCreateProgramFromStream( + Context, CgGL.CG_SOURCE, + getClass().getClassLoader().getResourceAsStream("demos/cg/runtime_ogl/cgGL_vertex_example.cg"), + profile, null, null); + } catch (IOException e) { + throw new RuntimeException("Error loading Cg vertex program", e); + } CheckCgError(); System.err.println( diff --git a/src/demos/cg/runtime_ogl_vertex_fragment/runtime_ogl_vertex_fragment.java b/src/demos/cg/runtime_ogl_vertex_fragment/runtime_ogl_vertex_fragment.java index 3ceabc0..0c389e1 100644 --- a/src/demos/cg/runtime_ogl_vertex_fragment/runtime_ogl_vertex_fragment.java +++ b/src/demos/cg/runtime_ogl_vertex_fragment/runtime_ogl_vertex_fragment.java @@ -31,6 +31,8 @@ * */ +package demos.cg.runtime_ogl_vertex_fragment; + import net.java.games.cg.*; import net.java.games.jogl.*; import net.java.games.jogl.util.*; @@ -67,9 +69,6 @@ public class runtime_ogl_vertex_fragment implements GLEventListener GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities()); canvas.addGLEventListener(new runtime_ogl_vertex_fragment()); - // Use debug pipeline - canvas.setGL(new DebugGL(canvas.getGL())); - frame.add(canvas); frame.setSize(512, 512); final Animator animator = new Animator(canvas); @@ -94,6 +93,9 @@ public class runtime_ogl_vertex_fragment implements GLEventListener public void init(GLDrawable drawable) { + // Use debug pipeline + // drawable.setGL(new DebugGL(drawable.getGL())); + GL gl = drawable.getGL(); // Basic Cg setup; register a callback function for any errors @@ -235,8 +237,13 @@ public class runtime_ogl_vertex_fragment implements GLEventListener // Load and compile the vertex program from demo_vert.cg; hold on to the // handle to it that is returned. - vertexProgram = CgGL.cgCreateProgramFromFile(context, CgGL.CG_SOURCE, "demo_vert.cg", - vertexProfile, null, null); + try { + vertexProgram = CgGL.cgCreateProgramFromStream(context, CgGL.CG_SOURCE, + getClass().getClassLoader().getResourceAsStream("demos/cg/runtime_ogl_vertex_fragment/demo_vert.cg"), + vertexProfile, null, null); + } catch (IOException e) { + throw new RuntimeException("Error loading Cg vertex program", e); + } if (!CgGL.cgIsProgramCompiled(vertexProgram)) CgGL.cgCompileProgram(vertexProgram); @@ -245,8 +252,13 @@ public class runtime_ogl_vertex_fragment implements GLEventListener CgGL.cgGLLoadProgram(vertexProgram); // And similarly set things up for the fragment program. - fragmentProgram = CgGL.cgCreateProgramFromFile(context, CgGL.CG_SOURCE, "demo_frag.cg", - fragmentProfile, null, null); + try { + fragmentProgram = CgGL.cgCreateProgramFromStream(context, CgGL.CG_SOURCE, + getClass().getClassLoader().getResourceAsStream("demos/cg/runtime_ogl_vertex_fragment/demo_frag.cg"), + fragmentProfile, null, null); + } catch (IOException e) { + throw new RuntimeException("Error loading Cg fragment program", e); + } if (!CgGL.cgIsProgramCompiled(fragmentProgram)) { CgGL.cgCompileProgram(fragmentProgram); } diff --git a/src/demos/gears/Gears.java b/src/demos/gears/Gears.java index 775dcf0..da8fdba 100644 --- a/src/demos/gears/Gears.java +++ b/src/demos/gears/Gears.java @@ -17,11 +17,6 @@ public class Gears { Frame frame = new Frame("Gear Demo"); GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities()); - // Use debug pipeline - // canvas.setGL(new DebugGL(canvas.getGL())); - System.err.println("CANVAS GL IS: " + canvas.getGL().getClass().getName()); - System.err.println("CANVAS GLU IS: " + canvas.getGLU().getClass().getName()); - canvas.addGLEventListener(new GearRenderer()); frame.add(canvas); frame.setSize(300, 300); @@ -52,7 +47,11 @@ public class Gears { private boolean mouseRButtonDown = false; public void init(GLDrawable drawable) { + // Use debug pipeline + // drawable.setGL(new DebugGL(drawable.getGL())); + GL gl = drawable.getGL(); + System.err.println("INIT GL IS: " + gl.getClass().getName()); gl.setSwapInterval(1); diff --git a/src/demos/hwShadowmapsSimple/HWShadowmapsSimple.java b/src/demos/hwShadowmapsSimple/HWShadowmapsSimple.java index 13f3997..f97e875 100644 --- a/src/demos/hwShadowmapsSimple/HWShadowmapsSimple.java +++ b/src/demos/hwShadowmapsSimple/HWShadowmapsSimple.java @@ -161,12 +161,8 @@ public class HWShadowmapsSimple { class Listener implements GLEventListener { public void init(GLDrawable drawable) { - // init() might get called more than once if the GLCanvas is - // added and removed, but we only want to install the DebugGL - // pipeline once - // if (!(drawable.getGL() instanceof DebugGL)) { - // drawable.setGL(new DebugGL(drawable.getGL())); - // } + // Use debug pipeline + // drawable.setGL(new DebugGL(drawable.getGL())); GL gl = drawable.getGL(); GLU glu = drawable.getGLU(); @@ -378,12 +374,8 @@ public class HWShadowmapsSimple { class PbufferListener implements GLEventListener { public void init(GLDrawable drawable) { - // init() might get called more than once if the GLCanvas is - // added and removed, but we only want to install the DebugGL - // pipeline once - // if (!(drawable.getGL() instanceof DebugGL)) { - // drawable.setGL(new DebugGL(drawable.getGL())); - // } + // Use debug pipeline + // drawable.setGL(new DebugGL(drawable.getGL())); GL gl = drawable.getGL(); GLU glu = drawable.getGLU(); diff --git a/src/demos/jgears/JGears.java b/src/demos/jgears/JGears.java index 6adc528..59e6c79 100644 --- a/src/demos/jgears/JGears.java +++ b/src/demos/jgears/JGears.java @@ -2,6 +2,7 @@ package demos.jgears; import java.awt.*; import java.awt.event.*; +import javax.swing.*; import net.java.games.jogl.*; @@ -14,16 +15,33 @@ import net.java.games.jogl.*; public class JGears { public static void main(String[] args) { - Frame frame = new Frame("Gear Demo"); - GLJPanel drawable = GLDrawableFactory.getFactory().createGLJPanel(new GLCapabilities()); + JFrame frame = new JFrame("Gear Demo"); + frame.getContentPane().setLayout(new BorderLayout()); + GLCapabilities caps = new GLCapabilities(); + caps.setAlphaBits(8); + final GLJPanel drawable = GLDrawableFactory.getFactory().createGLJPanel(caps); + drawable.setOpaque(false); + drawable.addGLEventListener(new GearRenderer()); - // Use debug pipeline - // drawable.setGL(new DebugGL(drawable.getGL())); - System.err.println("DRAWABLE GL IS: " + drawable.getGL().getClass().getName()); - System.err.println("DRAWABLE GLU IS: " + drawable.getGLU().getClass().getName()); + JPanel gradientPanel = new JPanel() { + public void paintComponent(Graphics g) { + ((Graphics2D) g).setPaint(new GradientPaint(0, 0, Color.WHITE, + getWidth(), getHeight(), Color.DARK_GRAY)); + g.fillRect(0, 0, getWidth(), getHeight()); + } + }; + gradientPanel.setLayout(new BorderLayout()); + frame.getContentPane().add(gradientPanel, BorderLayout.CENTER); + gradientPanel.add(drawable, BorderLayout.CENTER); + + final JCheckBox checkBox = new JCheckBox("Transparent", true); + checkBox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + drawable.setOpaque(!checkBox.isSelected()); + } + }); + frame.getContentPane().add(checkBox, BorderLayout.SOUTH); - drawable.addGLEventListener(new GearRenderer()); - frame.add(drawable); frame.setSize(300, 300); final Animator animator = new Animator(drawable); frame.addWindowListener(new WindowAdapter() { @@ -53,6 +71,9 @@ public class JGears { public void init(GLDrawable drawable) { + // Use debug pipeline + // drawable.setGL(new DebugGL(drawable.getGL())); + GL gl = drawable.getGL(); System.err.println("INIT GL IS: " + gl.getClass().getName()); diff --git a/src/demos/jrefract/JRefract.java b/src/demos/jrefract/JRefract.java index a2feafe..e842eba 100755 --- a/src/demos/jrefract/JRefract.java +++ b/src/demos/jrefract/JRefract.java @@ -42,6 +42,7 @@ import java.util.*; import javax.imageio.*; import javax.imageio.stream.*; import javax.swing.*; +import javax.swing.event.*; import net.java.games.jogl.*; import net.java.games.jogl.util.*; @@ -63,42 +64,95 @@ import gleem.linalg.*; public class JRefract { private boolean useRegisterCombiners; - private GLJPanel canvas; - private Animator animator; + private ArrayList canvases; + private volatile boolean quit; + private volatile boolean animatorStopped; + private JDesktopPane desktop; public static void main(String[] args) { new JRefract().run(args); } - public void run(String[] args) { - - JFrame frame = new JFrame("JOGL and Swing Interoperability"); - JDesktopPane desktop = new JDesktopPane(); - desktop.setSize(1024, 768); - JInternalFrame inner = new JInternalFrame("Refraction Using Vertex Programs"); + private JInternalFrame addWindow(boolean bunny) { + String str = bunny ? + "Refraction Using Vertex Programs" : + "Gears Demo"; + final JInternalFrame inner = new JInternalFrame(str); inner.setResizable(true); + inner.setClosable(true); + inner.setVisible(true); - canvas = GLDrawableFactory.getFactory().createGLJPanel(new GLCapabilities()); - canvas.addGLEventListener(new Listener()); - canvas.setSize(512, 512); + GLCapabilities caps = new GLCapabilities(); + if (!bunny) { + caps.setAlphaBits(8); + } + final GLJPanel canvas = GLDrawableFactory.getFactory().createGLJPanel(caps); + if (bunny) { + canvas.addGLEventListener(new Listener()); + } else { + canvas.addGLEventListener(new GearRenderer()); + } canvas.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { canvas.requestFocus(); } }); + addJPanel(canvas); + + inner.addInternalFrameListener(new InternalFrameAdapter() { + public void internalFrameClosed(InternalFrameEvent e) { + removeJPanel(canvas); + System.gc(); + } + }); + inner.getContentPane().setLayout(new BorderLayout()); - 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); - inner.setSize(canvas.getSize()); + if (bunny) { + 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); + } else { + // Provide control over transparency of gears background + canvas.setOpaque(false); + JPanel gradientPanel = new JPanel() { + public void paintComponent(Graphics g) { + ((Graphics2D) g).setPaint(new GradientPaint(0, 0, Color.WHITE, + getWidth(), getHeight(), Color.DARK_GRAY)); + g.fillRect(0, 0, getWidth(), getHeight()); + } + }; + gradientPanel.setLayout(new BorderLayout()); + inner.getContentPane().add(gradientPanel, BorderLayout.CENTER); + gradientPanel.add(canvas, BorderLayout.CENTER); + + final JCheckBox checkBox = new JCheckBox("Transparent", true); + checkBox.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + canvas.setOpaque(!checkBox.isSelected()); + } + }); + inner.getContentPane().add(checkBox, BorderLayout.SOUTH); + } + + inner.setSize(512, 512); + desktop.add(inner); + + return inner; + } + + public void run(String[] args) { + + canvases = new ArrayList(); + + JFrame frame = new JFrame("JOGL and Swing Interoperability"); + desktop = new JDesktopPane(); + desktop.setSize(1024, 768); frame.getContentPane().setLayout(new BorderLayout()); frame.getContentPane().add(desktop, BorderLayout.CENTER); - desktop.add(inner); - inner.setVisible(true); JInternalFrame inner2 = new JInternalFrame("Hello, World"); JLabel label = new JLabel("Hello, World!"); @@ -109,7 +163,44 @@ public class JRefract { desktop.add(inner2); inner2.setVisible(true); - animator = new Animator(canvas); + JMenuBar menuBar = new JMenuBar(); + + JMenu menu = new JMenu("Actions"); + JMenuItem item = new JMenuItem("New bunny"); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + addWindow(true); + } + }); + menu.add(item); + + item = new JMenuItem("New gears"); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + addWindow(false); + } + }); + menu.add(item); + + item = new JMenuItem("Auto mode"); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + startAutoMode(); + } + }); + menu.add(item); + + item = new JMenuItem("Exit"); + item.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent e) { + runExit(); + } + }); + menu.add(item); + + menuBar.add(menu); + frame.setJMenuBar(menuBar); + frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { runExit(); @@ -117,7 +208,8 @@ public class JRefract { }); frame.setSize(desktop.getSize()); frame.setVisible(true); - animator.start(); + + new Thread(new ListAnimator()).start(); } class Listener implements GLEventListener { @@ -246,6 +338,9 @@ public class JRefract { "END\n"; public void init(GLDrawable drawable) { + // Use debug pipeline + // drawable.setGL(new DebugGL(drawable.getGL())); + GL gl = drawable.getGL(); GLU glu = drawable.getGLU(); float cc = 1.0f; @@ -539,7 +634,9 @@ public class JRefract { for (int i = 0; i < suffixes.length; i++) { String resourceName = baseName + "_" + suffixes[i] + ".png"; // Note: use of BufferedInputStream works around 4764639/4892246 - BufferedImage img = ImageIO.read(new BufferedInputStream(getClass().getClassLoader().getResourceAsStream(resourceName))); + BufferedInputStream bis = new BufferedInputStream(getClass().getClassLoader().getResourceAsStream(resourceName)); + BufferedImage img = ImageIO.read(bis); + bis.close(); if (img == null) { throw new RuntimeException("Error reading PNG image " + resourceName); } @@ -548,36 +645,35 @@ public class JRefract { } private void makeRGBTexture(GL gl, GLU glu, BufferedImage img, int target, boolean mipmapped) { - ByteBuffer dest = null; switch (img.getType()) { case BufferedImage.TYPE_3BYTE_BGR: case BufferedImage.TYPE_CUSTOM: { byte[] data = ((DataBufferByte) img.getRaster().getDataBuffer()).getData(); - dest = ByteBuffer.allocateDirect(data.length); - dest.order(ByteOrder.nativeOrder()); - dest.put(data, 0, data.length); + if (mipmapped) { + glu.gluBuild2DMipmaps(target, GL.GL_RGB8, img.getWidth(), img.getHeight(), GL.GL_RGB, + GL.GL_UNSIGNED_BYTE, data); + } else { + gl.glTexImage2D(target, 0, GL.GL_RGB, img.getWidth(), img.getHeight(), 0, + GL.GL_RGB, GL.GL_UNSIGNED_BYTE, data); + } break; } case BufferedImage.TYPE_INT_RGB: { int[] data = ((DataBufferInt) img.getRaster().getDataBuffer()).getData(); - dest = ByteBuffer.allocateDirect(data.length * BufferUtils.SIZEOF_INT); - dest.order(ByteOrder.nativeOrder()); - dest.asIntBuffer().put(data, 0, data.length); + if (mipmapped) { + glu.gluBuild2DMipmaps(target, GL.GL_RGB8, img.getWidth(), img.getHeight(), GL.GL_RGB, + GL.GL_UNSIGNED_BYTE, data); + } else { + gl.glTexImage2D(target, 0, GL.GL_RGB, img.getWidth(), img.getHeight(), 0, + GL.GL_RGB, GL.GL_UNSIGNED_BYTE, data); + } break; } default: throw new RuntimeException("Unsupported image type " + img.getType()); } - - if (mipmapped) { - glu.gluBuild2DMipmaps(target, GL.GL_RGB8, img.getWidth(), img.getHeight(), GL.GL_RGB, - GL.GL_UNSIGNED_BYTE, dest); - } else { - gl.glTexImage2D(target, 0, GL.GL_RGB, img.getWidth(), img.getHeight(), 0, - GL.GL_RGB, GL.GL_UNSIGNED_BYTE, dest); - } } private void initExtension(GL gl, String glExtensionName) { @@ -765,7 +861,6 @@ public class JRefract { } private void runExit() { - quit = true; // Note: calling System.exit() synchronously inside the draw, // reshape or init callbacks can lead to deadlocks on certain // platforms (in particular, X11) because the JAWT's locking @@ -773,9 +868,362 @@ public class JRefract { // the exit routine in another thread. new Thread(new Runnable() { public void run() { - animator.stop(); + quit = true; + while (!animatorStopped) { + try { + Thread.sleep(1); + } catch (InterruptedException e) { + } + } System.exit(0); } }).start(); } + + private synchronized void addJPanel(GLJPanel panel) { + ArrayList newCanvases = (ArrayList) canvases.clone(); + newCanvases.add(panel); + canvases = newCanvases; + } + + private synchronized void removeJPanel(GLJPanel panel) { + ArrayList newCanvases = (ArrayList) canvases.clone(); + newCanvases.remove(panel); + canvases = newCanvases; + } + + class ListAnimator implements Runnable { + public void run() { + while (!quit) { + if (canvases.isEmpty()) { + try { + Thread.sleep(10); + } catch (InterruptedException e) { + } + } else { + for (Iterator iter = canvases.iterator(); iter.hasNext(); ) { + GLJPanel panel = (GLJPanel) iter.next(); + panel.display(); + } + try { + Thread.sleep(1); + } catch (InterruptedException e) { + } + } + } + animatorStopped = true; + } + } + + static class GearRenderer implements GLEventListener, MouseListener, MouseMotionListener { + private float view_rotx = 20.0f, view_roty = 30.0f, view_rotz = 0.0f; + private int gear1, gear2, gear3; + private float angle = 0.0f; + + private int prevMouseX, prevMouseY; + private boolean mouseRButtonDown = false; + + + public void init(GLDrawable drawable) { + // Use debug pipeline + // drawable.setGL(new DebugGL(drawable.getGL())); + + GL gl = drawable.getGL(); + System.err.println("INIT GL IS: " + gl.getClass().getName()); + + float pos[] = { 5.0f, 5.0f, 10.0f, 0.0f }; + float red[] = { 0.8f, 0.1f, 0.0f, 1.0f }; + float green[] = { 0.0f, 0.8f, 0.2f, 1.0f }; + float blue[] = { 0.2f, 0.2f, 1.0f, 1.0f }; + + gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, pos); + gl.glEnable(GL.GL_CULL_FACE); + gl.glEnable(GL.GL_LIGHTING); + gl.glEnable(GL.GL_LIGHT0); + gl.glEnable(GL.GL_DEPTH_TEST); + + /* make the gears */ + gear1 = gl.glGenLists(1); + gl.glNewList(gear1, GL.GL_COMPILE); + gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT_AND_DIFFUSE, red); + gear(gl, 1.0f, 4.0f, 1.0f, 20, 0.7f); + gl.glEndList(); + + gear2 = gl.glGenLists(1); + gl.glNewList(gear2, GL.GL_COMPILE); + gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT_AND_DIFFUSE, green); + gear(gl, 0.5f, 2.0f, 2.0f, 10, 0.7f); + gl.glEndList(); + + gear3 = gl.glGenLists(1); + gl.glNewList(gear3, GL.GL_COMPILE); + gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT_AND_DIFFUSE, blue); + gear(gl, 1.3f, 2.0f, 0.5f, 10, 0.7f); + gl.glEndList(); + + gl.glEnable(GL.GL_NORMALIZE); + + drawable.addMouseListener(this); + drawable.addMouseMotionListener(this); + } + + public void reshape(GLDrawable drawable, int x, int y, int width, int height) { + GL gl = drawable.getGL(); + + float h = (float)height / (float)width; + + gl.glMatrixMode(GL.GL_PROJECTION); + + System.err.println("GL_VENDOR: " + gl.glGetString(GL.GL_VENDOR)); + System.err.println("GL_RENDERER: " + gl.glGetString(GL.GL_RENDERER)); + System.err.println("GL_VERSION: " + gl.glGetString(GL.GL_VERSION)); + System.err.println(); + System.err.println("glLoadTransposeMatrixfARB() supported: " + + gl.isFunctionAvailable("glLoadTransposeMatrixfARB")); + if (!gl.isFunctionAvailable("glLoadTransposeMatrixfARB")) { + // --- not using extensions + gl.glLoadIdentity(); + } else { + // --- using extensions + final float[] identityTranspose = new float[] { + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + }; + gl.glLoadTransposeMatrixfARB(identityTranspose); + } + gl.glFrustum(-1.0f, 1.0f, -h, h, 5.0f, 60.0f); + gl.glMatrixMode(GL.GL_MODELVIEW); + gl.glLoadIdentity(); + gl.glTranslatef(0.0f, 0.0f, -40.0f); + } + + public void display(GLDrawable drawable) { + angle += 2.0f; + + GL gl = drawable.getGL(); + gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + + gl.glPushMatrix(); + gl.glRotatef(view_rotx, 1.0f, 0.0f, 0.0f); + gl.glRotatef(view_roty, 0.0f, 1.0f, 0.0f); + gl.glRotatef(view_rotz, 0.0f, 0.0f, 1.0f); + + gl.glPushMatrix(); + gl.glTranslatef(-3.0f, -2.0f, 0.0f); + gl.glRotatef(angle, 0.0f, 0.0f, 1.0f); + gl.glCallList(gear1); + gl.glPopMatrix(); + + gl.glPushMatrix(); + gl.glTranslatef(3.1f, -2.0f, 0.0f); + gl.glRotatef(-2.0f * angle - 9.0f, 0.0f, 0.0f, 1.0f); + gl.glCallList(gear2); + gl.glPopMatrix(); + + gl.glPushMatrix(); + gl.glTranslatef(-3.1f, 4.2f, 0.0f); + gl.glRotatef(-2.0f * angle - 25.0f, 0.0f, 0.0f, 1.0f); + gl.glCallList(gear3); + gl.glPopMatrix(); + + gl.glPopMatrix(); + } + + public void displayChanged(GLDrawable drawable, boolean modeChanged, boolean deviceChanged) {} + + private void gear(GL gl, + float inner_radius, + float outer_radius, + float width, + int teeth, + float tooth_depth) + { + int i; + float r0, r1, r2; + float angle, da; + float u, v, len; + + r0 = inner_radius; + r1 = outer_radius - tooth_depth / 2.0f; + r2 = outer_radius + tooth_depth / 2.0f; + + da = 2.0f * (float) Math.PI / teeth / 4.0f; + + gl.glShadeModel(GL.GL_FLAT); + + gl.glNormal3f(0.0f, 0.0f, 1.0f); + + /* draw front face */ + gl.glBegin(GL.GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) + { + angle = i * 2.0f * (float) Math.PI / teeth; + gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), width * 0.5f); + if(i < teeth) + { + gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle + 3.0f * da), r1 * (float)Math.sin(angle + 3.0f * da), width * 0.5f); + } + } + gl.glEnd(); + + /* draw front sides of teeth */ + gl.glBegin(GL.GL_QUADS); + for (i = 0; i < teeth; i++) + { + angle = i * 2.0f * (float) Math.PI / teeth; + gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), width * 0.5f); + gl.glVertex3f(r2 * (float)Math.cos(angle + da), r2 * (float)Math.sin(angle + da), width * 0.5f); + gl.glVertex3f(r2 * (float)Math.cos(angle + 2.0f * da), r2 * (float)Math.sin(angle + 2.0f * da), width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle + 3.0f * da), r1 * (float)Math.sin(angle + 3.0f * da), width * 0.5f); + } + gl.glEnd(); + + /* draw back face */ + gl.glBegin(GL.GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) + { + angle = i * 2.0f * (float) Math.PI / teeth; + gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), -width * 0.5f); + gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), -width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle + 3 * da), r1 * (float)Math.sin(angle + 3 * da), -width * 0.5f); + gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), -width * 0.5f); + } + gl.glEnd(); + + /* draw back sides of teeth */ + gl.glBegin(GL.GL_QUADS); + for (i = 0; i < teeth; i++) + { + angle = i * 2.0f * (float) Math.PI / teeth; + gl.glVertex3f(r1 * (float)Math.cos(angle + 3 * da), r1 * (float)Math.sin(angle + 3 * da), -width * 0.5f); + gl.glVertex3f(r2 * (float)Math.cos(angle + 2 * da), r2 * (float)Math.sin(angle + 2 * da), -width * 0.5f); + gl.glVertex3f(r2 * (float)Math.cos(angle + da), r2 * (float)Math.sin(angle + da), -width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), -width * 0.5f); + } + gl.glEnd(); + + /* draw outward faces of teeth */ + gl.glBegin(GL.GL_QUAD_STRIP); + for (i = 0; i < teeth; i++) + { + angle = i * 2.0f * (float) Math.PI / teeth; + gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle), r1 * (float)Math.sin(angle), -width * 0.5f); + u = r2 * (float)Math.cos(angle + da) - r1 * (float)Math.cos(angle); + v = r2 * (float)Math.sin(angle + da) - r1 * (float)Math.sin(angle); + len = (float)Math.sqrt(u * u + v * v); + u /= len; + v /= len; + gl.glNormal3f(v, -u, 0.0f); + gl.glVertex3f(r2 * (float)Math.cos(angle + da), r2 * (float)Math.sin(angle + da), width * 0.5f); + gl.glVertex3f(r2 * (float)Math.cos(angle + da), r2 * (float)Math.sin(angle + da), -width * 0.5f); + gl.glNormal3f((float)Math.cos(angle), (float)Math.sin(angle), 0.0f); + gl.glVertex3f(r2 * (float)Math.cos(angle + 2 * da), r2 * (float)Math.sin(angle + 2 * da), width * 0.5f); + gl.glVertex3f(r2 * (float)Math.cos(angle + 2 * da), r2 * (float)Math.sin(angle + 2 * da), -width * 0.5f); + u = r1 * (float)Math.cos(angle + 3 * da) - r2 * (float)Math.cos(angle + 2 * da); + v = r1 * (float)Math.sin(angle + 3 * da) - r2 * (float)Math.sin(angle + 2 * da); + gl.glNormal3f(v, -u, 0.0f); + gl.glVertex3f(r1 * (float)Math.cos(angle + 3 * da), r1 * (float)Math.sin(angle + 3 * da), width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(angle + 3 * da), r1 * (float)Math.sin(angle + 3 * da), -width * 0.5f); + gl.glNormal3f((float)Math.cos(angle), (float)Math.sin(angle), 0.0f); + } + gl.glVertex3f(r1 * (float)Math.cos(0), r1 * (float)Math.sin(0), width * 0.5f); + gl.glVertex3f(r1 * (float)Math.cos(0), r1 * (float)Math.sin(0), -width * 0.5f); + gl.glEnd(); + + gl.glShadeModel(GL.GL_SMOOTH); + + /* draw inside radius cylinder */ + gl.glBegin(GL.GL_QUAD_STRIP); + for (i = 0; i <= teeth; i++) + { + angle = i * 2.0f * (float) Math.PI / teeth; + gl.glNormal3f(-(float)Math.cos(angle), -(float)Math.sin(angle), 0.0f); + gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), -width * 0.5f); + gl.glVertex3f(r0 * (float)Math.cos(angle), r0 * (float)Math.sin(angle), width * 0.5f); + } + gl.glEnd(); + } + + // Methods required for the implementation of MouseListener + public void mouseEntered(MouseEvent e) {} + public void mouseExited(MouseEvent e) {} + + public void mousePressed(MouseEvent e) { + prevMouseX = e.getX(); + prevMouseY = e.getY(); + if ((e.getModifiers() & e.BUTTON3_MASK) != 0) { + mouseRButtonDown = true; + } + } + + public void mouseReleased(MouseEvent e) { + if ((e.getModifiers() & e.BUTTON3_MASK) != 0) { + mouseRButtonDown = false; + } + } + + public void mouseClicked(MouseEvent e) {} + + // Methods required for the implementation of MouseMotionListener + public void mouseDragged(MouseEvent e) { + int x = e.getX(); + int y = e.getY(); + Dimension size = e.getComponent().getSize(); + + float thetaY = 360.0f * ( (float)(x-prevMouseX)/(float)size.width); + float thetaX = 360.0f * ( (float)(prevMouseY-y)/(float)size.height); + + prevMouseX = x; + prevMouseY = y; + + view_rotx += thetaX; + view_roty += thetaY; + } + + public void mouseMoved(MouseEvent e) {} + } + + private JInternalFrame curFrame; + private void startAutoMode() { + new Thread(new Runnable() { + public void run() { + while (true) { + try { + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + curFrame = addWindow(false); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + } + + try { + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + curFrame.doDefaultCloseAction(); + } + }); + } catch (Exception e) { + e.printStackTrace(); + } + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + } + } + } + }).start(); + } } diff --git a/src/demos/multisample/Multisample.java b/src/demos/multisample/Multisample.java index a58d219..f479b0e 100755 --- a/src/demos/multisample/Multisample.java +++ b/src/demos/multisample/Multisample.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/proceduralTexturePhysics/ProceduralTexturePhysics.java b/src/demos/proceduralTexturePhysics/ProceduralTexturePhysics.java index 9fa329d..d2a04af 100644 --- a/src/demos/proceduralTexturePhysics/ProceduralTexturePhysics.java +++ b/src/demos/proceduralTexturePhysics/ProceduralTexturePhysics.java @@ -128,6 +128,7 @@ public class ProceduralTexturePhysics { public void init(GLDrawable drawable) { GL gl = drawable.getGL(); + gl.setSwapInterval(1); try { checkExtension(gl, "GL_ARB_multitexture"); diff --git a/src/demos/tess/Tess.java b/src/demos/tess/Tess.java index 354a0c9..ccbd7a6 100644 --- a/src/demos/tess/Tess.java +++ b/src/demos/tess/Tess.java @@ -101,14 +101,10 @@ public class Tess { private int startList; public void init(GLDrawable drawable) { + drawable.setGL(new DebugGL(drawable.getGL())); + gl = drawable.getGL(); glu = drawable.getGLU(); - // init() might get called more than once if the GLCanvas is - // added and removed, but we only want to install the DebugGL - // pipeline once - if (!(drawable.getGL() instanceof DebugGL)) { - drawable.setGL(new DebugGL(drawable.getGL())); - } double[][] rect = new double[][]{{50.0, 50.0, 0.0}, {200.0, 50.0, 0.0}, diff --git a/src/demos/testContextDestruction/TestContextDestruction.java b/src/demos/testContextDestruction/TestContextDestruction.java index 2edff00..bfc0801 100755 --- a/src/demos/testContextDestruction/TestContextDestruction.java +++ b/src/demos/testContextDestruction/TestContextDestruction.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR @@ -178,12 +178,7 @@ public class TestContextDestruction { class Listener implements GLEventListener { public void init(GLDrawable drawable) { System.out.println("Listener.init()"); - // init() might get called more than once if the GLCanvas is - // added and removed, but we only want to install the DebugGL - // pipeline once - if (!(drawable.getGL() instanceof DebugGL)) { - drawable.setGL(new DebugGL(drawable.getGL())); - } + drawable.setGL(new DebugGL(drawable.getGL())); GL gl = drawable.getGL(); diff --git a/src/demos/testContextSharing/TestContextSharing.java b/src/demos/testContextSharing/TestContextSharing.java index e50c4d0..569fa50 100644 --- a/src/demos/testContextSharing/TestContextSharing.java +++ b/src/demos/testContextSharing/TestContextSharing.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR @@ -97,12 +97,7 @@ public class TestContextSharing { class Listener implements GLEventListener { public void init(GLDrawable drawable) { - // init() might get called more than once if the GLCanvas is - // added and removed, but we only want to install the DebugGL - // pipeline once - if (!(drawable.getGL() instanceof DebugGL)) { - drawable.setGL(new DebugGL(drawable.getGL())); - } + drawable.setGL(new DebugGL(drawable.getGL())); GL gl = drawable.getGL(); diff --git a/src/demos/util/Bunny.java b/src/demos/util/Bunny.java index 578dff0..fece8da 100644 --- a/src/demos/util/Bunny.java +++ b/src/demos/util/Bunny.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/util/DDSReader.java b/src/demos/util/DDSReader.java index 6355a65..ee3fc8c 100644 --- a/src/demos/util/DDSReader.java +++ b/src/demos/util/DDSReader.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/util/DurationTimer.java b/src/demos/util/DurationTimer.java index cd53fe1..c0f88e7 100644 --- a/src/demos/util/DurationTimer.java +++ b/src/demos/util/DurationTimer.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/util/DxTex.java b/src/demos/util/DxTex.java index 8e066f8..0948163 100644 --- a/src/demos/util/DxTex.java +++ b/src/demos/util/DxTex.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/util/FloatList.java b/src/demos/util/FloatList.java index 6a7f117..fe06e2e 100644 --- a/src/demos/util/FloatList.java +++ b/src/demos/util/FloatList.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/util/IntList.java b/src/demos/util/IntList.java index 9e48033..54a4745 100644 --- a/src/demos/util/IntList.java +++ b/src/demos/util/IntList.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/util/LEDataInputStream.java b/src/demos/util/LEDataInputStream.java index b391885..f2b2ba9 100644 --- a/src/demos/util/LEDataInputStream.java +++ b/src/demos/util/LEDataInputStream.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/util/MD2.java b/src/demos/util/MD2.java index d58b953..8e43c79 100644 --- a/src/demos/util/MD2.java +++ b/src/demos/util/MD2.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/util/ObjReader.java b/src/demos/util/ObjReader.java index 382a658..f8a6cec 100644 --- a/src/demos/util/ObjReader.java +++ b/src/demos/util/ObjReader.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR @@ -68,8 +68,16 @@ public class ObjReader { this(new File(filename)); } + public ObjReader(InputStream in) throws IOException { + this(new InputStreamReader(in)); + } + public ObjReader(File file) throws IOException { - BufferedReader reader = new BufferedReader(new FileReader(file)); + this (new FileReader(file)); + } + + public ObjReader(Reader r) throws IOException { + BufferedReader reader = new BufferedReader(r); String line = null; int lineNo = 0; float[] floatTmp = new float[3]; diff --git a/src/demos/util/SystemTime.java b/src/demos/util/SystemTime.java index 1812f2a..b6a154b 100644 --- a/src/demos/util/SystemTime.java +++ b/src/demos/util/SystemTime.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/util/TGAImage.java b/src/demos/util/TGAImage.java index 187fb7a..24403eb 100644 --- a/src/demos/util/TGAImage.java +++ b/src/demos/util/TGAImage.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/util/Time.java b/src/demos/util/Time.java index ade74c4..f3ede1f 100644 --- a/src/demos/util/Time.java +++ b/src/demos/util/Time.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/util/Triceratops.java b/src/demos/util/Triceratops.java index dde452b..e013f79 100644 --- a/src/demos/util/Triceratops.java +++ b/src/demos/util/Triceratops.java @@ -20,7 +20,7 @@ * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN - * MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR diff --git a/src/demos/vertexArrayRange/VertexArrayRange.java b/src/demos/vertexArrayRange/VertexArrayRange.java index 3534c64..5252f0e 100644 --- a/src/demos/vertexArrayRange/VertexArrayRange.java +++ b/src/demos/vertexArrayRange/VertexArrayRange.java @@ -219,8 +219,6 @@ public class VertexArrayRange { setFlag('i', true); // infinite viewer and light canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities()); - // canvas.setGL(new TraceGL(canvas.getGL(), System.err)); - // canvas.setGL(new DebugGL(canvas.getGL())); VARListener listener = new VARListener(); canvas.addGLEventListener(listener); @@ -280,17 +278,14 @@ public class VertexArrayRange { boolean exiting = false; public void init(GLDrawable drawable) { + // drawable.setGL(new TraceGL(drawable.getGL(), System.err)); + // drawable.setGL(new DebugGL(drawable.getGL())); + GL gl = drawable.getGL(); GLU glu = drawable.getGLU(); // Try and disable synch-to-retrace for fastest framerate - if (gl.isFunctionAvailable("wglSwapIntervalEXT")) { - System.err.println("wglSwapIntervalEXT available; disabling sync-to-refresh for best framerate"); - gl.wglSwapIntervalEXT(0); - } - else { - System.err.println("wglSwapIntervalEXT not available; cannot disable sync-to-refresh"); - } + gl.setSwapInterval(0); try { ensurePresent("glVertexArrayRangeNV"); diff --git a/src/demos/vertexBufferObject/VertexBufferObject.java b/src/demos/vertexBufferObject/VertexBufferObject.java index 78e10a9..02bae92 100644 --- a/src/demos/vertexBufferObject/VertexBufferObject.java +++ b/src/demos/vertexBufferObject/VertexBufferObject.java @@ -214,8 +214,6 @@ public class VertexBufferObject { setFlag('i', true); // infinite viewer and light canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities()); - // canvas.setGL(new TraceGL(canvas.getGL(), System.err)); - // canvas.setGL(new DebugGL(canvas.getGL())); VBOListener listener = new VBOListener(); canvas.addGLEventListener(listener); @@ -274,6 +272,9 @@ public class VertexBufferObject { boolean exiting = false; public void init(GLDrawable drawable) { + // drawable.setGL(new TraceGL(drawable.getGL(), System.err)); + // drawable.setGL(new DebugGL(drawable.getGL())); + GL gl = drawable.getGL(); GLU glu = drawable.getGLU(); diff --git a/src/demos/vertexProgRefract/VertexProgRefract.java b/src/demos/vertexProgRefract/VertexProgRefract.java index 4039fad..e9c6905 100644 --- a/src/demos/vertexProgRefract/VertexProgRefract.java +++ b/src/demos/vertexProgRefract/VertexProgRefract.java @@ -514,37 +514,35 @@ public class VertexProgRefract { } private void makeRGBTexture(GL gl, GLU glu, BufferedImage img, int target, boolean mipmapped) { - ByteBuffer dest = null; - switch (img.getType()) { case BufferedImage.TYPE_3BYTE_BGR: case BufferedImage.TYPE_CUSTOM: { byte[] data = ((DataBufferByte) img.getRaster().getDataBuffer()).getData(); - dest = ByteBuffer.allocateDirect(data.length); - dest.order(ByteOrder.nativeOrder()); - dest.put(data, 0, data.length); + if (mipmapped) { + glu.gluBuild2DMipmaps(target, GL.GL_RGB8, img.getWidth(), img.getHeight(), GL.GL_RGB, + GL.GL_UNSIGNED_BYTE, data); + } else { + gl.glTexImage2D(target, 0, GL.GL_RGB, img.getWidth(), img.getHeight(), 0, + GL.GL_RGB, GL.GL_UNSIGNED_BYTE, data); + } break; } case BufferedImage.TYPE_INT_RGB: { int[] data = ((DataBufferInt) img.getRaster().getDataBuffer()).getData(); - dest = ByteBuffer.allocateDirect(data.length * BufferUtils.SIZEOF_INT); - dest.order(ByteOrder.nativeOrder()); - dest.asIntBuffer().put(data, 0, data.length); + if (mipmapped) { + glu.gluBuild2DMipmaps(target, GL.GL_RGB8, img.getWidth(), img.getHeight(), GL.GL_RGB, + GL.GL_UNSIGNED_BYTE, data); + } else { + gl.glTexImage2D(target, 0, GL.GL_RGB, img.getWidth(), img.getHeight(), 0, + GL.GL_RGB, GL.GL_UNSIGNED_BYTE, data); + } break; } default: throw new RuntimeException("Unsupported image type " + img.getType()); } - - if (mipmapped) { - glu.gluBuild2DMipmaps(target, GL.GL_RGB8, img.getWidth(), img.getHeight(), GL.GL_RGB, - GL.GL_UNSIGNED_BYTE, dest); - } else { - gl.glTexImage2D(target, 0, GL.GL_RGB, img.getWidth(), img.getHeight(), 0, - GL.GL_RGB, GL.GL_UNSIGNED_BYTE, dest); - } } private void initExtension(GL gl, String glExtensionName) { diff --git a/www/index.html b/www/index.html index 7ef3a4f..cb1b7b1 100644 --- a/www/index.html +++ b/www/index.html @@ -17,7 +17,7 @@ <AREA SHAPE="rect" ALT="Projects" COORDS="356,7,440,23" HREF="https://games.dev.java.net" TARGET="_self"> <AREA SHAPE="rect" ALT="Wiki" COORDS="643,7,695,23" HREF="http://wiki.java.net/bin/view/Games"> <AREA SHAPE="rect" ALT="Weblogs" COORDS="562,7,624,23" HREF="http://weblogs.java.net/weblogs/project/games"> - <AREA SHAPE="rect" COORDS="463,7,541,23" HREF="http://www.javagaming.org/cgi-bin/JGNetForums/YaBB.cgi" target="_top" ALT="Forums"> + <AREA SHAPE="rect" COORDS="463,7,541,23" HREF="http://192.18.37.44/forums/index.php" target="_top" ALT="Forums"> <AREA SHAPE="rect" ALT="JavaGames Home" COORDS="147,7,334,23" HREF="http://community.java.net/games"> <AREA SHAPE="rect" ALT="Java.net" COORDS="21,7,128,23" HREF="http://www.java.net" TARGET="_self"> </MAP> @@ -71,7 +71,7 @@ C or C++, in which case a link to the original sources is provided.<br> is included in <a href="http://java.sun.com/j2se/1.4.2/">J2SE 1.4.2</a>; click the images to launch the demos. Where there are no hardware or operating system requirements listed, the demos run on any vendor's graphics card -and on any of Solaris/SPARC, Linux/x86, Windows/x86, and Macintosh OS X 10.3.<br> +and on any of Solaris/SPARC, Solaris/x86, Linux/x86, Windows/x86, and Macintosh OS X 10.3.<br> </p> @@ -335,6 +335,70 @@ documentation</a><br> + <div align="left"><font color="#ffffff"><strong>High Dynamic Range Rendering</strong></font></div> + </td> + </tr> + <tr> + <td valign="top" bgcolor="#ffffff"> + + + <table border="0" cellpadding="5" cellspacing="1" + width="100%"> + <tbody> + <tr> + <td width="25%"> <br> + </td> + <td width="45%"> <strong>Description</strong> + </td> + <td width="5%"><br> + </td> + <td width="25%"> <strong>Requirements</strong> + </td> + </tr> + <tr> + <td width="25%"> <a + href="https://jogl-demos.dev.java.net/webstart/HDR.jnlp"> + <img src="hdr_sm.jpg" width="160" height="120" + alt="Launch High Dynamic Range Rendering demo"> + </a> </td> + <td width="45%"> High Dynamic Range rendering demo utilizing 16-bit-per-channel floating-point pbuffers through NVidia, ATI or Apple extensions. Uses NVidia HILO or Apple or ATI floating point cubemaps. Intermediate results are rendered to floating-point pbuffers and tonemapped to 24-bit RGB before display. <a href="http://download.developer.nvidia.com/developer/SDK/Individual_Samples/DEMOS/OpenGL/hdr.zip">Original source code</a> supplied in NVidia's <a href="http://developer.nvidia.com/object/sdk_home.html">SDK</a>. This demo is known to work on Windows with suitable NVidia or ATI hardware, and on X11 platforms with suitable NVidia hardware (no floating-point pbuffer support is available on X11 from ATI as of this writing). The demo should run properly on Mac OS X soon pending some driver-level bug fixes. + </td> + <td width="5%"><br> + </td> + <td width="25%"> One of GL_NV_float_buffer, GL_ATI_texture_float, or GL_APPLE_float_pixels; ARB_multitexture; ARB_vertex_program; ARB_fragment_program</td> + </tr> + <tr> + </tr> + + + </tbody> + + </table> + </td> + </tr> + + </tbody> + + + </table> + </td> + </tr> + + </tbody> +</table> + +<table border="0" cellpadding="5" cellspacing="1" width="100%"> + <tbody> + <tr> + <td> + <table bgcolor="#6E94B7" border="0" cellpadding="5" + cellspacing="1" width="100%"> + <tbody> + <tr> + <td bgcolor="#6E94B7" valign="top"> + + + <div align="left"><font color="#ffffff"><strong>Infinite Shadow Volumes</strong></font></div> </td> diff --git a/www/webstart/GearsTmp.jnlp b/www/webstart/GearsTmp.jnlp index 0d0b365..0a1cb17 100644 --- a/www/webstart/GearsTmp.jnlp +++ b/www/webstart/GearsTmp.jnlp @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<jnlp spec="1.0" - codebase="https://jogl-demos.dev.java.net/webstart/" +<jnlp codebase="https://jogl-demos.dev.java.net/webstart/" href="GearsTmp.jnlp"> <information> <title>JOGL Gears Demo</title> diff --git a/www/webstart/HWShadowmapsSimple.jnlp b/www/webstart/HWShadowmapsSimple.jnlp index dc5befd..82e2db9 100644 --- a/www/webstart/HWShadowmapsSimple.jnlp +++ b/www/webstart/HWShadowmapsSimple.jnlp @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<jnlp spec="1.0" - codebase="https://jogl-demos.dev.java.net/webstart/" +<jnlp codebase="https://jogl-demos.dev.java.net/webstart/" href="HWShadowmapsSimple.jnlp"> <information> <title>JOGL Hardware Shadow Maps Demo</title> diff --git a/www/webstart/InfiniteShadowVolumes.jnlp b/www/webstart/InfiniteShadowVolumes.jnlp index 2a910b0..279e93d 100644 --- a/www/webstart/InfiniteShadowVolumes.jnlp +++ b/www/webstart/InfiniteShadowVolumes.jnlp @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<jnlp spec="1.0" - codebase="https://jogl-demos.dev.java.net/webstart/" +<jnlp codebase="https://jogl-demos.dev.java.net/webstart/" href="InfiniteShadowVolumes.jnlp"> <information> <title>JOGL Infinite Shadow Volumes Demo</title> diff --git a/www/webstart/JRefract.jnlp b/www/webstart/JRefract.jnlp index 11edcc8..4bf630c 100755 --- a/www/webstart/JRefract.jnlp +++ b/www/webstart/JRefract.jnlp @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<jnlp spec="1.0" - codebase="https://jogl-demos.dev.java.net/webstart/" +<jnlp codebase="https://jogl-demos.dev.java.net/webstart/" href="JRefract.jnlp"> <information> <title>JOGL JRefract Demo</title> diff --git a/www/webstart/JRefractSingleThreaded.jnlp b/www/webstart/JRefractSingleThreaded.jnlp index c278249..8ddda85 100755 --- a/www/webstart/JRefractSingleThreaded.jnlp +++ b/www/webstart/JRefractSingleThreaded.jnlp @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<jnlp spec="1.0" - codebase="https://jogl-demos.dev.java.net/webstart/" +<jnlp codebase="https://jogl-demos.dev.java.net/webstart/" href="JRefractSingleThreaded.jnlp"> <information> <title>JOGL JRefract Demo</title> diff --git a/www/webstart/ProceduralTexturePhysics.jnlp b/www/webstart/ProceduralTexturePhysics.jnlp index 3becd13..1dc3414 100644 --- a/www/webstart/ProceduralTexturePhysics.jnlp +++ b/www/webstart/ProceduralTexturePhysics.jnlp @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<jnlp spec="1.0" - codebase="https://jogl-demos.dev.java.net/webstart/" +<jnlp codebase="https://jogl-demos.dev.java.net/webstart/" href="ProceduralTexturePhysics.jnlp"> <information> <title>JOGL Procedural Texture Physics Demo</title> diff --git a/www/webstart/VertexArrayRange.jnlp b/www/webstart/VertexArrayRange.jnlp index f31500b..cdc9071 100644 --- a/www/webstart/VertexArrayRange.jnlp +++ b/www/webstart/VertexArrayRange.jnlp @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<jnlp spec="1.0" - codebase="https://jogl-demos.dev.java.net/webstart/" +<jnlp codebase="https://jogl-demos.dev.java.net/webstart/" href="VertexArrayRange.jnlp"> <information> <title>JOGL Vertex Array Range Demo</title> diff --git a/www/webstart/VertexBufferObject.jnlp b/www/webstart/VertexBufferObject.jnlp index a7e7244..9eeca55 100644 --- a/www/webstart/VertexBufferObject.jnlp +++ b/www/webstart/VertexBufferObject.jnlp @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<jnlp spec="1.0" - codebase="https://jogl-demos.dev.java.net/webstart/" +<jnlp codebase="https://jogl-demos.dev.java.net/webstart/" href="VertexBufferObject.jnlp"> <information> <title>JOGL Vertex Buffer Object Demo</title> diff --git a/www/webstart/VertexProgRefract.jnlp b/www/webstart/VertexProgRefract.jnlp index b569345..3318643 100644 --- a/www/webstart/VertexProgRefract.jnlp +++ b/www/webstart/VertexProgRefract.jnlp @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<jnlp spec="1.0" - codebase="https://jogl-demos.dev.java.net/webstart/" +<jnlp codebase="https://jogl-demos.dev.java.net/webstart/" href="VertexProgRefract.jnlp"> <information> <title>JOGL VertexProgRefract Demo</title> diff --git a/www/webstart/VertexProgWarp.jnlp b/www/webstart/VertexProgWarp.jnlp index 79d1a94..28f6e57 100644 --- a/www/webstart/VertexProgWarp.jnlp +++ b/www/webstart/VertexProgWarp.jnlp @@ -1,6 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> -<jnlp spec="1.0" - codebase="https://jogl-demos.dev.java.net/webstart/" +<jnlp codebase="https://jogl-demos.dev.java.net/webstart/" href="VertexProgWarp.jnlp"> <information> <title>JOGL VertexProgWarp Demo</title> diff --git a/www/webstart/jogl-demos-data.jar b/www/webstart/jogl-demos-data.jar Binary files differindex b139687..4edd570 100644 --- a/www/webstart/jogl-demos-data.jar +++ b/www/webstart/jogl-demos-data.jar diff --git a/www/webstart/jogl-demos-util.jar b/www/webstart/jogl-demos-util.jar Binary files differindex 79989a9..8b5891f 100644 --- a/www/webstart/jogl-demos-util.jar +++ b/www/webstart/jogl-demos-util.jar diff --git a/www/webstart/jogl-demos.jar b/www/webstart/jogl-demos.jar Binary files differindex 518fd11..cd5ae56 100644 --- a/www/webstart/jogl-demos.jar +++ b/www/webstart/jogl-demos.jar |