From 7a8ff3f043c5140e0f40a4df72fc27085b8e8b71 Mon Sep 17 00:00:00 2001 From: phil Date: Fri, 4 Nov 2016 23:04:11 +1300 Subject: Added a lot more GL2ES2 examples And converted to struct based lights and material in shaders --- .../jdesktop/j3d/examples/gl2es2pipeline/Cube.java | 311 +++++++++++++++ .../gl2es2pipeline/EnvironmentMappingGLSL.java | 60 +-- .../j3d/examples/gl2es2pipeline/ObjLoadGLSL.java | 58 +-- .../examples/gl2es2pipeline/PhongShadingGLSL.java | 67 ++-- .../examples/gl2es2pipeline/SamplerTestGLSL.java | 54 +-- .../examples/gl2es2pipeline/ShaderTestGLSL.java | 82 ++-- .../gl2es2pipeline/SimpleShaderAppearance.java | 415 ++++++++++++++++----- .../j3d/examples/gl2es2pipeline/SphereGLSL.java | 95 +---- .../gl2es2pipeline/VertexAttrTestGLSL.java | 62 ++- .../j3d/examples/gl2es2pipeline/dimple.vert | 3 +- .../gl2es2pipeline/fixed_function_shader.frag | 30 +- .../gl2es2pipeline/fixed_function_shader.vert | 67 ++-- .../j3d/examples/gl2es2pipeline/gouraud.vert | 55 ++- .../j3d/examples/gl2es2pipeline/phong.frag | 50 ++- .../j3d/examples/gl2es2pipeline/phong.vert | 14 +- .../j3d/examples/gl2es2pipeline/simple.vert | 50 ++- 16 files changed, 960 insertions(+), 513 deletions(-) create mode 100644 src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/Cube.java (limited to 'src/classes/org/jdesktop/j3d/examples/gl2es2pipeline') diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/Cube.java b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/Cube.java new file mode 100644 index 0000000..86f02ea --- /dev/null +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/Cube.java @@ -0,0 +1,311 @@ +/* + * Copyright (c) 2016 JogAmp Community. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ +package org.jdesktop.j3d.examples.gl2es2pipeline; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; + +import org.jogamp.java3d.GeometryArray; +import org.jogamp.java3d.J3DBuffer; +import org.jogamp.java3d.Shape3D; +import org.jogamp.java3d.TriangleArray; + +/** + * @author Administrator + * + */ +public class Cube extends Shape3D +{ + + private static final float[] verts = { + // front face + 1.0f, -1.0f, 1.0f, //1 + 1.0f, 1.0f, 1.0f, //2 + -1.0f, 1.0f, 1.0f, //3 + 1.0f, -1.0f, 1.0f, //1 + -1.0f, 1.0f, 1.0f, //3 + -1.0f, -1.0f, 1.0f, //4 + // back face + -1.0f, -1.0f, -1.0f, //1 + -1.0f, 1.0f, -1.0f, //2 + 1.0f, 1.0f, -1.0f, //3 + -1.0f, -1.0f, -1.0f, //1 + 1.0f, 1.0f, -1.0f, //3 + 1.0f, -1.0f, -1.0f, //4 + // right face + 1.0f, -1.0f, -1.0f, //1 + 1.0f, 1.0f, -1.0f, //2 + 1.0f, 1.0f, 1.0f, //3 + 1.0f, -1.0f, -1.0f, //1 + 1.0f, 1.0f, 1.0f, //3 + 1.0f, -1.0f, 1.0f, //4 + // left face + -1.0f, -1.0f, 1.0f, //1 + -1.0f, 1.0f, 1.0f, //2 + -1.0f, 1.0f, -1.0f, //3 + -1.0f, -1.0f, 1.0f, //1 + -1.0f, 1.0f, -1.0f, //3 + -1.0f, -1.0f, -1.0f, //4 + // top face + 1.0f, 1.0f, 1.0f, //1 + 1.0f, 1.0f, -1.0f, //2 + -1.0f, 1.0f, -1.0f, //3 + 1.0f, 1.0f, 1.0f, //1 + -1.0f, 1.0f, -1.0f, //3 + -1.0f, 1.0f, 1.0f, //4 + // bottom face + -1.0f, -1.0f, 1.0f, //1 + -1.0f, -1.0f, -1.0f, //2 + 1.0f, -1.0f, -1.0f, //3 + -1.0f, -1.0f, 1.0f, //1 + 1.0f, -1.0f, -1.0f, //3 + 1.0f, -1.0f, 1.0f, };//4 + + private static final float[] colors = { + // front face (red) + 1.0f, 0.0f, 0.0f, //1 + 1.0f, 0.0f, 0.0f, //2 + 1.0f, 0.0f, 0.0f, //3 + 1.0f, 0.0f, 0.0f, //1 + 1.0f, 0.0f, 0.0f, //3 + 1.0f, 0.0f, 0.0f, //4 + // back face (green) + 0.0f, 1.0f, 0.0f, //1 + 0.0f, 1.0f, 0.0f, //2 + 0.0f, 1.0f, 0.0f, //3 + 0.0f, 1.0f, 0.0f, //1 + 0.0f, 1.0f, 0.0f, //3 + 0.0f, 1.0f, 0.0f, //4 + // right face (blue) + 0.0f, 0.0f, 1.0f, //1 + 0.0f, 0.0f, 1.0f, //2 + 0.0f, 0.0f, 1.0f, //3 + 0.0f, 0.0f, 1.0f, //1 + 0.0f, 0.0f, 1.0f, //3 + 0.0f, 0.0f, 1.0f, //4 + // left face (yellow) + 1.0f, 1.0f, 0.0f, //1 + 1.0f, 1.0f, 0.0f, //2 + 1.0f, 1.0f, 0.0f, //3 + 1.0f, 1.0f, 0.0f, //1 + 1.0f, 1.0f, 0.0f, //3 + 1.0f, 1.0f, 0.0f, //4 + // top face (magenta) + 1.0f, 0.0f, 1.0f, //1 + 1.0f, 0.0f, 1.0f, //2 + 1.0f, 0.0f, 1.0f, //3 + 1.0f, 0.0f, 1.0f, //1 + 1.0f, 0.0f, 1.0f, //3 + 1.0f, 0.0f, 1.0f, //4 + // bottom face (cyan) + 0.0f, 1.0f, 1.0f, //1 + 0.0f, 1.0f, 1.0f, //2 + 0.0f, 1.0f, 1.0f, //3 + 0.0f, 1.0f, 1.0f, //1 + 0.0f, 1.0f, 1.0f, //3 + 0.0f, 1.0f, 1.0f, };//4 + + /** + * Constructs a color cube with unit scale. The corners of the + * color cube are [-1,-1,-1] and [1,1,1]. + */ + public Cube() + { + TriangleArray cube = new TriangleArray(36, + GeometryArray.COORDINATES | GeometryArray.COLOR_3 | GeometryArray.USE_NIO_BUFFER | GeometryArray.BY_REFERENCE); + + cube.setCoordRefBuffer(new J3DBuffer(makeFloatBuffer(verts))); + cube.setColorRefBuffer(new J3DBuffer(makeFloatBuffer(colors))); + + this.setGeometry(cube); + this.setAppearance(new SimpleShaderAppearance()); + } + + /** + * Constructs a color cube with the specified scale. The corners of the + * color cube are [-scale,-scale,-scale] and [scale,scale,scale]. + * @param scale the scale of the cube + */ + public Cube(double scale) + { + TriangleArray cube = new TriangleArray(36, + GeometryArray.COORDINATES | GeometryArray.COLOR_3 | GeometryArray.USE_NIO_BUFFER | GeometryArray.BY_REFERENCE); + + float scaledVerts[] = new float[verts.length]; + for (int i = 0; i < verts.length; i++) + scaledVerts[i] = verts[i] * (float) scale; + + cube.setCoordRefBuffer(new J3DBuffer(makeFloatBuffer(scaledVerts))); + cube.setColorRefBuffer(new J3DBuffer(makeFloatBuffer(colors))); + + this.setGeometry(cube); + + this.setAppearance(new SimpleShaderAppearance()); + } + + public Cube(double scale, float r, float g, float b) + { + TriangleArray cube = new TriangleArray(36, + GeometryArray.COORDINATES | GeometryArray.COLOR_3 | GeometryArray.USE_NIO_BUFFER | GeometryArray.BY_REFERENCE); + + float scaledVerts[] = new float[verts.length]; + for (int i = 0; i < verts.length; i++) + scaledVerts[i] = verts[i] * (float) scale; + + cube.setCoordRefBuffer(new J3DBuffer(makeFloatBuffer(scaledVerts))); + + float colorsSet[] = new float[36 * 3]; + for (int i = 0; i < 36; i++) + { + colorsSet[i * 3 + 0] = r; + colorsSet[i * 3 + 1] = g; + colorsSet[i * 3 + 2] = b; + } + + cube.setColorRefBuffer(new J3DBuffer(makeFloatBuffer(colorsSet))); + + this.setGeometry(cube); + this.setAppearance(new SimpleShaderAppearance()); + } + + /** + * Constructs a color cube with the specified scale. The corners of the + * color cube are [-scale,-scale,-scale] and [scale,scale,scale]. + * @param scale the scale of the cube + */ + public Cube(double xScale, double yScale, double zScale) + { + TriangleArray cube = new TriangleArray(36, + GeometryArray.COORDINATES | GeometryArray.COLOR_3 | GeometryArray.USE_NIO_BUFFER | GeometryArray.BY_REFERENCE); + + float scaledVerts[] = new float[verts.length]; + for (int i = 0; i < verts.length; i += 3) + { + scaledVerts[i + 0] = verts[i + 0] * (float) xScale; + scaledVerts[i + 1] = verts[i + 1] * (float) yScale; + scaledVerts[i + 2] = verts[i + 2] * (float) zScale; + } + + cube.setCoordRefBuffer(new J3DBuffer(makeFloatBuffer(scaledVerts))); + cube.setColorRefBuffer(new J3DBuffer(makeFloatBuffer(colors))); + + this.setGeometry(cube); + this.setAppearance(new SimpleShaderAppearance()); + } + + public Cube(double xScale, double yScale, double zScale, float r, float g, float b) + { + TriangleArray cube = new TriangleArray(36, + GeometryArray.COORDINATES | GeometryArray.COLOR_3 | GeometryArray.USE_NIO_BUFFER | GeometryArray.BY_REFERENCE); + + float scaledVerts[] = new float[verts.length]; + for (int i = 0; i < verts.length; i += 3) + { + scaledVerts[i + 0] = verts[i + 0] * (float) xScale; + scaledVerts[i + 1] = verts[i + 1] * (float) yScale; + scaledVerts[i + 2] = verts[i + 2] * (float) zScale; + } + + cube.setCoordRefBuffer(new J3DBuffer(makeFloatBuffer(scaledVerts))); + + float colorsSet[] = new float[36 * 3]; + for (int i = 0; i < 36; i++) + { + colorsSet[i * 3 + 0] = r; + colorsSet[i * 3 + 1] = g; + colorsSet[i * 3 + 2] = b; + } + + cube.setColorRefBuffer(new J3DBuffer(makeFloatBuffer(colorsSet))); + + this.setGeometry(cube); + this.setAppearance(new SimpleShaderAppearance()); + } + + public Cube(float xMin, float yMin, float zMin, float xMax, float yMax, float zMax) + { + TriangleArray cube = new TriangleArray(36, + GeometryArray.COORDINATES | GeometryArray.COLOR_3 | GeometryArray.USE_NIO_BUFFER | GeometryArray.BY_REFERENCE); + + float scaledVerts[] = new float[] { + // front face + xMax, yMin, zMax, //1 + xMax, yMax, zMax, //2 + xMin, yMax, zMax, //3 + xMax, yMin, zMax, //1 + xMin, yMax, zMax, //3 + xMin, yMin, zMax, //4 + // back face + xMin, yMin, zMin, //1 + xMin, yMax, zMin, //2 + xMax, yMax, zMin, //3 + xMin, yMin, zMin, //1 + xMax, yMax, zMin, //3 + xMax, yMin, zMin, //4 + // right face + xMax, yMin, zMin, //1 + xMax, yMax, zMin, //2 + xMax, yMax, zMax, //3 + xMax, yMin, zMin, //1 + xMax, yMax, zMax, //3 + xMax, yMin, zMax, //4 + // left face + xMin, yMin, zMax, //1 + xMin, yMax, zMax, //2 + xMin, yMax, zMin, //3 + xMin, yMin, zMax, //1 + xMin, yMax, zMin, //3 + xMin, yMin, zMin, //4 + // top face + xMax, yMax, zMax, //1 + xMax, yMax, zMin, //2 + xMin, yMax, zMin, //3 + xMax, yMax, zMax, //1 + xMin, yMax, zMin, //3 + xMin, yMax, zMax, //4 + // bottom face + xMin, yMin, zMax, //1 + xMin, yMin, zMin, //2 + xMax, yMin, zMin, //3 + xMin, yMin, zMax, //1 + xMax, yMin, zMin, //3 + xMax, yMin, zMax, };//4 + + cube.setCoordRefBuffer(new J3DBuffer(makeFloatBuffer(scaledVerts))); + cube.setColorRefBuffer(new J3DBuffer(makeFloatBuffer(colors))); + + this.setGeometry(cube); + this.setAppearance(new SimpleShaderAppearance()); + } + + public static FloatBuffer makeFloatBuffer(float[] arr) + { + ByteBuffer bb = ByteBuffer.allocateDirect(arr.length * 4); + bb.order(ByteOrder.nativeOrder()); + FloatBuffer fb = bb.asFloatBuffer(); + fb.put(arr); + fb.position(0); + return fb; + } + +} diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/EnvironmentMappingGLSL.java b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/EnvironmentMappingGLSL.java index 5eba8df..700df00 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/EnvironmentMappingGLSL.java +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/EnvironmentMappingGLSL.java @@ -1,45 +1,23 @@ /* - * $RCSfile$ + * Copyright (c) 2016 JogAmp Community. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). * - * - Redistribution of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * - 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. - * - * You acknowledge that this software is not designed, licensed or - * intended for use in the design, construction, operation or - * maintenance of any nuclear facility. - * - * $Revision$ - * $Date$ - * $State$ */ package org.jdesktop.j3d.examples.gl2es2pipeline; @@ -48,9 +26,6 @@ import java.awt.GraphicsConfiguration; import java.io.File; import java.io.IOException; import java.net.URL; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.FloatBuffer; import javax.swing.JOptionPane; @@ -60,8 +35,6 @@ import org.jogamp.java3d.BoundingSphere; import org.jogamp.java3d.BranchGroup; import org.jogamp.java3d.Canvas3D; import org.jogamp.java3d.GLSLShaderProgram; -import org.jogamp.java3d.GeometryArray; -import org.jogamp.java3d.J3DBuffer; import org.jogamp.java3d.RotationInterpolator; import org.jogamp.java3d.Shader; import org.jogamp.java3d.ShaderAppearance; @@ -76,7 +49,6 @@ import org.jogamp.java3d.Texture; import org.jogamp.java3d.TextureUnitState; import org.jogamp.java3d.Transform3D; import org.jogamp.java3d.TransformGroup; -import org.jogamp.java3d.TriangleStripArray; import org.jogamp.java3d.utils.geometry.Sphere; import org.jogamp.java3d.utils.image.TextureLoader; import org.jogamp.java3d.utils.shader.StringIO; @@ -191,6 +163,7 @@ public class EnvironmentMappingGLSL extends javax.swing.JFrame // Add a ShaderErrorListener univ.addShaderErrorListener(new ShaderErrorListener() { + @Override public void errorOccurred(ShaderError error) { error.printVerbose(); @@ -251,6 +224,7 @@ public class EnvironmentMappingGLSL extends javax.swing.JFrame System.setProperty("sun.awt.noerasebackground", "true"); System.setProperty("j3d.rend", "jogl2es2"); java.awt.EventQueue.invokeLater(new Runnable() { + @Override public void run() { new EnvironmentMappingGLSL().setVisible(true); diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/ObjLoadGLSL.java b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/ObjLoadGLSL.java index 709ff47..2708e58 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/ObjLoadGLSL.java +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/ObjLoadGLSL.java @@ -1,45 +1,23 @@ /* - * $RCSfile$ + * Copyright (c) 2016 JogAmp Community. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). * - * - Redistribution of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * - 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. - * - * You acknowledge that this software is not designed, licensed or - * intended for use in the design, construction, operation or - * maintenance of any nuclear facility. - * - * $Revision$ - * $Date$ - * $State$ */ package org.jdesktop.j3d.examples.gl2es2pipeline; @@ -212,6 +190,7 @@ public class ObjLoadGLSL extends javax.swing.JFrame // Add a ShaderErrorListener univ.addShaderErrorListener(new ShaderErrorListener() { + @Override public void errorOccurred(ShaderError error) { error.printVerbose(); @@ -263,7 +242,7 @@ public class ObjLoadGLSL extends javax.swing.JFrame return canvas3d; } - private void usage() + private static void usage() { System.out.println("Usage: java ObjLoadGLSL [-s] [-S shaderName] [-n] [-t] [-c degrees] <.obj file>"); System.out.println(" -s Spin (no user interaction)"); @@ -289,7 +268,7 @@ public class ObjLoadGLSL extends javax.swing.JFrame private void setShaderProgram(Group g, ShaderAppearance myApp) { - Enumeration e = g.getAllChildren(); + Enumeration e = g.getAllChildren(); while (e.hasMoreElements()) { Node n = (Node) (e.nextElement()); @@ -429,6 +408,7 @@ public class ObjLoadGLSL extends javax.swing.JFrame System.setProperty("sun.awt.noerasebackground", "true"); System.setProperty("j3d.rend","jogl2es2"); java.awt.EventQueue.invokeLater(new Runnable() { + @Override public void run() { ObjLoadGLSL objLoadGLSL = new ObjLoadGLSL(args); diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/PhongShadingGLSL.java b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/PhongShadingGLSL.java index 03fbd3d..fa5ba7a 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/PhongShadingGLSL.java +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/PhongShadingGLSL.java @@ -1,45 +1,23 @@ /* - * $RCSfile$ + * Copyright (c) 2016 JogAmp Community. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). * - * - Redistribution of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * - 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. - * - * You acknowledge that this software is not designed, licensed or - * intended for use in the design, construction, operation or - * maintenance of any nuclear facility. - * - * $Revision$ - * $Date$ - * $State$ */ package org.jdesktop.j3d.examples.gl2es2pipeline; @@ -47,9 +25,6 @@ package org.jdesktop.j3d.examples.gl2es2pipeline; import java.awt.GraphicsConfiguration; import java.io.File; import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.FloatBuffer; import javax.swing.JOptionPane; @@ -63,8 +38,6 @@ import org.jogamp.java3d.Canvas3D; import org.jogamp.java3d.ColoringAttributes; import org.jogamp.java3d.DirectionalLight; import org.jogamp.java3d.GLSLShaderProgram; -import org.jogamp.java3d.GeometryArray; -import org.jogamp.java3d.J3DBuffer; import org.jogamp.java3d.Light; import org.jogamp.java3d.Material; import org.jogamp.java3d.PointLight; @@ -78,7 +51,6 @@ import org.jogamp.java3d.SourceCodeShader; import org.jogamp.java3d.SpotLight; import org.jogamp.java3d.Transform3D; import org.jogamp.java3d.TransformGroup; -import org.jogamp.java3d.TriangleStripArray; import org.jogamp.java3d.utils.geometry.Sphere; import org.jogamp.java3d.utils.shader.StringIO; import org.jogamp.java3d.utils.universe.SimpleUniverse; @@ -160,7 +132,7 @@ public class PhongShadingGLSL extends javax.swing.JFrame String vertexProgram = null; String fragmentProgram = null; Shader[] shaders = new Shader[2]; - String[] attrNames = { "numLights" }; + //String[] attrNames = { "numLights" }; try { @@ -332,6 +304,7 @@ public class PhongShadingGLSL extends javax.swing.JFrame // Add a ShaderErrorListener univ.addShaderErrorListener(new ShaderErrorListener() { + @Override public void errorOccurred(ShaderError error) { error.printVerbose(); @@ -397,6 +370,7 @@ public class PhongShadingGLSL extends javax.swing.JFrame gouraudButton.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); gouraudButton.setMargin(new java.awt.Insets(0, 0, 0, 0)); gouraudButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { gouraudButtonActionPerformed(evt); @@ -413,6 +387,7 @@ public class PhongShadingGLSL extends javax.swing.JFrame phongButton.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0)); phongButton.setMargin(new java.awt.Insets(0, 0, 0, 0)); phongButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { phongButtonActionPerformed(evt); @@ -441,6 +416,7 @@ public class PhongShadingGLSL extends javax.swing.JFrame fileMenu.setText("File"); exitMenuItem.setText("Exit"); exitMenuItem.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { exitMenuItemActionPerformed(evt); @@ -466,7 +442,7 @@ public class PhongShadingGLSL extends javax.swing.JFrame sApp.setShaderProgram(gouraudSP); }//GEN-LAST:event_gouraudButtonActionPerformed - private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) + private static void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed System.exit(0); }//GEN-LAST:event_exitMenuItemActionPerformed @@ -479,6 +455,7 @@ public class PhongShadingGLSL extends javax.swing.JFrame System.setProperty("sun.awt.noerasebackground", "true"); System.setProperty("j3d.rend", "jogl2es2"); java.awt.EventQueue.invokeLater(new Runnable() { + @Override public void run() { new PhongShadingGLSL().setVisible(true); diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SamplerTestGLSL.java b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SamplerTestGLSL.java index 11bfeeb..1cb2904 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SamplerTestGLSL.java +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SamplerTestGLSL.java @@ -1,45 +1,23 @@ /* - * $RCSfile$ + * Copyright (c) 2016 JogAmp Community. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). * - * - Redistribution of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * - 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. - * - * You acknowledge that this software is not designed, licensed or - * intended for use in the design, construction, operation or - * maintenance of any nuclear facility. - * - * $Revision$ - * $Date$ - * $State$ */ package org.jdesktop.j3d.examples.gl2es2pipeline; @@ -207,6 +185,7 @@ public class SamplerTestGLSL extends javax.swing.JFrame // Add a ShaderErrorListener univ.addShaderErrorListener(new ShaderErrorListener() { + @Override public void errorOccurred(ShaderError error) { error.printVerbose(); @@ -267,6 +246,7 @@ public class SamplerTestGLSL extends javax.swing.JFrame System.setProperty("sun.awt.noerasebackground", "true"); System.setProperty("j3d.rend","jogl2es2"); java.awt.EventQueue.invokeLater(new Runnable() { + @Override public void run() { new SamplerTestGLSL().setVisible(true); diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/ShaderTestGLSL.java b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/ShaderTestGLSL.java index 65f40bb..ac0282e 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/ShaderTestGLSL.java +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/ShaderTestGLSL.java @@ -1,45 +1,23 @@ /* - * $RCSfile$ + * Copyright (c) 2016 JogAmp Community. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). * - * - Redistribution of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * - 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. - * - * You acknowledge that this software is not designed, licensed or - * intended for use in the design, construction, operation or - * maintenance of any nuclear facility. - * - * $Revision$ - * $Date$ - * $State$ */ package org.jdesktop.j3d.examples.gl2es2pipeline; @@ -47,9 +25,6 @@ package org.jdesktop.j3d.examples.gl2es2pipeline; import java.awt.GraphicsConfiguration; import java.io.File; import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.FloatBuffer; import javax.swing.JOptionPane; @@ -59,8 +34,6 @@ import org.jogamp.java3d.BoundingSphere; import org.jogamp.java3d.BranchGroup; import org.jogamp.java3d.Canvas3D; import org.jogamp.java3d.GLSLShaderProgram; -import org.jogamp.java3d.GeometryArray; -import org.jogamp.java3d.J3DBuffer; import org.jogamp.java3d.Material; import org.jogamp.java3d.PositionInterpolator; import org.jogamp.java3d.Shader; @@ -75,8 +48,6 @@ import org.jogamp.java3d.Shape3D; import org.jogamp.java3d.SourceCodeShader; import org.jogamp.java3d.Transform3D; import org.jogamp.java3d.TransformGroup; -import org.jogamp.java3d.TriangleStripArray; -import org.jogamp.java3d.View; import org.jogamp.java3d.utils.geometry.Sphere; import org.jogamp.java3d.utils.shader.StringIO; import org.jogamp.java3d.utils.universe.SimpleUniverse; @@ -102,8 +73,8 @@ public class ShaderTestGLSL extends javax.swing.JFrame static final String[] shaderAttrNames2 = { "BrickColor", "LightPosition" }; private SimpleUniverse univ = null; - private View view; - private BranchGroup transpObj; + //private View view; + //private BranchGroup transpObj; private BranchGroup scene = null; private int shaderSelected = DIMPLE_SHADER; private float density = 16.0f; @@ -140,7 +111,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame return m; } - private ShaderProgram createGLSLShaderProgram(int index) + private static ShaderProgram createGLSLShaderProgram(int index) { String vertexProgram = null; String fragmentProgram = null; @@ -348,6 +319,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame // Add a ShaderErrorListener univ.addShaderErrorListener(new ShaderErrorListener() { + @Override public void errorOccurred(ShaderError error) { error.printVerbose(); @@ -360,7 +332,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame // objects in the scene can be viewed. viewingPlatform.setNominalViewingTransform(); - view = univ.getViewer().getView(); + //view = univ.getViewer().getView(); return c; } @@ -413,6 +385,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame setTitle("Window Title"); addWindowListener(new java.awt.event.WindowAdapter() { + @Override public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); @@ -430,6 +403,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame densityButtonGroup.add(zeroButton); zeroButton.setText("Zero"); zeroButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { zeroButtonActionPerformed(evt); @@ -443,6 +417,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame densityButtonGroup.add(halfButton); halfButton.setText("Half"); halfButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { halfButtonActionPerformed(evt); @@ -459,6 +434,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame fullButton.setSelected(true); fullButton.setText("Full"); fullButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { fullButtonActionPerformed(evt); @@ -481,6 +457,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame goldButton.setSelected(true); goldButton.setText("Gold"); goldButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { goldButtonActionPerformed(evt); @@ -494,6 +471,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame colorButtonGroup.add(silverButton); silverButton.setText("Silver"); silverButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { silverButtonActionPerformed(evt); @@ -515,6 +493,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame DetachButton.setSelected(true); DetachButton.setText("Detach"); DetachButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { DetachButtonActionPerformed(evt); @@ -528,6 +507,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame sceneGraphButtonGroup.add(AttachButton); AttachButton.setText("Create"); AttachButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { AttachButtonActionPerformed(evt); @@ -543,6 +523,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame replaceSPButton.setText("Replace Shader"); replaceSPButton.setEnabled(false); replaceSPButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { replaceSPButtonActionPerformed(evt); @@ -569,6 +550,7 @@ public class ShaderTestGLSL extends javax.swing.JFrame fileMenu.setText("File"); exitMenuItem.setText("Exit"); exitMenuItem.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { exitMenuItemActionPerformed(evt); @@ -698,13 +680,13 @@ public class ShaderTestGLSL extends javax.swing.JFrame }//GEN-LAST:event_zeroButtonActionPerformed - private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) + private static void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed System.exit(0); }//GEN-LAST:event_exitMenuItemActionPerformed /** Exit the Application */ - private void exitForm(java.awt.event.WindowEvent evt) + private static void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm System.exit(0); }//GEN-LAST:event_exitForm diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SimpleShaderAppearance.java b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SimpleShaderAppearance.java index f06f9e9..5b7be75 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SimpleShaderAppearance.java +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SimpleShaderAppearance.java @@ -1,3 +1,24 @@ +/* + * Copyright (c) 2016 JogAmp Community. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ package org.jdesktop.j3d.examples.gl2es2pipeline; import org.jogamp.java3d.ColoringAttributes; @@ -14,7 +35,6 @@ import org.jogamp.java3d.SourceCodeShader; import org.jogamp.vecmath.Color3f; /** - * Note all of these are no lighting shaders, so materials are always ignored * @author phil * */ @@ -23,6 +43,8 @@ public class SimpleShaderAppearance extends ShaderAppearance private static GLSLShaderProgram flatShaderProgram; private static GLSLShaderProgram textureShaderProgram; private static GLSLShaderProgram colorLineShaderProgram; + private static GLSLShaderProgram litFlatShaderProgram; + private static GLSLShaderProgram litTextureShaderProgram; public static String alphaTestUniforms = "uniform int alphaTestEnabled;\n" + // "uniform int alphaTestFunction;\n" + // @@ -51,7 +73,7 @@ public class SimpleShaderAppearance extends ShaderAppearance */ public SimpleShaderAppearance() { - this(null, false); + this(null, false, false); } /** @@ -60,7 +82,7 @@ public class SimpleShaderAppearance extends ShaderAppearance */ public SimpleShaderAppearance(Color3f color) { - this(color, false); + this(color, false, false); } /** @@ -68,161 +90,364 @@ public class SimpleShaderAppearance extends ShaderAppearance */ public SimpleShaderAppearance(boolean hasTexture) { - this(null, hasTexture); + this(null, false, hasTexture); + } + + public SimpleShaderAppearance(boolean lit, boolean hasTexture) + { + this(null, lit, hasTexture); } /** if color is not null then a line appearance * otherwise simple poly appearance * @param color */ - private SimpleShaderAppearance(Color3f color, boolean hasTexture) + private SimpleShaderAppearance(Color3f color, boolean lit, boolean hasTexture) { - if (hasTexture) + if (lit) { - RenderingAttributes ra = new RenderingAttributes(); - setRenderingAttributes(ra); - - if (textureShaderProgram == null) + String vertexProgram = "#version 120\n"; + vertexProgram += "attribute vec4 glVertex;\n"; + vertexProgram += "attribute vec4 glColor;\n"; + vertexProgram += "attribute vec3 glNormal; \n"; + if (hasTexture) { - textureShaderProgram = new GLSLShaderProgram() { - @Override - public String toString() - { - return "SimpleShaderAppearance textureShaderProgram"; - } - }; - String vertexProgram = "#version 120\n"; - vertexProgram += "attribute vec4 glVertex;\n"; vertexProgram += "attribute vec2 glMultiTexCoord0;\n"; - vertexProgram += "uniform mat4 glModelViewProjectionMatrix;\n"; + } + vertexProgram += "uniform mat4 glModelViewProjectionMatrix;\n"; + vertexProgram += "uniform mat4 glModelViewMatrix;\n"; + vertexProgram += "uniform mat3 glNormalMatrix;\n"; + vertexProgram += "uniform int ignoreVertexColors;\n"; + vertexProgram += "uniform vec4 glLightModelambient;\n"; + vertexProgram += "struct material\n"; + vertexProgram += "{\n"; + vertexProgram += " int lightEnabled;\n"; + vertexProgram += " vec4 ambient;\n"; + vertexProgram += " vec4 diffuse;\n"; + vertexProgram += " vec4 emission; \n"; + vertexProgram += " vec3 specular;\n"; + vertexProgram += " float shininess;\n"; + vertexProgram += "};\n"; + vertexProgram += "uniform material glFrontMaterial;\n"; + vertexProgram += "struct lightSource\n"; + vertexProgram += " {\n"; + vertexProgram += " int enabled;\n"; + vertexProgram += " vec4 position;\n"; + vertexProgram += " vec4 diffuse;\n"; + vertexProgram += " vec4 specular;\n"; + vertexProgram += " float constantAttenuation, linearAttenuation, quadraticAttenuation;\n"; + vertexProgram += " float spotCutoff, spotExponent;\n"; + vertexProgram += " vec3 spotDirection;\n"; + vertexProgram += " };\n"; + vertexProgram += "\n"; + vertexProgram += " uniform int numberOfLights;\n"; + vertexProgram += " const int maxLights = 1;\n"; + vertexProgram += " uniform lightSource glLightSource[maxLights];\n"; + if (hasTexture) + { vertexProgram += "varying vec2 glTexCoord0;\n"; - vertexProgram += "void main( void ){\n"; - vertexProgram += "gl_Position = glModelViewProjectionMatrix * glVertex;\n"; + } + vertexProgram += "varying vec3 LightDir;\n"; + vertexProgram += "varying vec3 ViewDir;\n"; + vertexProgram += "varying vec3 N;\n"; + vertexProgram += "varying vec4 A;\n"; + vertexProgram += "varying vec4 C;\n"; + vertexProgram += "varying vec4 D;\n"; + vertexProgram += "varying vec3 emissive;\n"; + vertexProgram += "varying vec3 specular;\n"; + vertexProgram += "varying float shininess;\n"; + vertexProgram += "void main( void ){\n"; + vertexProgram += "gl_Position = glModelViewProjectionMatrix * glVertex;\n"; + if (hasTexture) + { vertexProgram += "glTexCoord0 = glMultiTexCoord0.st;\n"; - vertexProgram += "}"; + } + + vertexProgram += "N = normalize(glNormalMatrix * glNormal);\n"; + + vertexProgram += "vec3 v = vec3(glModelViewMatrix * glVertex);\n"; + + vertexProgram += "ViewDir = -v.xyz;\n"; + vertexProgram += "LightDir = glLightSource[0].position.xyz;\n"; - String fragmentProgram = "#version 120\n"; - fragmentProgram += "precision mediump float;\n"; + vertexProgram += "A = glLightModelambient * glFrontMaterial.ambient;\n"; + vertexProgram += "if( ignoreVertexColors != 0) \n"; + // objectColor should be used if it is no lighting, and reusing material diffuse appears wrong + vertexProgram += " C = vec4(1,1,1,1);//glFrontMaterial.diffuse; \n"; + vertexProgram += "else \n"; + vertexProgram += " C = glColor; \n"; + + vertexProgram += "D = glLightSource[0].diffuse * glFrontMaterial.diffuse;\n"; + + vertexProgram += "emissive = glFrontMaterial.emission.rgb;\n"; + vertexProgram += "specular = glFrontMaterial.specular;\n"; + vertexProgram += "shininess = glFrontMaterial.shininess;\n"; + vertexProgram += "}"; + + String fragmentProgram = "#version 120\n"; + fragmentProgram += "precision mediump float;\n"; + if (hasTexture) + { fragmentProgram += alphaTestUniforms; + fragmentProgram += "varying vec2 glTexCoord0;\n"; fragmentProgram += "uniform sampler2D BaseMap;\n"; - fragmentProgram += "void main( void ){\n "; + } + + fragmentProgram += "in vec3 LightDir;\n"; + fragmentProgram += "in vec3 ViewDir;\n"; + + fragmentProgram += "in vec3 N;\n"; + + fragmentProgram += "in vec4 A;\n"; + fragmentProgram += "in vec4 C;\n"; + fragmentProgram += "in vec4 D;\n"; + + fragmentProgram += "in vec3 emissive;\n"; + fragmentProgram += "in vec3 specular;\n"; + fragmentProgram += "in float shininess;\n"; + fragmentProgram += "void main( void ){\n "; + if (hasTexture) + { fragmentProgram += "vec4 baseMap = texture2D( BaseMap, glTexCoord0.st );\n"; + } + if (hasTexture) + { fragmentProgram += alphaTestMethod; - fragmentProgram += "gl_FragColor = baseMap;\n"; - fragmentProgram += "}"; - - textureShaderProgram.setShaders(makeShaders(vertexProgram, fragmentProgram)); - textureShaderProgram.setShaderAttrNames(new String[] { "BaseMap" }); } + fragmentProgram += "vec3 normal = N;\n"; - setShaderProgram(textureShaderProgram); + fragmentProgram += "vec3 L = normalize(LightDir);\n"; + fragmentProgram += "vec3 E = normalize(ViewDir);\n"; + fragmentProgram += "vec3 R = reflect(-L, normal);\n"; + fragmentProgram += "vec3 H = normalize( L + E );\n"; - ShaderAttributeSet shaderAttributeSet = new ShaderAttributeSet(); - shaderAttributeSet.put(new ShaderAttributeValue("BaseMap", new Integer(0))); - setShaderAttributeSet(shaderAttributeSet); + fragmentProgram += "float NdotL = max( dot(normal, L), 0.0 );\n"; + fragmentProgram += "float NdotH = max( dot(normal, H), 0.0 );\n"; + fragmentProgram += "float EdotN = max( dot(normal, E), 0.0 );\n"; + fragmentProgram += "float NdotNegL = max( dot(normal, -L), 0.0 );\n"; - } - else - { - if (color != null) + fragmentProgram += "vec4 color;\n"; + if (hasTexture) + { + fragmentProgram += "vec3 albedo = baseMap.rgb * C.rgb;\n"; + } + else { - PolygonAttributes polyAtt = new PolygonAttributes(PolygonAttributes.POLYGON_LINE, PolygonAttributes.CULL_NONE, 0.0f); - polyAtt.setPolygonOffset(0.1f); - setPolygonAttributes(polyAtt); - LineAttributes lineAtt = new LineAttributes(1, LineAttributes.PATTERN_SOLID, false); - setLineAttributes(lineAtt); + fragmentProgram += "vec3 albedo = C.rgb;\n"; + } + fragmentProgram += "vec3 diffuse = A.rgb + (D.rgb * NdotL);\n"; - ColoringAttributes colorAtt = new ColoringAttributes(color, ColoringAttributes.FASTEST); - setColoringAttributes(colorAtt); + // 0.3 is just what the calc is + fragmentProgram += "vec3 spec = specular * pow(NdotH, 0.3*shininess);\n"; + // D is not right it should be the light source spec color, probably just 1,1,1 but java3d has no spec on lights + //fragmentProgram += "spec *= D.rgb;\n"; - RenderingAttributes ra = new RenderingAttributes(); - ra.setIgnoreVertexColors(true); - setRenderingAttributes(ra); + fragmentProgram += "color.rgb = albedo * (diffuse + emissive) + spec;\n"; + if (hasTexture) + { + fragmentProgram += "color.a = C.a * baseMap.a;\n"; + } + else + { + fragmentProgram += "color.a = C.a;\n"; + } - Material mat = new Material(); - setMaterial(mat); + fragmentProgram += "gl_FragColor = color;\n"; - if (colorLineShaderProgram == null) + fragmentProgram += "}"; + if (hasTexture) + { + if (litTextureShaderProgram == null) { - colorLineShaderProgram = new GLSLShaderProgram() { + litTextureShaderProgram = new GLSLShaderProgram() { @Override public String toString() { - return "SimpleShaderAppearance colorLineShaderProgram"; + return "SimpleShaderAppearance litTextureShaderProgram"; } }; - String vertexProgram = "#version 120\n"; - vertexProgram += "attribute vec4 glVertex;\n"; - vertexProgram += "attribute vec4 glColor;\n"; - vertexProgram += "uniform int ignoreVertexColors;\n"; - vertexProgram += "uniform vec4 objectColor;\n"; - vertexProgram += "uniform mat4 glModelViewProjectionMatrix;\n"; - vertexProgram += "varying vec4 glFrontColor;\n"; - vertexProgram += "void main( void ){\n"; - vertexProgram += "gl_Position = glModelViewProjectionMatrix * glVertex;\n"; - vertexProgram += "if( ignoreVertexColors != 0 )\n"; - vertexProgram += " glFrontColor = objectColor;\n"; - vertexProgram += "else\n"; - vertexProgram += " glFrontColor = glColor;\n"; - vertexProgram += "}"; - - String fragmentProgram = "#version 120\n"; - fragmentProgram += "precision mediump float;\n"; - fragmentProgram += "varying vec4 glFrontColor;\n"; - fragmentProgram += "void main( void ){\n"; - fragmentProgram += "gl_FragColor = glFrontColor;\n"; - fragmentProgram += "}"; + litTextureShaderProgram.setShaders(makeShaders(vertexProgram, fragmentProgram)); + litTextureShaderProgram.setShaderAttrNames(new String[] { "BaseMap" }); - colorLineShaderProgram.setShaders(makeShaders(vertexProgram, fragmentProgram)); } - setShaderProgram(colorLineShaderProgram); + setShaderProgram(litTextureShaderProgram); + ShaderAttributeSet shaderAttributeSet = new ShaderAttributeSet(); + shaderAttributeSet.put(new ShaderAttributeValue("BaseMap", new Integer(0))); + setShaderAttributeSet(shaderAttributeSet); } else { - RenderingAttributes ra = new RenderingAttributes(); - setRenderingAttributes(ra); + if (litFlatShaderProgram == null) + { + litFlatShaderProgram = new GLSLShaderProgram() { + @Override + public String toString() + { + return "SimpleShaderAppearance litFlatShaderProgram"; + } + }; + litFlatShaderProgram.setShaders(makeShaders(vertexProgram, fragmentProgram)); - if (flatShaderProgram == null) + //System.out.println("vertexProgram " + vertexProgram); + //System.out.println("fragmentProgram " + fragmentProgram); + + } + + setShaderProgram(litFlatShaderProgram); + + } + } + else + { + if (hasTexture) + { + if (textureShaderProgram == null) { - flatShaderProgram = new GLSLShaderProgram() { + textureShaderProgram = new GLSLShaderProgram() { @Override public String toString() { - return "SimpleShaderAppearance flatShaderProgram"; + return "SimpleShaderAppearance textureShaderProgram"; } }; String vertexProgram = "#version 120\n"; vertexProgram += "attribute vec4 glVertex;\n"; - vertexProgram += "attribute vec4 glColor;\n"; - vertexProgram += "uniform int ignoreVertexColors;\n"; - vertexProgram += "uniform vec4 objectColor;\n"; + vertexProgram += "attribute vec2 glMultiTexCoord0;\n"; vertexProgram += "uniform mat4 glModelViewProjectionMatrix;\n"; - vertexProgram += "varying vec4 glFrontColor;\n"; + vertexProgram += "varying vec2 glTexCoord0;\n"; vertexProgram += "void main( void ){\n"; vertexProgram += "gl_Position = glModelViewProjectionMatrix * glVertex;\n"; - vertexProgram += "if( ignoreVertexColors != 0 )\n"; - vertexProgram += " glFrontColor = objectColor;\n"; - vertexProgram += "else\n"; - vertexProgram += " glFrontColor = glColor;\n"; + vertexProgram += "glTexCoord0 = glMultiTexCoord0.st;\n"; vertexProgram += "}"; String fragmentProgram = "#version 120\n"; fragmentProgram += "precision mediump float;\n"; - fragmentProgram += "varying vec4 glFrontColor;\n"; - fragmentProgram += "void main( void ){\n"; - fragmentProgram += "gl_FragColor = glFrontColor;\n"; + fragmentProgram += alphaTestUniforms; + fragmentProgram += "varying vec2 glTexCoord0;\n"; + fragmentProgram += "uniform sampler2D BaseMap;\n"; + fragmentProgram += "void main( void ){\n "; + fragmentProgram += "vec4 baseMap = texture2D( BaseMap, glTexCoord0.st );\n"; + fragmentProgram += alphaTestMethod; + fragmentProgram += "gl_FragColor = baseMap;\n"; fragmentProgram += "}"; - flatShaderProgram.setShaders(makeShaders(vertexProgram, fragmentProgram)); + textureShaderProgram.setShaders(makeShaders(vertexProgram, fragmentProgram)); + textureShaderProgram.setShaderAttrNames(new String[] { "BaseMap" }); + } + + setShaderProgram(textureShaderProgram); + + ShaderAttributeSet shaderAttributeSet = new ShaderAttributeSet(); + shaderAttributeSet.put(new ShaderAttributeValue("BaseMap", new Integer(0))); + setShaderAttributeSet(shaderAttributeSet); + + } + else + + { + if (color != null) + { + PolygonAttributes polyAtt = new PolygonAttributes(PolygonAttributes.POLYGON_LINE, PolygonAttributes.CULL_NONE, 0.0f); + polyAtt.setPolygonOffset(0.1f); + setPolygonAttributes(polyAtt); + LineAttributes lineAtt = new LineAttributes(1, LineAttributes.PATTERN_SOLID, false); + setLineAttributes(lineAtt); + + ColoringAttributes colorAtt = new ColoringAttributes(color, ColoringAttributes.FASTEST); + setColoringAttributes(colorAtt); + + RenderingAttributes ra = new RenderingAttributes(); + ra.setIgnoreVertexColors(true); + setRenderingAttributes(ra); + + Material mat = new Material(); + setMaterial(mat); + + if (colorLineShaderProgram == null) + { + colorLineShaderProgram = new GLSLShaderProgram() { + @Override + public String toString() + { + return "SimpleShaderAppearance colorLineShaderProgram"; + } + }; + String vertexProgram = "#version 120\n"; + vertexProgram += "attribute vec4 glVertex;\n"; + vertexProgram += "attribute vec4 glColor;\n"; + vertexProgram += "uniform int ignoreVertexColors;\n"; + vertexProgram += "uniform vec4 objectColor;\n"; + vertexProgram += "uniform mat4 glModelViewProjectionMatrix;\n"; + vertexProgram += "varying vec4 glFrontColor;\n"; + vertexProgram += "void main( void ){\n"; + vertexProgram += "gl_Position = glModelViewProjectionMatrix * glVertex;\n"; + vertexProgram += "if( ignoreVertexColors != 0 )\n"; + vertexProgram += " glFrontColor = objectColor;\n"; + vertexProgram += "else\n"; + vertexProgram += " glFrontColor = glColor;\n"; + vertexProgram += "}"; + + String fragmentProgram = "#version 120\n"; + fragmentProgram += "precision mediump float;\n"; + fragmentProgram += "varying vec4 glFrontColor;\n"; + fragmentProgram += "void main( void ){\n"; + fragmentProgram += "gl_FragColor = glFrontColor;\n"; + fragmentProgram += "}"; + + colorLineShaderProgram.setShaders(makeShaders(vertexProgram, fragmentProgram)); + } + + setShaderProgram(colorLineShaderProgram); } + else + { + RenderingAttributes ra = new RenderingAttributes(); + setRenderingAttributes(ra); + + if (flatShaderProgram == null) + { + flatShaderProgram = new GLSLShaderProgram() { + @Override + public String toString() + { + return "SimpleShaderAppearance flatShaderProgram"; + } + }; + String vertexProgram = "#version 120\n"; + vertexProgram += "attribute vec4 glVertex;\n"; + vertexProgram += "attribute vec4 glColor;\n"; + vertexProgram += "uniform int ignoreVertexColors;\n"; + vertexProgram += "uniform vec4 objectColor;\n"; + vertexProgram += "uniform mat4 glModelViewProjectionMatrix;\n"; + vertexProgram += "varying vec4 glFrontColor;\n"; + vertexProgram += "void main( void ){\n"; + vertexProgram += "gl_Position = glModelViewProjectionMatrix * glVertex;\n"; + vertexProgram += "if( ignoreVertexColors != 0 )\n"; + vertexProgram += " glFrontColor = objectColor;\n"; + vertexProgram += "else\n"; + vertexProgram += " glFrontColor = glColor;\n"; + vertexProgram += "}"; - setShaderProgram(flatShaderProgram); + String fragmentProgram = "#version 120\n"; + fragmentProgram += "precision mediump float;\n"; + fragmentProgram += "varying vec4 glFrontColor;\n"; + fragmentProgram += "void main( void ){\n"; + fragmentProgram += "gl_FragColor = glFrontColor;\n"; + fragmentProgram += "}"; + flatShaderProgram.setShaders(makeShaders(vertexProgram, fragmentProgram)); + + } + + setShaderProgram(flatShaderProgram); + + } } + } } diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SphereGLSL.java b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SphereGLSL.java index 61069f7..8a59c5f 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SphereGLSL.java +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/SphereGLSL.java @@ -1,45 +1,23 @@ /* - * $RCSfile$ + * Copyright (c) 2016 JogAmp Community. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). * - * - Redistribution of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * - 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. - * - * You acknowledge that this software is not designed, licensed or - * intended for use in the design, construction, operation or - * maintenance of any nuclear facility. - * - * $Revision$ - * $Date$ - * $State$ */ package org.jdesktop.j3d.examples.gl2es2pipeline; @@ -198,8 +176,8 @@ public class SphereGLSL extends javax.swing.JFrame caL1.setColor(lColor1); caL2.setColor(lColor2); - Appearance appL1 = makeGouraudShaderAppearance(); - Appearance appL2 = makeGouraudShaderAppearance(); + Appearance appL1 = new SimpleShaderAppearance(false, false); + Appearance appL2 = new SimpleShaderAppearance(false, false); appL1.setColoringAttributes(caL1); appL2.setColoringAttributes(caL2); @@ -285,41 +263,6 @@ public class SphereGLSL extends javax.swing.JFrame return objRoot; } - /** - * GL2ES2: this should be a trivial emissive color shader, but gouraud will do for now - * @return - */ - private Appearance makeGouraudShaderAppearance() - { - // Create a Sphere object, generate one copy of the sphere, - // and add it into the scene graph. - ShaderAppearance a = new ShaderAppearance(); - Material m = new Material(); - m.setLightingEnable(true); - String vertexProgram = null; - String fragmentProgram = null; - try - { - vertexProgram = StringIO.readFully( - new File(System.getProperty("user.dir") + "/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/gouraud.vert")); - fragmentProgram = StringIO.readFully( - new File(System.getProperty("user.dir") + "/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/gouraud.frag")); - } - catch (IOException e) - { - throw new RuntimeException(e); - } - Shader[] shaders = new Shader[2]; - shaders[0] = new SourceCodeShader(Shader.SHADING_LANGUAGE_GLSL, Shader.SHADER_TYPE_VERTEX, vertexProgram); - shaders[1] = new SourceCodeShader(Shader.SHADING_LANGUAGE_GLSL, Shader.SHADER_TYPE_FRAGMENT, fragmentProgram); - ShaderProgram shaderProgram = new GLSLShaderProgram(); - shaderProgram.setShaders(shaders); - - a.setShaderProgram(shaderProgram); - a.setMaterial(m); - return a; - } - private Canvas3D createUniverse() { // Get the preferred graphics configuration for the default screen @@ -330,10 +273,11 @@ public class SphereGLSL extends javax.swing.JFrame // Create simple universe with view branch univ = new SimpleUniverse(canvas3d); - BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0); + //BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0); // Add a ShaderErrorListener univ.addShaderErrorListener(new ShaderErrorListener() { + @Override public void errorOccurred(ShaderError error) { error.printVerbose(); @@ -399,6 +343,7 @@ public class SphereGLSL extends javax.swing.JFrame System.setProperty("sun.awt.noerasebackground", "true"); System.setProperty("j3d.rend", "jogl2es2"); java.awt.EventQueue.invokeLater(new Runnable() { + @Override public void run() { SphereGLSL sphereGLSL = new SphereGLSL(); diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/VertexAttrTestGLSL.java b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/VertexAttrTestGLSL.java index 96bc0c9..f80ac11 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/VertexAttrTestGLSL.java +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/VertexAttrTestGLSL.java @@ -1,45 +1,23 @@ /* - * $RCSfile$ + * Copyright (c) 2016 JogAmp Community. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). * - * - Redistribution of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * - 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. - * - * You acknowledge that this software is not designed, licensed or - * intended for use in the design, construction, operation or - * maintenance of any nuclear facility. - * - * $Revision$ - * $Date$ - * $State$ */ package org.jdesktop.j3d.examples.gl2es2pipeline; @@ -122,6 +100,7 @@ public class VertexAttrTestGLSL extends javax.swing.JFrame // Add a ShaderErrorListener univ.addShaderErrorListener(new ShaderErrorListener() { + @Override public void errorOccurred(ShaderError error) { error.printVerbose(); @@ -272,6 +251,7 @@ public class VertexAttrTestGLSL extends javax.swing.JFrame setTitle("VertexAttrTestGLSL"); addWindowListener(new java.awt.event.WindowAdapter() { + @Override public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); @@ -329,6 +309,7 @@ public class VertexAttrTestGLSL extends javax.swing.JFrame createButton.setText("Create Geometry"); createButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { createButtonActionPerformed(evt); @@ -341,6 +322,7 @@ public class VertexAttrTestGLSL extends javax.swing.JFrame destroyButton.setText("Destroy Geometry"); destroyButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { destroyButtonActionPerformed(evt); @@ -370,6 +352,7 @@ public class VertexAttrTestGLSL extends javax.swing.JFrame fileMenu.setText("File"); exitMenuItem.setText("Exit"); exitMenuItem.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { exitMenuItemActionPerformed(evt); @@ -404,13 +387,13 @@ public class VertexAttrTestGLSL extends javax.swing.JFrame } }//GEN-LAST:event_createButtonActionPerformed - private void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) + private static void exitMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed System.exit(0); }//GEN-LAST:event_exitMenuItemActionPerformed /** Exit the Application */ - private void exitForm(java.awt.event.WindowEvent evt) + private static void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm System.exit(0); }//GEN-LAST:event_exitForm @@ -423,6 +406,7 @@ public class VertexAttrTestGLSL extends javax.swing.JFrame System.setProperty("sun.awt.noerasebackground", "true"); System.setProperty("j3d.rend","jogl2es2"); java.awt.EventQueue.invokeLater(new Runnable() { + @Override public void run() { new VertexAttrTestGLSL().setVisible(true); diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/dimple.vert b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/dimple.vert index 9b06148..ebbfdc9 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/dimple.vert +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/dimple.vert @@ -18,7 +18,6 @@ uniform mat4 glModelViewMatrix; uniform mat4 glModelViewProjectionMatrix; uniform mat3 glNormalMatrix; -uniform vec4 glFrontMaterialdiffuse; uniform int ignoreVertexColors; // GL2ES2: new output varyings, these replace gl_TexCoord[] and gl_FrontColor (along with A and D) @@ -52,7 +51,7 @@ void main(void) //gl_FrontColor = gl_Color; if( ignoreVertexColors != 0) - C = glFrontMaterialdiffuse; + C = vec4(1,1,1,1); else C = glColor; diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/fixed_function_shader.frag b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/fixed_function_shader.frag index bdc0fe0..d6f5e96 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/fixed_function_shader.frag +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/fixed_function_shader.frag @@ -7,12 +7,16 @@ uniform int alphaTestEnabled; uniform int alphaTestFunction; uniform float alphaTestValue; -uniform int fogEnabled; -uniform vec4 expColor; -uniform float expDensity; -uniform vec4 linearColor; -uniform float linearStart; -uniform float linearEnd; +struct fogData +{ + int fogEnabled = -1; + vec3 expColor = new Vector3f(); + float expDensity; + vec3 linearColor = new Vector3f(); + float linearStart; + float linearEnd; +}; +uniform fogData fogData; //End of FFP inputs in vec2 glTexCoord0; @@ -85,7 +89,7 @@ void main( void ) color.rgb = albedo * (diffuse + emissive) + spec; color.a = C.a * baseMap.a; - if(fogEnabled == 1) + if(fogData.fogEnabled == 1) { //distance float dist = 0.0; @@ -94,21 +98,21 @@ void main( void ) //compute distance used in fog equations dist = length(ViewDir); - if(linearEnd > 0.0)//linear fog + if(fogData.linearEnd > 0.0)//linear fog { - fogFactor = (linearEnd - dist)/(linearEnd - linearStart); + fogFactor = (fogData.linearEnd - dist)/(fogData.linearEnd - fogData.linearStart); fogFactor = clamp( fogFactor, 0.0, 1.0 ); //if you inverse color in glsl mix function you have to put 1.0 - fogFactor - color = mix(linearColor, color, fogFactor); + color = mix(fogData.linearColor, color, fogFactor); } - else if( expDensity > 0.0)// exponential fog + else if( fogData.expDensity > 0.0)// exponential fog { - fogFactor = 1.0 /exp(dist * expDensity); + fogFactor = 1.0 /exp(dist * fogData.expDensity); fogFactor = clamp( fogFactor, 0.0, 1.0 ); // mix function fogColor-(1-fogFactor) + lightColor-fogFactor - color = mix(expColor, color, fogFactor); + color = mix(fogData.expColor, color, fogFactor); } } diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/fixed_function_shader.vert b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/fixed_function_shader.vert index 184620e..091e33b 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/fixed_function_shader.vert +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/fixed_function_shader.vert @@ -18,17 +18,36 @@ uniform mat4 glModelMatrix; //uniform mat3 glNormalMatrix; -//uniform vec4 glFrontMaterialambient; -uniform vec4 glFrontMaterialdiffuse; -uniform vec4 glFrontMaterialemission; -uniform vec3 glFrontMaterialspecular; -uniform float glFrontMaterialshininess; + uniform int ignoreVertexColors; uniform vec4 glLightModelambient; -uniform vec4 glLightSource0position; -uniform vec4 glLightSource0diffuse; +struct material +{ + int lightEnabled; + vec4 ambient; + vec4 diffuse; + vec4 emission;// note vec4 extra 1.0 sent through for ease + vec3 specular; + float shininess; +}; +uniform material glFrontMaterial; + +struct lightSource +{ + int enabled; + vec4 position; + vec4 diffuse; + vec4 specular; + float constantAttenuation, linearAttenuation, quadraticAttenuation; + float spotCutoff, spotExponent; + vec3 spotDirection; +}; + +uniform int numberOfLights; +const int maxLights = 1; +uniform lightSource glLightSource[maxLights]; uniform mat4 textureTransform; @@ -37,15 +56,17 @@ uniform mat4 textureTransform; //uniform float alphaTestValue; -//uniform int fogEnabled; -//uniform vec4 expColor; -//uniform float expDensity; -//uniform vec4 linearColor; -//uniform float linearStart; -//uniform float linearEnd; + // struct fogData + // { + // int fogEnabled = -1; + // vec3 expColor = new Vector3f(); + // float expDensity; + // vec3 linearColor = new Vector3f(); + // float linearStart; + // float linearEnd; + // }; + // uniform fogData fogData; -//End of FFP inputs -//The line above in not optional for parsing reasons //Fixed function pipeline pre-calculated values not available //vec3 halfVector = normalize(vec3(gl_LightSource[0].halfVector)); @@ -96,8 +117,8 @@ out float shininess; void main( void ) { - mat4 glModelViewMatrix = glViewMatrix*glModelMatrix; - gl_Position = glProjectionMatrix*glModelViewMatrix * glVertex;//glModelViewProjectionMatrix * glVertex; + mat4 glModelViewMatrix = glViewMatrix * glModelMatrix; + gl_Position = glProjectionMatrix * glModelViewMatrix * glVertex;//glModelViewProjectionMatrix * glVertex; glTexCoord0 = (textureTransform * vec4(glMultiTexCoord0,0,1)).st; @@ -107,17 +128,17 @@ void main( void ) vec3 v = vec3(glModelViewMatrix * glVertex); ViewDir = -v.xyz; - LightDir = glLightSource0position.xyz; + LightDir = glLightSource[0].position.xyz; A = glLightModelambient; if( ignoreVertexColors != 0) - C = glFrontMaterialdiffuse; // objectColor should be used if it is no lighting + C = vec4(1,1,1,1);//glFrontMaterialdiffuse; // objectColor should be used if it is no lighting else C = glColor; - D = glLightSource0diffuse * glFrontMaterialdiffuse; + D = glLightSource[0].diffuse * glFrontMaterial.diffuse; - emissive = glFrontMaterialemission.rgb; - specular = glFrontMaterialspecular; - shininess = glFrontMaterialshininess; + emissive = glFrontMaterial.emission.rgb; + specular = glFrontMaterial.specular; + shininess = glFrontMaterial.shininess; } diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/gouraud.vert b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/gouraud.vert index 81d9c95..771afce 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/gouraud.vert +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/gouraud.vert @@ -54,16 +54,35 @@ uniform mat4 glModelViewMatrix; uniform mat4 glModelViewProjectionMatrix; uniform mat3 glNormalMatrix; -uniform vec4 glFrontMaterialambient; -uniform vec4 glFrontMaterialdiffuse; -uniform vec4 glFrontMaterialemission; -uniform vec3 glFrontMaterialspecular; -uniform float glFrontMaterialshininess; + uniform vec4 glLightModelambient; -uniform vec4 glLightSource0position; -uniform vec4 glLightSource0diffuse; +struct material +{ + int lightEnabled; + vec4 ambient; + vec4 diffuse; + vec4 emission;// note vec4 extra 1.0 sent through for ease + vec3 specular; + float shininess; +}; +uniform material glFrontMaterial; + +struct lightSource +{ + int enabled; + vec4 position; + vec4 diffuse; + vec4 specular; + float constantAttenuation, linearAttenuation, quadraticAttenuation; + float spotCutoff, spotExponent; + vec3 spotDirection; +}; + +uniform int numberOfLights; +const int maxLights = 1; +uniform lightSource glLightSource[maxLights]; //GL2ES2: varying color data needs to be defined varying vec4 glFrontColor; @@ -76,17 +95,17 @@ void directionalLight0( inout vec3 specular) { // Normalized light direction and half vector - vec3 lightDirection = normalize(vec3(glLightSource0position)); + vec3 lightDirection = normalize(vec3(glLightSource[0].position)); //GL2ES2: half vector must be calculated //vec3 halfVector = normalize(vec3(gl_LightSource[0].halfVector)); //http://stackoverflow.com/questions/3744038/what-is-half-vector-in-modern-glsl vec3 ecPos = vec3(glModelViewMatrix * glVertex); vec3 ecL; - if( glLightSource0position.w == 0.0) - ecL = vec3(glLightSource0position.xyz);// no -ecPos in case of dir lights? + if( glLightSource[0].position.w == 0.0) + ecL = vec3(glLightSource[0].position.xyz);// no -ecPos in case of dir lights? else - ecL = vec3(glLightSource0position.xyz - ecPos); + ecL = vec3(glLightSource[0].position.xyz - ecPos); vec3 L = normalize(ecL.xyz); vec3 V = -ecPos.xyz; vec3 halfVector = normalize(L + V); @@ -102,12 +121,12 @@ void directionalLight0( pf = 0.0; } else { - pf = pow(nDotHV, glFrontMaterialshininess); + pf = pow(nDotHV, glFrontMaterial.shininess); } ambient += glLightModelambient; - diffuse += glLightSource0diffuse * nDotVP; - specular += glFrontMaterialspecular * pf; + diffuse += glLightSource[0].diffuse * nDotVP; + specular += glFrontMaterial.specular * pf; } @@ -125,13 +144,13 @@ void main() directionalLight0(tnorm, amb, diff, spec); //GL2ES2: sceneColor Derived. Ecm + Acm * Acs (Acs is normal glLightModelambient) - vec4 sceneColor = glFrontMaterialemission + glFrontMaterialambient * glLightModelambient; + vec4 sceneColor = glFrontMaterial.emission + glFrontMaterial.ambient * glLightModelambient; // Apply the result of the lighting equation - vec4 outSecondaryColor = vec4(vec3(spec * glFrontMaterialspecular), 1.0); + vec4 outSecondaryColor = vec4(vec3(spec * glFrontMaterial.specular), 1.0); vec4 outColor = vec4(vec3( sceneColor + - amb * glFrontMaterialambient + - diff * glFrontMaterialdiffuse), 1.0); + amb * glFrontMaterial.ambient + + diff * glFrontMaterial.diffuse), 1.0); glFrontColor = outColor; glFrontSecondaryColor = outSecondaryColor; diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/phong.frag b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/phong.frag index 230288a..7cb6388 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/phong.frag +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/phong.frag @@ -48,15 +48,35 @@ // GL2ES2: Java3D built-in uniforms, these are calculated and passsed in if declared here uniform mat4 glModelViewMatrix; - -uniform vec4 glLightSource0position; -uniform vec4 glLightSource0diffuse; + uniform vec4 glLightModelambient; -uniform vec4 glFrontMaterialdiffuse; -uniform float glFrontMaterialshininess; -uniform vec3 glFrontMaterialspecular; +struct material +{ + int lightEnabled; + vec4 ambient; + vec4 diffuse; + vec4 emission; + vec3 specular; + float shininess; +}; +uniform material glFrontMaterial; + +struct lightSource +{ + int enabled; + vec4 position; + vec4 diffuse; + vec4 specular; + float constantAttenuation, linearAttenuation, quadraticAttenuation; + float spotCutoff, spotExponent; + vec3 spotDirection; +}; + +uniform int numberOfLights; +const int maxLights = 1; +uniform lightSource glLightSource[maxLights]; varying vec3 worldPos; @@ -65,7 +85,7 @@ varying vec4 sceneColor; void directionalLight0(in vec3 normal, inout vec4 ambient, inout vec4 diffuse, inout vec3 specular) { // Normalized light direction and half vector - vec3 lightDirection = normalize(vec3(glLightSource0position)); + vec3 lightDirection = normalize(vec3(glLightSource[0].position)); //GL2ES2: half vector must be calculated @@ -73,10 +93,10 @@ void directionalLight0(in vec3 normal, inout vec4 ambient, inout vec4 diffuse, //http://stackoverflow.com/questions/3744038/what-is-half-vector-in-modern-glsl vec3 ecPos = vec3(glModelViewMatrix * vec4(worldPos,1.0)); vec3 ecL; - if( glLightSource0position.w == 0.0) - ecL = vec3(glLightSource0position.xyz);// no -ecPos in case of dir lights? + if( glLightSource[0].position.w == 0.0) + ecL = vec3(glLightSource[0].position.xyz);// no -ecPos in case of dir lights? else - ecL = vec3(glLightSource0position.xyz - ecPos); + ecL = vec3(glLightSource[0].position.xyz - ecPos); vec3 L = normalize(ecL.xyz); vec3 V = -ecPos.xyz; vec3 halfVector = normalize(L + V); @@ -93,17 +113,17 @@ void directionalLight0(in vec3 normal, inout vec4 ambient, inout vec4 diffuse, pf = 0.0; } else { - pf = pow(nDotHV, glFrontMaterialshininess); + pf = pow(nDotHV, glFrontMaterial.shininess); } // GL2ES2: ambient is part of light model //ambient += gl_LightSource[0].ambient; ambient += glLightModelambient; - diffuse += glLightSource0diffuse * nDotVP; + diffuse += glLightSource[0].diffuse * nDotVP; // GL2ES2: specular is part of material //specular += gl_LightSource[0].specular * pf; - specular += glFrontMaterialspecular * pf; + specular += glFrontMaterial.specular * pf; } @@ -123,12 +143,12 @@ void main() // Apply the result of the lighting equation - vec4 secondaryColor = vec4(spec * glFrontMaterialspecular, 1.0); + vec4 secondaryColor = vec4(spec * glFrontMaterial.specular, 1.0); // GL2ES2: change to calc'ed sceneColor //vec4 color = vec4(vec3(gl_FrontLightModelProduct.sceneColor + vec4 color = vec4(vec3(sceneColor + amb * glLightModelambient + - diff * glFrontMaterialdiffuse), 1.0); + diff * glFrontMaterial.diffuse), 1.0); gl_FragColor = color + secondaryColor; } diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/phong.vert b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/phong.vert index 6d3aeb2..780c2bd 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/phong.vert +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/phong.vert @@ -56,8 +56,16 @@ uniform mat3 glNormalMatrix; uniform vec4 glLightModelambient; -uniform vec4 glFrontMaterialambient; -uniform vec4 glFrontMaterialemission; +struct material +{ + int lightEnabled; + vec4 ambient; + vec4 diffuse; + vec4 emission; + vec3 specular; + float shininess; +}; +uniform material glFrontMaterial; // Per-pixel normal (output to fragment shader) varying vec3 Normal; @@ -70,7 +78,7 @@ void main() { //GL2ES2: sceneColor Derived. Ecm + Acm * Acs (Acs is normal glLightModelambient) - sceneColor = glFrontMaterialemission + glFrontMaterialambient * glLightModelambient; + sceneColor = glFrontMaterial.emission + glFrontMaterial.ambient * glLightModelambient; Normal = normalize(vec3(glNormalMatrix * glNormal)); diff --git a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/simple.vert b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/simple.vert index 93a61bf..4c5f3c9 100644 --- a/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/simple.vert +++ b/src/classes/org/jdesktop/j3d/examples/gl2es2pipeline/simple.vert @@ -55,16 +55,34 @@ uniform mat4 glModelViewMatrix; uniform mat4 glModelViewProjectionMatrix; uniform mat3 glNormalMatrix; -uniform vec4 glFrontMaterialambient; -uniform vec4 glFrontMaterialdiffuse; -uniform vec4 glFrontMaterialemission; -uniform vec3 glFrontMaterialspecular; -uniform float glFrontMaterialshininess; - uniform vec4 glLightModelambient; -uniform vec4 glLightSource0position; -uniform vec4 glLightSource0diffuse; + +struct material +{ + int lightEnabled; + vec4 ambient; + vec4 diffuse; + vec4 emission; + vec3 specular; + float shininess; +}; +uniform material glFrontMaterial; + +struct lightSource +{ + int enabled; + vec4 position; + vec4 diffuse; + vec4 specular; + float constantAttenuation, linearAttenuation, quadraticAttenuation; + float spotCutoff, spotExponent; + vec3 spotDirection; +}; + +uniform int numberOfLights; +const int maxLights = 1; +uniform lightSource glLightSource[maxLights]; //GL2ES2: varying color data needs to be defined varying vec4 glFrontColor; @@ -81,12 +99,12 @@ void directionalLight( // (shouldn't they be pre-normalized?!) //GL2ES2 notice not using the i parameter but hard coded to 0 - vec3 lightDirection = normalize(vec3(glLightSource0position)); + vec3 lightDirection = normalize(vec3(glLightSource[0].position)); //GL2ES2: half vector must be calculated //vec3 halfVector = normalize(vec3(gl_LightSource[0].halfVector)); vec3 worldPos = vec3(glModelViewMatrix * glVertex); - vec3 L = normalize(glLightSource0position.xyz - worldPos); + vec3 L = normalize(glLightSource[0].position.xyz - worldPos); vec3 V = vec3(0,0,1);//eye position vec3 halfVector = (L + V); @@ -103,12 +121,12 @@ void directionalLight( pf = 0.0; } else { - pf = pow(nDotHV, glFrontMaterialshininess); + pf = pow(nDotHV, glFrontMaterial.shininess); } ambient += glLightModelambient; - diffuse += glLightSource0diffuse * nDotVP; - specular += glFrontMaterialspecular * pf; + diffuse += glLightSource[0].diffuse * nDotVP; + specular += glFrontMaterial.specular * pf; } //GL2ES2: only a single light for now @@ -136,13 +154,13 @@ void main() } //GL2ES2: sceneColor Derived. Ecm + Acm * Acs (Acs is normal glLightModelambient) - vec4 sceneColor = glFrontMaterialemission + glFrontMaterialambient * glLightModelambient; + vec4 sceneColor = glFrontMaterial.emission + glFrontMaterial.ambient * glLightModelambient; // Apply the result of the lighting equation - vec4 outSecondaryColor = vec4(vec3(spec * glFrontMaterialspecular), 1.0); + vec4 outSecondaryColor = vec4(vec3(spec * glFrontMaterial.specular), 1.0); vec3 color0 = vec3(sceneColor + amb * glLightModelambient + - diff * glFrontMaterialdiffuse); + diff * glFrontMaterial.diffuse); // Generate a pseudo-random noise pattern vec3 xyz = clamp((outPosition.xyz + 1.0) * 0.5, 0.0, 1.0); -- cgit v1.2.3