diff options
-rw-r--r-- | make/build.xml | 2 | ||||
-rwxr-xr-x | src/demos/es1/RedSquare.java | 2 | ||||
-rwxr-xr-x | src/demos/es1/angeles/Main.java | 3 | ||||
-rw-r--r-- | src/demos/es1/cube/Cube.java | 315 | ||||
-rwxr-xr-x | src/demos/es1/cubefbo/CubeObject.java | 250 | ||||
-rwxr-xr-x | src/demos/es1/cubefbo/FBCubes.java | 51 | ||||
-rwxr-xr-x | src/demos/es1/cubefbo/FBObject.java | 150 | ||||
-rwxr-xr-x | src/demos/es1/cubefbo/Main.java | 2 |
8 files changed, 354 insertions, 421 deletions
diff --git a/make/build.xml b/make/build.xml index e7a3608..ab66a1b 100644 --- a/make/build.xml +++ b/make/build.xml @@ -183,7 +183,7 @@ <src path="${src}" /> <classpath refid="jogl-demos.classpath" /> </javac--> - <javac destdir="${classes}" includes="demos/es1/**" source="1.4" target="1.4" debug="true" debuglevel="source,lines" + <javac destdir="${classes}" includes="demos/es1/**" excludes="demos/es1/cubefbo-sven/**" source="1.4" target="1.4" debug="true" debuglevel="source,lines" bootclasspath="../../gluegen/make/lib/cdc_fp.jar"> <src path="${src}" /> <classpath refid="jogl-demos.classpath" /> diff --git a/src/demos/es1/RedSquare.java b/src/demos/es1/RedSquare.java index cc93c2c..5fb8004 100755 --- a/src/demos/es1/RedSquare.java +++ b/src/demos/es1/RedSquare.java @@ -93,8 +93,8 @@ public class RedSquare implements MouseListener, GLEventListener { private FloatBuffer vertices; public void init(GLAutoDrawable drawable) { - glu = GLU.createGLU(); GL2ES1 gl = drawable.getGL().getGL2ES1(); + glu = GLU.createGLU(gl); System.err.println("Entering initialization"); System.err.println("GL_VERSION=" + gl.glGetString(GL2ES1.GL_VERSION)); System.err.println("GL_EXTENSIONS:"); diff --git a/src/demos/es1/angeles/Main.java b/src/demos/es1/angeles/Main.java index e4fbbf6..aab344e 100755 --- a/src/demos/es1/angeles/Main.java +++ b/src/demos/es1/angeles/Main.java @@ -10,6 +10,7 @@ public class Main implements MouseListener { public GLWindow window = null; public void mouseClicked(MouseEvent e) { + //System.out.println(e); switch(e.getClickCount()) { case 1: if(null!=window) { @@ -54,7 +55,7 @@ public class Main implements MouseListener { caps.setGreenBits(6); caps.setBlueBits(5); caps.setDepthBits(16); - GLWindow window = GLWindow.create(nWindow, caps); + window = GLWindow.create(nWindow, caps); window.addMouseListener(this); diff --git a/src/demos/es1/cube/Cube.java b/src/demos/es1/cube/Cube.java new file mode 100644 index 0000000..ca17466 --- /dev/null +++ b/src/demos/es1/cube/Cube.java @@ -0,0 +1,315 @@ +/* + * + * Copyright (c) 2007, Sun Microsystems, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Sun Microsystems nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package demos.es1.cube; + +import javax.media.opengl.*; +import javax.media.opengl.util.*; +import javax.media.opengl.glu.*; +import java.nio.*; + +import com.sun.javafx.newt.*; + +public class Cube implements GLEventListener { + public Cube () { + this(false, false); + } + + public Cube (boolean useTexCoords, boolean innerCube) { + this.innerCube = innerCube; + + // Initialize data Buffers + this.cubeVertices = BufferUtil.newShortBuffer(s_cubeVertices.length); + cubeVertices.put(s_cubeVertices); + cubeVertices.rewind(); + + this.cubeColors = BufferUtil.newByteBuffer(s_cubeColors.length); + cubeColors.put(s_cubeColors); + cubeColors.rewind(); + + this.cubeNormals = BufferUtil.newByteBuffer(s_cubeNormals.length); + cubeNormals.put(s_cubeNormals); + cubeNormals.rewind(); + + this.cubeIndices = BufferUtil.newByteBuffer(s_cubeIndices.length); + cubeIndices.put(s_cubeIndices); + cubeIndices.rewind(); + + if (useTexCoords) { + this.cubeTexCoords = BufferUtil.newShortBuffer(s_cubeTexCoords.length); + cubeTexCoords.put(s_cubeTexCoords); + cubeTexCoords.rewind(); + } + } + + public void init(GLAutoDrawable drawable) { + GL2ES1 gl = drawable.getGL().getGL2ES1(); + glu = GLU.createGLU(gl); + + } + + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { + float aspect = (height != 0) ? ((float)width / (float)height) : 1.0f; + + GL2ES1 gl = drawable.getGL().getGL2ES1(); + + gl.glViewport(0, 0, width, height); + + gl.glMatrixMode(gl.GL_MODELVIEW); + gl.glLoadIdentity(); + + gl.glScissor(0, 0, width, height); + if(innerCube) { + // Clear background to white + gl.glClearColor(1.0f, 1.0f, 1.0f, 0.6f); + } else { + // Clear background to blue + gl.glClearColor(0.0f, 0.0f, 1.0f, 1.0f); + } + + gl.glLightfv(gl.GL_LIGHT0, gl.GL_POSITION, light_position, 0); + gl.glLightfv(gl.GL_LIGHT0, gl.GL_AMBIENT, light_ambient, 0); + gl.glLightfv(gl.GL_LIGHT0, gl.GL_DIFFUSE, light_diffuse, 0); + gl.glLightfv(gl.GL_LIGHT0, gl.GL_SPECULAR, zero_vec4, 0); + gl.glMaterialfv(gl.GL_FRONT_AND_BACK, gl.GL_SPECULAR, material_spec, 0); + + gl.glEnable(gl.GL_NORMALIZE); + gl.glEnable(gl.GL_LIGHTING); + gl.glEnable(gl.GL_LIGHT0); + gl.glEnable(gl.GL_COLOR_MATERIAL); + gl.glEnable(gl.GL_CULL_FACE); + + gl.glShadeModel(gl.GL_SMOOTH); + gl.glDisable(gl.GL_DITHER); + + gl.glEnableClientState(gl.GL_VERTEX_ARRAY); + gl.glEnableClientState(gl.GL_NORMAL_ARRAY); + gl.glEnableClientState(gl.GL_COLOR_ARRAY); + if (cubeTexCoords != null) { + gl.glEnableClientState(gl.GL_TEXTURE_COORD_ARRAY); + } else { + gl.glDisableClientState(gl.GL_TEXTURE_COORD_ARRAY); + } + + gl.glHint(gl.GL_PERSPECTIVE_CORRECTION_HINT, gl.GL_FASTEST); + + gl.glMatrixMode(gl.GL_PROJECTION); + gl.glLoadIdentity(); + + if(!innerCube) { + glu.gluPerspective(90.0f, aspect, 1.0f, 100.0f); + } else { + gl.glOrthof(-20.0f, 20.0f, -20.0f, 20.0f, 1.0f, 40.0f); + } + // weird effect ..: gl.glCullFace(gl.GL_FRONT); + } + + public void display(GLAutoDrawable drawable) { + GL2ES1 gl = drawable.getGL().getGL2ES1(); + + gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT); + + // Draw a green square using MIDP + //g.setColor(0, 255, 0); + //g.fillRect(20, 20, width - 40, height - 40); + + gl.glMatrixMode(gl.GL_MODELVIEW); + gl.glLoadIdentity(); + + gl.glTranslatef(0.f, 0.f, -30.f); + gl.glRotatef((float)(time * 29.77f), 1.0f, 2.0f, 0.0f); + gl.glRotatef((float)(time * 22.311f), -0.1f, 0.0f, -5.0f); + + gl.glVertexPointer(3, gl.GL_SHORT, 0, cubeVertices); + gl.glColorPointer(4, gl.GL_UNSIGNED_BYTE, 0, cubeColors); + gl.glNormalPointer(gl.GL_BYTE, 0, cubeNormals); + if (cubeTexCoords != null) { + gl.glTexCoordPointer(2, gl.GL_SHORT, 0, cubeTexCoords); + gl.glTexEnvi(gl.GL_TEXTURE_ENV, gl.GL_TEXTURE_ENV_MODE, gl.GL_INCR); + } + + + gl.glDrawElements(gl.GL_TRIANGLES, 6 * 6, gl.GL_UNSIGNED_BYTE, cubeIndices); + // gl.glFinish(); + + time += 0.01f; + } + + public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) { + } + + static final float[] light_position = { -50.f, 50.f, 50.f, 0.f }; + static final float[] light_ambient = { 0.125f, 0.125f, 0.125f, 1.f }; + static final float[] light_diffuse = { 1.0f, 1.0f, 1.0f, 1.f }; + static final float[] material_spec = { 1.0f, 1.0f, 1.0f, 0.f }; + static final float[] zero_vec4 = { 0.0f, 0.0f, 0.0f, 0.f }; + + boolean innerCube; + boolean initialized = false; + float time = 0.0f; + ShortBuffer cubeVertices; + ShortBuffer cubeTexCoords; + ByteBuffer cubeColors; + ByteBuffer cubeNormals; + ByteBuffer cubeIndices; + private GLU glu; + + private static final short[] s_cubeVertices = + { + -10, 10, 10, 10, -10, 10, 10, 10, 10, -10, -10, 10, + + -10, 10, -10, 10, -10, -10, 10, 10, -10, -10, -10, -10, + + -10, -10, 10, 10, -10, -10, 10, -10, 10, -10, -10, -10, + + -10, 10, 10, 10, 10, -10, 10, 10, 10, -10, 10, -10, + + 10, -10, 10, 10, 10, -10, 10, 10, 10, 10, -10, -10, + + -10, -10, 10, -10, 10, -10, -10, 10, 10, -10, -10, -10 + }; + private static final short[] s_cubeTexCoords = + { + 0, (short) 0xffff, (short) 0xffff, 0, (short) 0xffff, (short) 0xffff, 0, 0, + + 0, (short) 0xffff, (short) 0xffff, 0, (short) 0xffff, (short) 0xffff, 0, 0, + + 0, (short) 0xffff, (short) 0xffff, 0, (short) 0xffff, (short) 0xffff, 0, 0, + + 0, (short) 0xffff, (short) 0xffff, 0, (short) 0xffff, (short) 0xffff, 0, 0, + + 0, (short) 0xffff, (short) 0xffff, 0, (short) 0xffff, (short) 0xffff, 0, 0, + + 0, (short) 0xffff, (short) 0xffff, 0, (short) 0xffff, (short) 0xffff, 0, 0, + }; + + private static final byte[] s_cubeColors = + { + (byte)40, (byte)80, (byte)160, (byte)255, (byte)40, (byte)80, (byte)160, (byte)255, + (byte)40, (byte)80, (byte)160, (byte)255, (byte)40, (byte)80, (byte)160, (byte)255, + + (byte)40, (byte)80, (byte)160, (byte)255, (byte)40, (byte)80, (byte)160, (byte)255, + (byte)40, (byte)80, (byte)160, (byte)255, (byte)40, (byte)80, (byte)160, (byte)255, + + (byte)128, (byte)128, (byte)128, (byte)255, (byte)128, (byte)128, (byte)128, (byte)255, + (byte)128, (byte)128, (byte)128, (byte)255, (byte)128, (byte)128, (byte)128, (byte)255, + + (byte)128, (byte)128, (byte)128, (byte)255, (byte)128, (byte)128, (byte)128, (byte)255, + (byte)128, (byte)128, (byte)128, (byte)255, (byte)128, (byte)128, (byte)128, (byte)255, + + (byte)255, (byte)110, (byte)10, (byte)255, (byte)255, (byte)110, (byte)10, (byte)255, + (byte)255, (byte)110, (byte)10, (byte)255, (byte)255, (byte)110, (byte)10, (byte)255, + + (byte)255, (byte)70, (byte)60, (byte)255, (byte)255, (byte)70, (byte)60, (byte)255, + (byte)255, (byte)70, (byte)60, (byte)255, (byte)255, (byte)70, (byte)60, (byte)255 + }; + private static final byte[] s_cubeIndices = + { + 0, 3, 1, 2, 0, 1, /* front */ + 6, 5, 4, 5, 7, 4, /* back */ + 8, 11, 9, 10, 8, 9, /* top */ + 15, 12, 13, 12, 14, 13, /* bottom */ + 16, 19, 17, 18, 16, 17, /* right */ + 23, 20, 21, 20, 22, 21 /* left */ + }; + private static final byte[] s_cubeNormals = + { + 0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, + + 0, 0, -128, 0, 0, -128, 0, 0, -128, 0, 0, -128, + + 0, -128, 0, 0, -128, 0, 0, -128, 0, 0, -128, 0, + + 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0, + + 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, + + -128, 0, 0, -128, 0, 0, -128, 0, 0, -128, 0, 0 + }; + + private void run(int type) { + int width = 800; + int height = 480; + System.err.println("Cube.run()"); + GLProfile.setProfileGL2ES1(); + try { + Window nWindow = null; + if(0!=(type&USE_AWT)) { + Display nDisplay = NewtFactory.createDisplay(NewtFactory.AWT, null); // local display + Screen nScreen = NewtFactory.createScreen(NewtFactory.AWT, nDisplay, 0); // screen 0 + nWindow = NewtFactory.createWindow(NewtFactory.AWT, nScreen, 0); // dummy VisualID + } + + GLCapabilities caps = new GLCapabilities(); + // For emulation library, use 16 bpp + caps.setRedBits(5); + caps.setGreenBits(6); + caps.setBlueBits(5); + caps.setDepthBits(16); + GLWindow window = GLWindow.create(nWindow, caps); + + window.addGLEventListener(this); + + // Size OpenGL to Video Surface + window.setSize(width, height); + window.setFullscreen(true); + window.setVisible(true); + + long curTime; + long startTime = System.currentTimeMillis(); + while (((curTime = System.currentTimeMillis()) - startTime) < 20000) { + window.display(); + } + + // Shut things down cooperatively + window.close(); + window.getFactory().shutdown(); + System.out.println("Cube shut down cleanly."); + } catch (Throwable t) { + t.printStackTrace(); + } + } + + public static int USE_NEWT = 0; + public static int USE_AWT = 1 << 0; + + public static void main(String[] args) { + int type = USE_NEWT ; + for(int i=args.length-1; i>=0; i--) { + if(args[i].equals("-awt")) { + type |= USE_AWT; + } + } + new Cube().run(type); + System.exit(0); + } +} + diff --git a/src/demos/es1/cubefbo/CubeObject.java b/src/demos/es1/cubefbo/CubeObject.java deleted file mode 100755 index 85efd8d..0000000 --- a/src/demos/es1/cubefbo/CubeObject.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright (c) 2008 Sun Microsystems, Inc. All Rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * - Redistribution of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistribution in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of Sun Microsystems, Inc. or the names of - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * This software is provided "AS IS," without a warranty of any kind. ALL - * 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 - * 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 - * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE - * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, - * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF - * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - * - */ - -package demos.es1.cubefbo; - -import javax.media.opengl.*; -import javax.media.opengl.util.*; -import java.nio.*; - -class CubeObject { - public CubeObject (boolean useTexCoords) { - // Initialize data Buffers - this.cubeVertices = BufferUtil.newShortBuffer(s_cubeVertices.length); - cubeVertices.put(s_cubeVertices); - cubeVertices.rewind(); - - this.cubeColors = BufferUtil.newByteBuffer(s_cubeColors.length); - cubeColors.put(s_cubeColors); - cubeColors.rewind(); - - this.cubeNormals = BufferUtil.newByteBuffer(s_cubeNormals.length); - cubeNormals.put(s_cubeNormals); - cubeNormals.rewind(); - - this.cubeIndices = BufferUtil.newByteBuffer(s_cubeIndices.length); - cubeIndices.put(s_cubeIndices); - cubeIndices.rewind(); - - if (useTexCoords) { - this.cubeTexCoords = BufferUtil.newShortBuffer(s_cubeTexCoords.length); - cubeTexCoords.put(s_cubeTexCoords); - cubeTexCoords.rewind(); - } - } - - private void perspective(GL2ES1 gl, float fovy, float aspect, float zNear, float zFar) { - float xmin; - float xmax; - float ymin; - float ymax; - - ymax = zNear * (float)Math.tan((fovy * Math.PI) / 360.0); - ymin = -ymax; - xmin = ymin * aspect; - xmax = ymax * aspect; - - gl.glFrustumf(xmin, xmax, ymin, ymax, zNear, zFar); - } - - static final float[] light_position = { -50.f, 50.f, 50.f, 0.f }; - static final float[] light_ambient = { 0.125f, 0.125f, 0.125f, 1.f }; - static final float[] light_diffuse = { 1.0f, 1.0f, 1.0f, 1.f }; - static final float[] material_spec = { 1.0f, 1.0f, 1.0f, 0.f }; - static final float[] zero_vec4 = { 0.0f, 0.0f, 0.0f, 0.f }; - - public void reshape(GL2ES1 gl, int x, int y, int width, int height) { - float aspect = (height != 0) ? ((float)width / (float)height) : 1.0f; - - gl.glViewport(0, 0, width, height); - gl.glScissor(0, 0, width, height); - - gl.glMatrixMode(gl.GL_MODELVIEW); - gl.glLoadIdentity(); - - gl.glLightfv(gl.GL_LIGHT0, gl.GL_POSITION, light_position, 0); - gl.glLightfv(gl.GL_LIGHT0, gl.GL_AMBIENT, light_ambient, 0); - gl.glLightfv(gl.GL_LIGHT0, gl.GL_DIFFUSE, light_diffuse, 0); - gl.glLightfv(gl.GL_LIGHT0, gl.GL_SPECULAR, zero_vec4, 0); - gl.glMaterialfv(gl.GL_FRONT_AND_BACK, gl.GL_SPECULAR, material_spec, 0); - - gl.glEnable(gl.GL_NORMALIZE); - gl.glEnable(gl.GL_LIGHTING); - gl.glEnable(gl.GL_LIGHT0); - gl.glEnable(gl.GL_COLOR_MATERIAL); - gl.glEnable(gl.GL_CULL_FACE); - - gl.glHint(gl.GL_PERSPECTIVE_CORRECTION_HINT, gl.GL_FASTEST); - - gl.glShadeModel(gl.GL_SMOOTH); - gl.glDisable(gl.GL_DITHER); - - gl.glClearColor(0.0f, 0.1f, 0.0f, 1.0f); - - gl.glEnableClientState(gl.GL_VERTEX_ARRAY); - gl.glEnableClientState(gl.GL_NORMAL_ARRAY); - gl.glEnableClientState(gl.GL_COLOR_ARRAY); - if (cubeTexCoords != null) { - gl.glEnableClientState(gl.GL_TEXTURE_COORD_ARRAY); - } else { - gl.glDisableClientState(gl.GL_TEXTURE_COORD_ARRAY); - } - - gl.glMatrixMode(gl.GL_PROJECTION); - gl.glLoadIdentity(); - - float fovy = 55.f; - if (aspect < 1) { - // Compute this as fovx instead - float fovx = fovy; - fovy = (float) Math.toDegrees(Math.atan(Math.tan(Math.toRadians(fovx)) / aspect)); - } - - perspective(gl, fovy, aspect, 0.1f, 100.f); - gl.glCullFace(gl.GL_BACK); - } - - public void display(GL2ES1 gl, float xRot, float yRot) { - // System.out.println("CubeObject .. p1: "+this); - gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT); - - gl.glMatrixMode(gl.GL_MODELVIEW); - gl.glLoadIdentity(); - - gl.glTranslatef(0.f, 0.f, -30.f); - // gl.glTranslatef(0.f, 0.f, -30.f); - // gl.glRotatef((float)(time * 29.77f), 1.0f, 2.0f, 0.0f); - // gl.glRotatef((float)(time * 22.311f), -0.1f, 0.0f, -5.0f); - gl.glRotatef(yRot, 0, 1, 0); - gl.glRotatef(xRot, 1, 0, 0); - - gl.glVertexPointer(3, gl.GL_SHORT, 0, cubeVertices); - gl.glColorPointer(4, gl.GL_UNSIGNED_BYTE, 0, cubeColors); - gl.glNormalPointer(gl.GL_BYTE, 0, cubeNormals); - if (cubeTexCoords != null) { - gl.glTexCoordPointer(2, gl.GL_SHORT, 0, cubeTexCoords); - gl.glTexEnvi(gl.GL_TEXTURE_ENV, gl.GL_TEXTURE_ENV_MODE, gl.GL_REPLACE); - } - - // System.out.println("CubeObject .. p8: "+this); - gl.glDrawElements(gl.GL_TRIANGLES, 6 * 6, gl.GL_UNSIGNED_BYTE, cubeIndices); - // System.out.println("CubeObject .. p9: "+this); - - // time += 0.01f; - } - - boolean initialized = false; - // float time = 0.0f; - - ShortBuffer cubeVertices; - ShortBuffer cubeTexCoords; - ByteBuffer cubeColors; - ByteBuffer cubeNormals; - ByteBuffer cubeIndices; - - private static final short[] s_cubeVertices = - { - -10, 10, 10, 10, -10, 10, 10, 10, 10, -10, -10, 10, - - -10, 10, -10, 10, -10, -10, 10, 10, -10, -10, -10, -10, - - -10, -10, 10, 10, -10, -10, 10, -10, 10, -10, -10, -10, - - -10, 10, 10, 10, 10, -10, 10, 10, 10, -10, 10, -10, - - 10, -10, 10, 10, 10, -10, 10, 10, 10, 10, -10, -10, - - -10, -10, 10, -10, 10, -10, -10, 10, 10, -10, -10, -10 - }; - - private static final short[] s_cubeTexCoords = - { - 0, (short) 0xffff, (short) 0xffff, 0, (short) 0xffff, (short) 0xffff, 0, 0, - - 0, (short) 0xffff, (short) 0xffff, 0, (short) 0xffff, (short) 0xffff, 0, 0, - - 0, (short) 0xffff, (short) 0xffff, 0, (short) 0xffff, (short) 0xffff, 0, 0, - - 0, (short) 0xffff, (short) 0xffff, 0, (short) 0xffff, (short) 0xffff, 0, 0, - - 0, (short) 0xffff, (short) 0xffff, 0, (short) 0xffff, (short) 0xffff, 0, 0, - - 0, (short) 0xffff, (short) 0xffff, 0, (short) 0xffff, (short) 0xffff, 0, 0, - }; - - private static final byte[] s_cubeColors = - { - (byte) 0, (byte) 128, (byte) 0, (byte) 255, (byte) 0, (byte) 128, (byte) 0, (byte) 255, - (byte) 0, (byte) 128, (byte) 0, (byte) 255, (byte) 0, (byte) 128, (byte) 0, (byte) 255, - - (byte) 0, (byte) 128, (byte) 0, (byte) 255, (byte) 0, (byte) 128, (byte) 0, (byte) 255, - (byte) 0, (byte) 128, (byte) 0, (byte) 255, (byte) 0, (byte) 128, (byte) 0, (byte) 255, - - (byte) 0, (byte) 128, (byte) 0, (byte) 255, (byte) 0, (byte) 128, (byte) 0, (byte) 255, - (byte) 0, (byte) 128, (byte) 0, (byte) 255, (byte) 0, (byte) 128, (byte) 0, (byte) 255, - - (byte) 0, (byte) 128, (byte) 0, (byte) 255, (byte) 0, (byte) 128, (byte) 0, (byte) 255, - (byte) 0, (byte) 128, (byte) 0, (byte) 255, (byte) 0, (byte) 128, (byte) 0, (byte) 255, - - (byte) 0, (byte) 128, (byte) 0, (byte) 255, (byte) 0, (byte) 128, (byte) 0, (byte) 255, - (byte) 0, (byte) 128, (byte) 0, (byte) 255, (byte) 0, (byte) 128, (byte) 0, (byte) 255, - - (byte) 0, (byte) 128, (byte) 0, (byte) 255, (byte) 0, (byte) 128, (byte) 0, (byte) 255, - (byte) 0, (byte) 128, (byte) 0, (byte) 255, (byte) 0, (byte) 128, (byte) 0, (byte) 255 - }; - - private static final byte[] s_cubeIndices = - { - 0, 3, 1, 2, 0, 1, /* front */ - 6, 5, 4, 5, 7, 4, /* back */ - 8, 11, 9, 10, 8, 9, /* top */ - 15, 12, 13, 12, 14, 13, /* bottom */ - 16, 19, 17, 18, 16, 17, /* right */ - 23, 20, 21, 20, 22, 21 /* left */ - }; - private static final byte[] s_cubeNormals = - { - 0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, - - 0, 0, -128, 0, 0, -128, 0, 0, -128, 0, 0, -128, - - 0, -128, 0, 0, -128, 0, 0, -128, 0, 0, -128, 0, - - 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0, - - 127, 0, 0, 127, 0, 0, 127, 0, 0, 127, 0, 0, - - -128, 0, 0, -128, 0, 0, -128, 0, 0, -128, 0, 0 - }; -} - diff --git a/src/demos/es1/cubefbo/FBCubes.java b/src/demos/es1/cubefbo/FBCubes.java index 7bb26b1..1f0215f 100755 --- a/src/demos/es1/cubefbo/FBCubes.java +++ b/src/demos/es1/cubefbo/FBCubes.java @@ -33,32 +33,36 @@ package demos.es1.cubefbo; +import demos.es1.cube.Cube; import javax.media.opengl.*; +import javax.media.opengl.util.FBObject; import java.nio.*; class FBCubes implements GLEventListener { - private static final int FBO_SIZE = 128; + private static final int FBO_SIZE = 256; public FBCubes () { - cubeInner = new CubeObject(false); - cubeMiddle = new CubeObject(true); - cubeOuter = new CubeObject(true); + cubeOuter = new Cube(true, false); - // cubeOuter = new CubeObject(false); + fbo1 = new FBObject(FBO_SIZE, FBO_SIZE, FBObject.ATTR_DEPTH); + cubeInner = new Cube(false, true); - fbo1 = new FBObject(FBO_SIZE, FBO_SIZE); - fbo2 = new FBObject(FBO_SIZE, FBO_SIZE); + // JAU cubeMiddle = new Cube(true, false); + // JAU fbo2 = new FBObject(FBO_SIZE, FBO_SIZE); } public void init(GLAutoDrawable drawable) { GL2ES1 gl = drawable.getGL().getGL2ES1(); + fbo1.init(gl); - fbo2.init(gl); + cubeInner.init(drawable); + + cubeOuter.init(drawable); } public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { GL2ES1 gl = drawable.getGL().getGL2ES1(); - cubeOuter.reshape(gl, x, y, width, height); + cubeOuter.reshape(drawable, x, y, width, height); } float xRot=0f; @@ -73,13 +77,25 @@ class FBCubes implements GLEventListener { GL2ES1 gl = drawable.getGL().getGL2ES1(); fbo1.bind(gl); - cubeInner.reshape(gl, 0, 0, FBO_SIZE, FBO_SIZE); - cubeInner.display(gl, xRot, yRot); + cubeInner.reshape(drawable, 0, 0, FBO_SIZE, FBO_SIZE); + cubeInner.display(drawable); + gl.glFinish(); fbo1.unbind(gl); - FBObject tex = fbo1; - FBObject rend = fbo2; + gl.glActiveTexture(GL.GL_TEXTURE0); + gl.glEnable (gl.GL_TEXTURE_2D); + cubeOuter.reshape(drawable, 0, 0, drawable.getWidth(), drawable.getHeight()); + fbo1.use(gl); + cubeOuter.display(drawable); + fbo1.unbind(gl); + + gl.glDisable (gl.GL_TEXTURE_2D); + + // JAUFBObject tex = fbo1; + // JAU FBObject rend = fbo2; + + /* JAU int MAX_ITER = 1; for (int i = 0; i < MAX_ITER; i++) { @@ -106,16 +122,17 @@ class FBCubes implements GLEventListener { // System.out.println("display .. p7"); gl.glBindTexture(gl.GL_TEXTURE_2D, 0); gl.glDisable (gl.GL_TEXTURE_2D); + */ } public void displayChanged(javax.media.opengl.GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) { } float time = 0.0f; - CubeObject cubeInner; - CubeObject cubeMiddle; - CubeObject cubeOuter; + Cube cubeInner=null; + // JAU Cube cubeMiddle=null; + Cube cubeOuter=null; FBObject fbo1; - FBObject fbo2; + // JAU FBObject fbo2; } diff --git a/src/demos/es1/cubefbo/FBObject.java b/src/demos/es1/cubefbo/FBObject.java deleted file mode 100755 index fcfeef1..0000000 --- a/src/demos/es1/cubefbo/FBObject.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (c) 2008 Sun Microsystems, Inc. All Rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * - Redistribution of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * - Redistribution in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * Neither the name of Sun Microsystems, Inc. or the names of - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * This software is provided "AS IS," without a warranty of any kind. ALL - * 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 - * 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 - * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE - * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, - * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF - * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - * - */ - -package demos.es1.cubefbo; - -import javax.media.opengl.*; -import java.nio.*; - -class FBObject { - private int fb, fbo_tex, depth_rb, stencil_rb, width, height; - - public FBObject(int width, int height) { - this.width = width; - this.height = height; - } - - public void init(GL gl) { - // generate fbo .. - int name[] = new int[1]; - - gl.glGenTextures(1, name, 0); - fbo_tex = name[0]; - System.out.println("fbo_tex: "+fbo_tex); - - gl.glBindTexture(GL.GL_TEXTURE_2D, fbo_tex); - gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST); - gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST); - gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGB8, width, height, 0, - GL.GL_RGB, GL.GL_UNSIGNED_BYTE, null); - - gl.glGenRenderbuffers(1, name, 0); - depth_rb = name[0]; - System.out.println("depth_rb: "+depth_rb); - - // Initialize the depth buffer: - gl.glBindRenderbuffer(GL.GL_RENDERBUFFER, depth_rb); - gl.glRenderbufferStorage(GL.GL_RENDERBUFFER, - GL.GL_DEPTH_COMPONENT16, width, height); - - // gl.glGenRenderbuffers(1, name, 0); - // stencil_rb = name[0]; - stencil_rb = 0; - System.out.println("stencil_rb: "+stencil_rb); - - gl.glGenFramebuffers(1, name, 0); - fb = name[0]; - System.out.println("fb: "+fb); - - // bind fbo .. - gl.glBindFramebuffer(GL.GL_FRAMEBUFFER, fb); - - // Set up the color buffer for use as a renderable texture: - gl.glFramebufferTexture2D(GL.GL_FRAMEBUFFER, - GL.GL_COLOR_ATTACHMENT0, - GL.GL_TEXTURE_2D, fbo_tex, 0); - - // Set up the depth buffer attachment: - gl.glFramebufferRenderbuffer(GL.GL_FRAMEBUFFER, - GL.GL_DEPTH_ATTACHMENT, - GL.GL_RENDERBUFFER, depth_rb); - - // bind fbo .. - gl.glBindFramebuffer(GL.GL_FRAMEBUFFER, fb); - - // Setup the color buffer for use as a renderable texture: - gl.glBindTexture(GL.GL_TEXTURE_2D, fbo_tex); - - gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGB8, width, height, 0, - GL.GL_RGB, GL.GL_UNSIGNED_BYTE, null); - - gl.glFramebufferTexture2D(GL.GL_FRAMEBUFFER, - GL.GL_COLOR_ATTACHMENT0, - GL.GL_TEXTURE_2D, fbo_tex, 0); - - // Initialize the depth buffer: - gl.glBindRenderbuffer(GL.GL_RENDERBUFFER, depth_rb); - - gl.glRenderbufferStorage(GL.GL_RENDERBUFFER, - GL.GL_DEPTH_COMPONENT16, width, height); - - gl.glFramebufferRenderbuffer(GL.GL_FRAMEBUFFER, - GL.GL_DEPTH_ATTACHMENT, - GL.GL_RENDERBUFFER, depth_rb); - - if(stencil_rb!=0) { - // Initialize the stencil buffer: - gl.glBindRenderbuffer(GL.GL_RENDERBUFFER, stencil_rb); - - gl.glRenderbufferStorage(GL.GL_RENDERBUFFER, - GL.GL_STENCIL_INDEX8, width, height); - - gl.glFramebufferRenderbuffer(GL.GL_FRAMEBUFFER, - GL.GL_STENCIL_ATTACHMENT, - GL.GL_RENDERBUFFER, stencil_rb); - } - - // Check the FBO for completeness - int res = gl.glCheckFramebufferStatus(fb); - if (res == GL.GL_FRAMEBUFFER_COMPLETE) { - System.out.println("Framebuffer " + fb + " is complete"); - } else { - System.out.println("Framebuffer " + fb + " is incomplete: status = 0x" + Integer.toHexString(res)); - } - } - - public void bind(GL gl) { - gl.glBindFramebuffer(GL.GL_FRAMEBUFFER, fb); - } - - public void unbind(GL gl) { - gl.glBindFramebuffer(GL.GL_FRAMEBUFFER, 0); - } - - public int getFBName() { - return fb; - } - public int getTextureName() { - return fbo_tex; - } -} diff --git a/src/demos/es1/cubefbo/Main.java b/src/demos/es1/cubefbo/Main.java index 2e734c4..1d355eb 100755 --- a/src/demos/es1/cubefbo/Main.java +++ b/src/demos/es1/cubefbo/Main.java @@ -54,7 +54,7 @@ public class Main implements MouseListener { caps.setGreenBits(6); caps.setBlueBits(5); caps.setDepthBits(16); - GLWindow window = GLWindow.create(nWindow, caps); + window = GLWindow.create(nWindow, caps); window.addMouseListener(this); |