From 5d94f5c240262c10504cad46ffe04c65bf7d8116 Mon Sep 17 00:00:00 2001 From: Kenneth Russel Date: Thu, 29 May 2008 05:52:58 +0000 Subject: Moved ES1 and ES2 demos into new packages in preparation for conversion to platform-independent APIs git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/jogl-demos/trunk@229 3298f667-5e0e-4b4a-8ed4-a3559d26a5f4 --- make/build.xml | 6 +- src/demos/apx/es1/RedSquare.java | 165 ---------------------------------- src/demos/apx/es2/Basic.java | 147 ------------------------------ src/demos/apx/es2/Shader.java | 189 --------------------------------------- src/demos/es1/RedSquare.java | 165 ++++++++++++++++++++++++++++++++++ src/demos/es2/Basic.java | 147 ++++++++++++++++++++++++++++++ src/demos/es2/Shader.java | 189 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 504 insertions(+), 504 deletions(-) delete mode 100755 src/demos/apx/es1/RedSquare.java delete mode 100755 src/demos/apx/es2/Basic.java delete mode 100755 src/demos/apx/es2/Shader.java create mode 100755 src/demos/es1/RedSquare.java create mode 100755 src/demos/es2/Basic.java create mode 100755 src/demos/es2/Shader.java diff --git a/make/build.xml b/make/build.xml index 0b66f11..8306309 100644 --- a/make/build.xml +++ b/make/build.xml @@ -98,7 +98,7 @@ - + @@ -147,7 +147,7 @@ - @@ -164,7 +164,7 @@ - diff --git a/src/demos/apx/es1/RedSquare.java b/src/demos/apx/es1/RedSquare.java deleted file mode 100755 index 3b2e944..0000000 --- a/src/demos/apx/es1/RedSquare.java +++ /dev/null @@ -1,165 +0,0 @@ -package demos.apx.es1; - -import java.nio.*; -import javax.media.opengl.*; -import javax.media.opengl.glu.*; -import com.sun.opengl.impl.egl.*; -import com.sun.opengl.util.*; - -public class RedSquare { - public static void main(String[] args) { - System.out.println("Basic.main()"); - try { - System.out.println("GLDrawableFactory.getFactory()"); - EGLDrawableFactory factory = (EGLDrawableFactory) GLDrawableFactory.getFactory(); - - /* - - System.out.println("Testing getDirectBufferAddress"); - factory.testGetDirectBufferAddress(); - - */ - - System.out.println("EGLDrawableFactory.initialize()"); - factory.initialize(); - System.out.println("factory.createExternalGLContext()"); - GLContext context = factory.createExternalGLContext(); - // OpenGL context is current at this point - - // The following is a no-op that is only needed to get the - // Java-level GLContext object set up in thread-local storage - System.out.println("context.makeCurrent()"); - context.makeCurrent(); - context.setGL(new DebugGL(context.getGL())); - - GL gl = context.getGL(); - GLU glu = new GLU(); - - //---------------------------------------------------------------------- - // Code for GLEventListener.init() - // - - System.out.println("Entering initialization"); - - // Size OpenGL to Video Surface - int width = 800; - int height = 480; - System.out.println("calling glViewport()"); - // gl.glViewport(0, 0, width, height); - System.out.println("calling glMatrixMode()"); - gl.glMatrixMode(GL.GL_PROJECTION); - System.out.println("calling glLoadIdentity()"); - gl.glLoadIdentity(); - System.out.println("calling gluPerspective()"); - glu.gluPerspective(45.0f, (float)width / (float)height, 1.0f, 100.0f); - System.out.println("calling glMatrixMode()"); - gl.glMatrixMode(GL.GL_MODELVIEW); - - System.out.println("Intialized matrices"); - - // Allocate vertex arrays - // FloatBuffer colors = BufferUtil.newFloatBuffer(12); - // FloatBuffer vertices = BufferUtil.newFloatBuffer(12); - // FloatBuffer normals = BufferUtil.newFloatBuffer(12); - // FloatBuffer colors = FloatBuffer.wrap(new float[12]); - // FloatBuffer vertices = FloatBuffer.wrap(new float[12]); - // FloatBuffer normals = FloatBuffer.wrap(new float[12]); - // Fill them up - // colors.put(0, 1); colors.put( 1, 0); colors.put( 2, 0); - // colors.put(3, 1); colors.put( 4, 0); colors.put( 5, 0); - // colors.put(6, 1); colors.put( 7, 0); colors.put( 8, 0); - // colors.put(9, 1); colors.put(10, 0); colors.put(11, 0); - // vertices.put(0, -2); vertices.put( 1, 2); vertices.put( 2, 0); - // vertices.put(3, 2); vertices.put( 4, 2); vertices.put( 5, 0); - // vertices.put(6, -2); vertices.put( 7, -2); vertices.put( 8, 0); - // vertices.put(9, 2); vertices.put(10, -2); vertices.put(11, 0); - // normals.put(0, 0); normals.put( 1, 0); normals.put( 2, 1); - // normals.put(3, 0); normals.put( 4, 0); normals.put( 5, 1); - // normals.put(6, 0); normals.put( 7, 0); normals.put( 8, 1); - // normals.put(9, 0); normals.put(10, 0); normals.put(11, 1); - - // FloatBuffer data = FloatBuffer.wrap(new float[24]); - FloatBuffer data = BufferUtil.newFloatBuffer(12 + 16); - // Vertices first - data.put(0, -2); data.put( 1, 2); data.put( 2, 0); - data.put(3, 2); data.put( 4, 2); data.put( 5, 0); - data.put(6, -2); data.put( 7, -2); data.put( 8, 0); - data.put(9, 2); data.put(10, -2); data.put(11, 0); - // Now colors - data.put(12, 1); data.put(13, 0); data.put(14, 0); data.put(15, 0); - data.put(16, 1); data.put(17, 0); data.put(18, 0); data.put(19, 0); - data.put(20, 1); data.put(21, 0); data.put(22, 0); data.put(23, 0); - data.put(24, 1); data.put(25, 0); data.put(26, 0); data.put(27, 0); - - System.out.println("Set up buffers"); - - int[] vbo = new int[1]; - gl.glGenBuffers(1, vbo, 0); - gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo[0]); - gl.glBufferData(GL.GL_ARRAY_BUFFER, (12 + 16) * BufferUtil.SIZEOF_FLOAT, data, GL.GL_STATIC_DRAW); - gl.glVertexPointer(3, GL.GL_FLOAT, 0, 0); - // gl.glColorPointer(3, GL.GL_FLOAT, 0, 12 * BufferUtil.SIZEOF_FLOAT); - gl.glEnableClientState(GL.GL_VERTEX_ARRAY); - // gl.glEnableClientState(GL.GL_COLOR_ARRAY); - // System.out.println("Vertices' address: 0x" + Integer.toHexString(factory.getDirectBufferAddress(vertices))); - // System.out.println("Expected: 0x" + Integer.toHexString(vertices.arrayOffset)); - // System.out.println("Colors' address: 0x" + Integer.toHexString(factory.getDirectBufferAddress(colors))); - // System.out.println("Expected: 0x" + Integer.toHexString(colors.arrayOffset)); - // gl.glNormalPointer(GL.GL_FLOAT, 0, normals); - // gl.glEnableClientState(GL.GL_NORMAL_ARRAY); - // System.out.println("Normals' address: 0x" + Integer.toHexString(factory.getDirectBufferAddress(normals))); - // System.out.println("Expected: 0x" + Integer.toHexString(normals.arrayOffset)); - // System.out.println("Set up vertex, color and normal pointers"); - - System.out.println("Set up vertex and color pointers"); - - // OpenGL Render Settings - gl.glClearColor(0, 0, 0, 1); - gl.glClearDepthf(1.0f); - gl.glEnable(GL.GL_DEPTH_TEST); - - System.out.println("Set up clear color and clear depth"); - - //---------------------------------------------------------------------- - // Code for GLEventListener.display() - // - - long startTime = System.currentTimeMillis(); - long curTime; - while ((System.currentTimeMillis() - startTime) < 10000) { - gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); - - System.out.println("Cleared buffers"); - - // Set location in front of camera - gl.glLoadIdentity(); - gl.glTranslatef(0, 0, -10); - - System.out.println("Translated"); - - // Draw a square - gl.glDrawArrays(GL.GL_TRIANGLE_STRIP, 0, 4); - - System.out.println("Drew arrays"); - - // FIXME -- need an external GLDrawable - factory.swapBuffers(); - - System.out.println("Swapped buffers"); - - // Process events - factory.processEvents(); - - // Sleep a bit - try { - Thread.sleep(100); - } catch (InterruptedException e) { - } - } - } catch (GLException e) { - e.printStackTrace(); - } - - System.exit(0); - } -} diff --git a/src/demos/apx/es2/Basic.java b/src/demos/apx/es2/Basic.java deleted file mode 100755 index 29b6581..0000000 --- a/src/demos/apx/es2/Basic.java +++ /dev/null @@ -1,147 +0,0 @@ -package demos.apx; - -import java.nio.*; -import javax.media.opengl.*; -import com.sun.opengl.impl.egl.*; - -public class Basic { - public static void main(String[] args) { - System.out.println("Basic.main()"); - try { - System.out.println("GLDrawableFactory.getFactory()"); - EGLDrawableFactory factory = (EGLDrawableFactory) GLDrawableFactory.getFactory(); - - System.out.println("EGLDrawableFactory.initialize()"); - factory.initialize(); - System.out.println("factory.createExternalGLContext()"); - GLContext context = factory.createExternalGLContext(); - // OpenGL context is current at this point - - // The following is a no-op that is only needed to get the - // Java-level GLContext object set up in thread-local storage - System.out.println("context.makeCurrent()"); - context.makeCurrent(); - context.setGL(new DebugGL(context.getGL())); - - GL gl = context.getGL(); - - Shader shader = Shader.createBinaryProgram(data_vert, GL.GL_NVIDIA_PLATFORM_BINARY_NV, - data_frag, GL.GL_NVIDIA_PLATFORM_BINARY_NV); - shader.setAttribByName("pos_attr", 2, GL.GL_FLOAT, false, 0, FloatBuffer.wrap(vert)); - shader.setAttribByName("col_attr", 4, GL.GL_FLOAT, false, 0, FloatBuffer.wrap(col)); - - float angle = 0; - - long startTime = System.currentTimeMillis(); - long curTime = 0; - - do { - angle += 0.15f; - gl.glClear(GL.GL_COLOR_BUFFER_BIT); - // we only need to pass cos and sin to the shader. - float rad = (float) Math.toRadians(angle); - gl.glUniform2f(shader.getUniformLocation("rot"), - (float) Math.cos(rad), - (float) Math.sin(rad)); - - gl.glDrawElements(GL.GL_TRIANGLES, 3, GL.GL_UNSIGNED_BYTE, indices); - - // FIXME -- need an external GLDrawable - factory.swapBuffers(); - - // Process events - factory.processEvents(); - - curTime = System.currentTimeMillis(); - } while ((curTime - startTime) < 15000); - } catch (GLException e) { - e.printStackTrace(); - } - - System.exit(0); - } - - static ByteBuffer indices = ByteBuffer.wrap(new byte[] { 0, 1, 2 }); - static final float ROOT_3_OVER_2 = 0.8660254f; - static final float ROOT_3_OVER_6 = (ROOT_3_OVER_2/3.0f); - static float[] vert = { 0.5f, -ROOT_3_OVER_6, - -0.5f, -ROOT_3_OVER_6, - 0.0f, ROOT_3_OVER_2 - ROOT_3_OVER_6 }; - static float[] col = { 1.0f, 0.0f, 0.0f, 1.0f, - 0.0f, 1.0f, 0.0f, 1.0f, - 0.0f, 0.0f, 1.0f, 1.0f}; - - static byte[] data_vert = { - (byte) 0x6a, (byte) 0xbe, (byte) 0x3a, (byte) 0x95, (byte) 0x1f, (byte) 0x6d, (byte) 0x83, (byte) 0x26, (byte) 0x05, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x05, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x11, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x49, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x1e, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x51, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x18, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x57, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x05, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x5b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x5b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x1c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x62, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x64, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x74, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x58, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x58, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6d, (byte) 0x61, (byte) 0x6e, (byte) 0x46, (byte) 0x49, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x63, (byte) 0x6f, (byte) 0x6c, (byte) 0x5f, (byte) 0x61, (byte) 0x74, (byte) 0x74, (byte) 0x72, (byte) 0x00, (byte) 0x70, (byte) 0x6f, (byte) 0x73, - (byte) 0x5f, (byte) 0x61, (byte) 0x74, (byte) 0x74, (byte) 0x72, (byte) 0x00, (byte) 0x63, (byte) 0x6f, (byte) 0x6c, (byte) 0x5f, (byte) 0x76, (byte) 0x61, (byte) 0x72, (byte) 0x00, (byte) 0x72, (byte) 0x6f, - (byte) 0x74, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x52, (byte) 0x8b, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x09, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x8b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x1a, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x50, (byte) 0x8b, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x04, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x81, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x05, (byte) 0x42, (byte) 0x14, (byte) 0x00, (byte) 0x06, (byte) 0x22, (byte) 0x6c, (byte) 0x9c, (byte) 0x1f, (byte) 0x40, (byte) 0x0d, (byte) 0x01, (byte) 0x40, (byte) 0x00, - (byte) 0x83, (byte) 0xc0, (byte) 0x06, (byte) 0x81, (byte) 0x9c, (byte) 0xff, (byte) 0x41, (byte) 0x60, (byte) 0x6c, (byte) 0x1c, (byte) 0x00, (byte) 0x00, (byte) 0x2a, (byte) 0x00, (byte) 0x80, (byte) 0x00, - (byte) 0xc3, (byte) 0x00, (byte) 0x04, (byte) 0x81, (byte) 0xfc, (byte) 0x9f, (byte) 0x41, (byte) 0x60, (byte) 0x6c, (byte) 0x9c, (byte) 0x1f, (byte) 0x40, (byte) 0x00, (byte) 0x10, (byte) 0x40, (byte) 0x00, - (byte) 0x83, (byte) 0xc0, (byte) 0x86, (byte) 0x01, (byte) 0x80, (byte) 0x5f, (byte) 0x40, (byte) 0x60, (byte) 0x6c, (byte) 0x9c, (byte) 0x1f, (byte) 0x40, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, - (byte) 0xc0, (byte) 0x40, (byte) 0x15, (byte) 0x01, (byte) 0x80, (byte) 0x9f, (byte) 0x20, (byte) 0x00, (byte) 0x6c, (byte) 0x9c, (byte) 0x1f, (byte) 0x40, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, - (byte) 0xea, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x81, (byte) 0x1f, (byte) 0x21, (byte) 0xa0 - }; - - static byte[] data_frag = { - (byte) 0x62, (byte) 0x45, (byte) 0xed, (byte) 0x02, (byte) 0x2f, (byte) 0x6d, (byte) 0x83, (byte) 0x26, (byte) 0x05, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x05, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x11, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x49, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x4b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x4b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x14, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x06, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0e, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x17, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x58, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0f, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x59, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x4c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x54, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x54, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x14, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6d, (byte) 0x61, (byte) 0x6e, (byte) 0x46, (byte) 0x49, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x63, (byte) 0x6f, (byte) 0x6c, (byte) 0x5f, (byte) 0x76, (byte) 0x61, (byte) 0x72, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x84, (byte) 0x95, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf1, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x15, (byte) 0x20, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x41, (byte) 0x52, (byte) 0x32, (byte) 0x30, (byte) 0x2d, (byte) 0x42, (byte) 0x49, (byte) 0x4e, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x01, (byte) 0x00, (byte) 0x41, (byte) 0x25, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, - (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x26, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x04, (byte) 0x26, (byte) 0xba, (byte) 0x51, (byte) 0x4e, (byte) 0x10, - (byte) 0x04, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x27, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x28, - (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x06, (byte) 0x28, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x29, - (byte) 0x05, (byte) 0x00, (byte) 0x02, (byte) 0x00 - }; -} diff --git a/src/demos/apx/es2/Shader.java b/src/demos/apx/es2/Shader.java deleted file mode 100755 index 3fde283..0000000 --- a/src/demos/apx/es2/Shader.java +++ /dev/null @@ -1,189 +0,0 @@ -package demos.apx; - -import java.io.UnsupportedEncodingException; -import java.nio.*; -import javax.media.opengl.*; -import javax.media.opengl.glu.*; - -public class Shader { - private int program; - private int vertexShader; - private int fragmentShader; - - private Shader() { - } - - public static Shader createBinaryProgram(byte[] vertexShaderCode, int vertexShaderFormat, - byte[] fragmentShaderCode, int fragmentShaderFormat) throws GLException { - Shader shader = new Shader(); - shader.createBinaryProgramImpl(vertexShaderCode, vertexShaderFormat, - fragmentShaderCode, fragmentShaderFormat); - shader.useProgram(); - return shader; - } - - public void setAttribByName(String name, int size, int type, boolean normalized, int stride, Buffer pointer) { - GL gl = GLU.getCurrentGL(); - int index = gl.glGetAttribLocation(program, name); - gl.glVertexAttribPointer(index, size, type, normalized, stride, pointer); - gl.glEnableVertexAttribArray(index); - // FIXME - // trackAttribLocation(index); - } - - public int getUniformLocation(String name) { - GL gl = GLU.getCurrentGL(); - return gl.glGetUniformLocation(program, name); - } - - public void useProgram() { - GL gl = GLU.getCurrentGL(); - gl.glUseProgram(program); - } - - //---------------------------------------------------------------------- - // Internals only below this point - // - - private void createBinaryProgramImpl(byte[] vertexShaderCode, int vertexShaderFormat, - byte[] fragmentShaderCode, int fragmentShaderFormat) throws GLException { - allocProgram(); - int[] numBinaryFormats = new int[1]; - GL gl = GLU.getCurrentGL(); - gl.glGetIntegerv(GL.GL_NUM_SHADER_BINARY_FORMATS, numBinaryFormats, 0); - if (numBinaryFormats[0] > 0) { - int[] binaryFormats = new int[numBinaryFormats[0]]; - gl.glGetIntegerv(GL.GL_SHADER_BINARY_FORMATS, binaryFormats, 0); - boolean gotVertexFormat = false; - boolean gotFragmentFormat = false; - - for (int i = 0; i < binaryFormats.length && (!gotVertexFormat || !gotFragmentFormat); i++) { - if (!gotVertexFormat) { - gotVertexFormat = (binaryFormats[i] == vertexShaderFormat); - } - if (!gotFragmentFormat) { - gotFragmentFormat = (binaryFormats[i] == fragmentShaderFormat); - } - } - - if (!gotVertexFormat) { - throw new RuntimeException("Binary vertex program format 0x" + Integer.toHexString(vertexShaderFormat) + - " not available"); - } - - if (!gotFragmentFormat) { - throw new RuntimeException("Binary fragment program format 0x" + Integer.toHexString(fragmentShaderFormat) + - " not available"); - } - } - // Set up the shaders - setupBinaryShader(vertexShader, vertexShaderCode, vertexShaderFormat); - setupBinaryShader(fragmentShader, fragmentShaderCode, fragmentShaderFormat); - - // Set up the shader program - gl.glLinkProgram(program); - if (!glslLog(program, GL.GL_LINK_STATUS, "link")) { - throw new GLException("Error linking program"); - } - } - - private void allocProgram() { - GL gl = GLU.getCurrentGL(); - vertexShader = gl.glCreateShader(GL.GL_VERTEX_SHADER); - fragmentShader = gl.glCreateShader(GL.GL_FRAGMENT_SHADER); - program = gl.glCreateProgram(); - gl.glAttachShader(program, vertexShader); - gl.glAttachShader(program, fragmentShader); - } - - private void setupBinaryShader(int shader, - byte[] shaderData, - int binaryFormat) { - ByteBuffer buf = ByteBuffer.wrap(shaderData); - int[] tmp = new int[1]; - tmp[0] = shader; - GL gl = GLU.getCurrentGL(); - gl.glShaderBinary(1, tmp, 0, binaryFormat, buf, shaderData.length); - } - - private boolean glslLog(int obj, int checkCompile, String op) { - boolean success = false; - - GL gl = GLU.getCurrentGL(); - - // log output. - String str = null; - if (checkCompile == GL.GL_COMPILE_STATUS) { - int[] len = new int[1]; - gl.glGetShaderiv(obj, GL.GL_INFO_LOG_LENGTH, len, 0); - if (len[0] > 0) { - byte[] buf = new byte[len[0]]; - gl.glGetShaderInfoLog(obj, len[0], null, 0, buf, 0); - try { - str = new String(buf, 0, buf.length, "US-ASCII"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - } - } else { - // LINK or VALIDATE - int[] len = new int[1]; - gl.glGetProgramiv(obj, GL.GL_INFO_LOG_LENGTH, len, 0); - if (len[0] > 0) { - byte[] buf = new byte[len[0]]; - gl.glGetProgramInfoLog(obj, len[0], null, 0, buf, 0); - try { - str = new String(buf, 0, buf.length, "US-ASCII"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - } - } - - if (str != null) { - System.out.println("--- "); - System.out.println(op); - System.out.println(" log ---"); - System.out.println(str); - } - - // check the compile / link status. - if (checkCompile == GL.GL_COMPILE_STATUS) { - int[] status = new int[1]; - - gl.glGetShaderiv(obj, checkCompile, status, 0); - success = (status[0] != 0); - if (!success) { - int[] len = new int[1]; - gl.glGetShaderiv(obj, GL.GL_SHADER_SOURCE_LENGTH, len, 0); - if (len[0] > 0) { - byte[] buf = new byte[len[0]]; - gl.glGetShaderSource(obj, len[0], null, 0, buf, 0); - try { - str = new String(buf, 0, buf.length, "US-ASCII"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - if (str != null) { - System.out.println("--- "); - System.out.println(op); - System.out.println(" code ---"); - System.out.println(str); - } - } - } - } else { // LINK or VALIDATE - int[] status = new int[1]; - gl.glGetProgramiv(obj, checkCompile, status, 0); - success = (status[0] != 0); - } - - if (!success) { - System.out.println("--- "); - System.out.println(op); - System.out.println(" failed"); - } - - return success; - } -} diff --git a/src/demos/es1/RedSquare.java b/src/demos/es1/RedSquare.java new file mode 100755 index 0000000..48ede76 --- /dev/null +++ b/src/demos/es1/RedSquare.java @@ -0,0 +1,165 @@ +package demos.es1; + +import java.nio.*; +import javax.media.opengl.*; +import javax.media.opengl.glu.*; +import com.sun.opengl.impl.egl.*; +import com.sun.opengl.util.*; + +public class RedSquare { + public static void main(String[] args) { + System.out.println("Basic.main()"); + try { + System.out.println("GLDrawableFactory.getFactory()"); + EGLDrawableFactory factory = (EGLDrawableFactory) GLDrawableFactory.getFactory(); + + /* + + System.out.println("Testing getDirectBufferAddress"); + factory.testGetDirectBufferAddress(); + + */ + + System.out.println("EGLDrawableFactory.initialize()"); + factory.initialize(); + System.out.println("factory.createExternalGLContext()"); + GLContext context = factory.createExternalGLContext(); + // OpenGL context is current at this point + + // The following is a no-op that is only needed to get the + // Java-level GLContext object set up in thread-local storage + System.out.println("context.makeCurrent()"); + context.makeCurrent(); + context.setGL(new DebugGL(context.getGL())); + + GL gl = context.getGL(); + GLU glu = new GLU(); + + //---------------------------------------------------------------------- + // Code for GLEventListener.init() + // + + System.out.println("Entering initialization"); + + // Size OpenGL to Video Surface + int width = 800; + int height = 480; + System.out.println("calling glViewport()"); + // gl.glViewport(0, 0, width, height); + System.out.println("calling glMatrixMode()"); + gl.glMatrixMode(GL.GL_PROJECTION); + System.out.println("calling glLoadIdentity()"); + gl.glLoadIdentity(); + System.out.println("calling gluPerspective()"); + glu.gluPerspective(45.0f, (float)width / (float)height, 1.0f, 100.0f); + System.out.println("calling glMatrixMode()"); + gl.glMatrixMode(GL.GL_MODELVIEW); + + System.out.println("Intialized matrices"); + + // Allocate vertex arrays + // FloatBuffer colors = BufferUtil.newFloatBuffer(12); + // FloatBuffer vertices = BufferUtil.newFloatBuffer(12); + // FloatBuffer normals = BufferUtil.newFloatBuffer(12); + // FloatBuffer colors = FloatBuffer.wrap(new float[12]); + // FloatBuffer vertices = FloatBuffer.wrap(new float[12]); + // FloatBuffer normals = FloatBuffer.wrap(new float[12]); + // Fill them up + // colors.put(0, 1); colors.put( 1, 0); colors.put( 2, 0); + // colors.put(3, 1); colors.put( 4, 0); colors.put( 5, 0); + // colors.put(6, 1); colors.put( 7, 0); colors.put( 8, 0); + // colors.put(9, 1); colors.put(10, 0); colors.put(11, 0); + // vertices.put(0, -2); vertices.put( 1, 2); vertices.put( 2, 0); + // vertices.put(3, 2); vertices.put( 4, 2); vertices.put( 5, 0); + // vertices.put(6, -2); vertices.put( 7, -2); vertices.put( 8, 0); + // vertices.put(9, 2); vertices.put(10, -2); vertices.put(11, 0); + // normals.put(0, 0); normals.put( 1, 0); normals.put( 2, 1); + // normals.put(3, 0); normals.put( 4, 0); normals.put( 5, 1); + // normals.put(6, 0); normals.put( 7, 0); normals.put( 8, 1); + // normals.put(9, 0); normals.put(10, 0); normals.put(11, 1); + + // FloatBuffer data = FloatBuffer.wrap(new float[24]); + FloatBuffer data = BufferUtil.newFloatBuffer(12 + 16); + // Vertices first + data.put(0, -2); data.put( 1, 2); data.put( 2, 0); + data.put(3, 2); data.put( 4, 2); data.put( 5, 0); + data.put(6, -2); data.put( 7, -2); data.put( 8, 0); + data.put(9, 2); data.put(10, -2); data.put(11, 0); + // Now colors + data.put(12, 1); data.put(13, 0); data.put(14, 0); data.put(15, 0); + data.put(16, 1); data.put(17, 0); data.put(18, 0); data.put(19, 0); + data.put(20, 1); data.put(21, 0); data.put(22, 0); data.put(23, 0); + data.put(24, 1); data.put(25, 0); data.put(26, 0); data.put(27, 0); + + System.out.println("Set up buffers"); + + int[] vbo = new int[1]; + gl.glGenBuffers(1, vbo, 0); + gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo[0]); + gl.glBufferData(GL.GL_ARRAY_BUFFER, (12 + 16) * BufferUtil.SIZEOF_FLOAT, data, GL.GL_STATIC_DRAW); + gl.glVertexPointer(3, GL.GL_FLOAT, 0, 0); + // gl.glColorPointer(3, GL.GL_FLOAT, 0, 12 * BufferUtil.SIZEOF_FLOAT); + gl.glEnableClientState(GL.GL_VERTEX_ARRAY); + // gl.glEnableClientState(GL.GL_COLOR_ARRAY); + // System.out.println("Vertices' address: 0x" + Integer.toHexString(factory.getDirectBufferAddress(vertices))); + // System.out.println("Expected: 0x" + Integer.toHexString(vertices.arrayOffset)); + // System.out.println("Colors' address: 0x" + Integer.toHexString(factory.getDirectBufferAddress(colors))); + // System.out.println("Expected: 0x" + Integer.toHexString(colors.arrayOffset)); + // gl.glNormalPointer(GL.GL_FLOAT, 0, normals); + // gl.glEnableClientState(GL.GL_NORMAL_ARRAY); + // System.out.println("Normals' address: 0x" + Integer.toHexString(factory.getDirectBufferAddress(normals))); + // System.out.println("Expected: 0x" + Integer.toHexString(normals.arrayOffset)); + // System.out.println("Set up vertex, color and normal pointers"); + + System.out.println("Set up vertex and color pointers"); + + // OpenGL Render Settings + gl.glClearColor(0, 0, 0, 1); + gl.glClearDepthf(1.0f); + gl.glEnable(GL.GL_DEPTH_TEST); + + System.out.println("Set up clear color and clear depth"); + + //---------------------------------------------------------------------- + // Code for GLEventListener.display() + // + + long startTime = System.currentTimeMillis(); + long curTime; + while ((System.currentTimeMillis() - startTime) < 10000) { + gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); + + System.out.println("Cleared buffers"); + + // Set location in front of camera + gl.glLoadIdentity(); + gl.glTranslatef(0, 0, -10); + + System.out.println("Translated"); + + // Draw a square + gl.glDrawArrays(GL.GL_TRIANGLE_STRIP, 0, 4); + + System.out.println("Drew arrays"); + + // FIXME -- need an external GLDrawable + factory.swapBuffers(); + + System.out.println("Swapped buffers"); + + // Process events + factory.processEvents(); + + // Sleep a bit + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + } + } catch (GLException e) { + e.printStackTrace(); + } + + System.exit(0); + } +} diff --git a/src/demos/es2/Basic.java b/src/demos/es2/Basic.java new file mode 100755 index 0000000..d951d3b --- /dev/null +++ b/src/demos/es2/Basic.java @@ -0,0 +1,147 @@ +package demos.es2; + +import java.nio.*; +import javax.media.opengl.*; +import com.sun.opengl.impl.egl.*; + +public class Basic { + public static void main(String[] args) { + System.out.println("Basic.main()"); + try { + System.out.println("GLDrawableFactory.getFactory()"); + EGLDrawableFactory factory = (EGLDrawableFactory) GLDrawableFactory.getFactory(); + + System.out.println("EGLDrawableFactory.initialize()"); + factory.initialize(); + System.out.println("factory.createExternalGLContext()"); + GLContext context = factory.createExternalGLContext(); + // OpenGL context is current at this point + + // The following is a no-op that is only needed to get the + // Java-level GLContext object set up in thread-local storage + System.out.println("context.makeCurrent()"); + context.makeCurrent(); + context.setGL(new DebugGL(context.getGL())); + + GL gl = context.getGL(); + + Shader shader = Shader.createBinaryProgram(data_vert, GL.GL_NVIDIA_PLATFORM_BINARY_NV, + data_frag, GL.GL_NVIDIA_PLATFORM_BINARY_NV); + shader.setAttribByName("pos_attr", 2, GL.GL_FLOAT, false, 0, FloatBuffer.wrap(vert)); + shader.setAttribByName("col_attr", 4, GL.GL_FLOAT, false, 0, FloatBuffer.wrap(col)); + + float angle = 0; + + long startTime = System.currentTimeMillis(); + long curTime = 0; + + do { + angle += 0.15f; + gl.glClear(GL.GL_COLOR_BUFFER_BIT); + // we only need to pass cos and sin to the shader. + float rad = (float) Math.toRadians(angle); + gl.glUniform2f(shader.getUniformLocation("rot"), + (float) Math.cos(rad), + (float) Math.sin(rad)); + + gl.glDrawElements(GL.GL_TRIANGLES, 3, GL.GL_UNSIGNED_BYTE, indices); + + // FIXME -- need an external GLDrawable + factory.swapBuffers(); + + // Process events + factory.processEvents(); + + curTime = System.currentTimeMillis(); + } while ((curTime - startTime) < 15000); + } catch (GLException e) { + e.printStackTrace(); + } + + System.exit(0); + } + + static ByteBuffer indices = ByteBuffer.wrap(new byte[] { 0, 1, 2 }); + static final float ROOT_3_OVER_2 = 0.8660254f; + static final float ROOT_3_OVER_6 = (ROOT_3_OVER_2/3.0f); + static float[] vert = { 0.5f, -ROOT_3_OVER_6, + -0.5f, -ROOT_3_OVER_6, + 0.0f, ROOT_3_OVER_2 - ROOT_3_OVER_6 }; + static float[] col = { 1.0f, 0.0f, 0.0f, 1.0f, + 0.0f, 1.0f, 0.0f, 1.0f, + 0.0f, 0.0f, 1.0f, 1.0f}; + + static byte[] data_vert = { + (byte) 0x6a, (byte) 0xbe, (byte) 0x3a, (byte) 0x95, (byte) 0x1f, (byte) 0x6d, (byte) 0x83, (byte) 0x26, (byte) 0x05, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x05, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x11, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x49, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x1e, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x51, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x18, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x57, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x05, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x5b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x5b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x1c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x62, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x64, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x74, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x58, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x58, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6d, (byte) 0x61, (byte) 0x6e, (byte) 0x46, (byte) 0x49, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x63, (byte) 0x6f, (byte) 0x6c, (byte) 0x5f, (byte) 0x61, (byte) 0x74, (byte) 0x74, (byte) 0x72, (byte) 0x00, (byte) 0x70, (byte) 0x6f, (byte) 0x73, + (byte) 0x5f, (byte) 0x61, (byte) 0x74, (byte) 0x74, (byte) 0x72, (byte) 0x00, (byte) 0x63, (byte) 0x6f, (byte) 0x6c, (byte) 0x5f, (byte) 0x76, (byte) 0x61, (byte) 0x72, (byte) 0x00, (byte) 0x72, (byte) 0x6f, + (byte) 0x74, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x52, (byte) 0x8b, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x09, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x8b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x1a, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x50, (byte) 0x8b, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x04, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x03, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x81, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x05, (byte) 0x42, (byte) 0x14, (byte) 0x00, (byte) 0x06, (byte) 0x22, (byte) 0x6c, (byte) 0x9c, (byte) 0x1f, (byte) 0x40, (byte) 0x0d, (byte) 0x01, (byte) 0x40, (byte) 0x00, + (byte) 0x83, (byte) 0xc0, (byte) 0x06, (byte) 0x81, (byte) 0x9c, (byte) 0xff, (byte) 0x41, (byte) 0x60, (byte) 0x6c, (byte) 0x1c, (byte) 0x00, (byte) 0x00, (byte) 0x2a, (byte) 0x00, (byte) 0x80, (byte) 0x00, + (byte) 0xc3, (byte) 0x00, (byte) 0x04, (byte) 0x81, (byte) 0xfc, (byte) 0x9f, (byte) 0x41, (byte) 0x60, (byte) 0x6c, (byte) 0x9c, (byte) 0x1f, (byte) 0x40, (byte) 0x00, (byte) 0x10, (byte) 0x40, (byte) 0x00, + (byte) 0x83, (byte) 0xc0, (byte) 0x86, (byte) 0x01, (byte) 0x80, (byte) 0x5f, (byte) 0x40, (byte) 0x60, (byte) 0x6c, (byte) 0x9c, (byte) 0x1f, (byte) 0x40, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, + (byte) 0xc0, (byte) 0x40, (byte) 0x15, (byte) 0x01, (byte) 0x80, (byte) 0x9f, (byte) 0x20, (byte) 0x00, (byte) 0x6c, (byte) 0x9c, (byte) 0x1f, (byte) 0x40, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, + (byte) 0xea, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x81, (byte) 0x1f, (byte) 0x21, (byte) 0xa0 + }; + + static byte[] data_frag = { + (byte) 0x62, (byte) 0x45, (byte) 0xed, (byte) 0x02, (byte) 0x2f, (byte) 0x6d, (byte) 0x83, (byte) 0x26, (byte) 0x05, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x05, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x11, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x49, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x4b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x4b, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x14, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x06, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0d, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0e, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x16, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x20, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x17, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x58, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0f, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x59, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x4c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x11, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x13, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x54, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x54, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x14, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6c, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x6d, (byte) 0x61, (byte) 0x6e, (byte) 0x46, (byte) 0x49, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x63, (byte) 0x6f, (byte) 0x6c, (byte) 0x5f, (byte) 0x76, (byte) 0x61, (byte) 0x72, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x04, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x84, (byte) 0x95, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf1, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0xf0, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x07, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x15, (byte) 0x20, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x41, (byte) 0x52, (byte) 0x32, (byte) 0x30, (byte) 0x2d, (byte) 0x42, (byte) 0x49, (byte) 0x4e, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x01, (byte) 0x00, (byte) 0x41, (byte) 0x25, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x15, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x26, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x02, (byte) 0x00, (byte) 0x04, (byte) 0x26, (byte) 0xba, (byte) 0x51, (byte) 0x4e, (byte) 0x10, + (byte) 0x04, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x27, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x28, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x06, (byte) 0x28, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, (byte) 0x29, + (byte) 0x05, (byte) 0x00, (byte) 0x02, (byte) 0x00 + }; +} diff --git a/src/demos/es2/Shader.java b/src/demos/es2/Shader.java new file mode 100755 index 0000000..0222bfe --- /dev/null +++ b/src/demos/es2/Shader.java @@ -0,0 +1,189 @@ +package demos.es2; + +import java.io.UnsupportedEncodingException; +import java.nio.*; +import javax.media.opengl.*; +import javax.media.opengl.glu.*; + +public class Shader { + private int program; + private int vertexShader; + private int fragmentShader; + + private Shader() { + } + + public static Shader createBinaryProgram(byte[] vertexShaderCode, int vertexShaderFormat, + byte[] fragmentShaderCode, int fragmentShaderFormat) throws GLException { + Shader shader = new Shader(); + shader.createBinaryProgramImpl(vertexShaderCode, vertexShaderFormat, + fragmentShaderCode, fragmentShaderFormat); + shader.useProgram(); + return shader; + } + + public void setAttribByName(String name, int size, int type, boolean normalized, int stride, Buffer pointer) { + GL gl = GLU.getCurrentGL(); + int index = gl.glGetAttribLocation(program, name); + gl.glVertexAttribPointer(index, size, type, normalized, stride, pointer); + gl.glEnableVertexAttribArray(index); + // FIXME + // trackAttribLocation(index); + } + + public int getUniformLocation(String name) { + GL gl = GLU.getCurrentGL(); + return gl.glGetUniformLocation(program, name); + } + + public void useProgram() { + GL gl = GLU.getCurrentGL(); + gl.glUseProgram(program); + } + + //---------------------------------------------------------------------- + // Internals only below this point + // + + private void createBinaryProgramImpl(byte[] vertexShaderCode, int vertexShaderFormat, + byte[] fragmentShaderCode, int fragmentShaderFormat) throws GLException { + allocProgram(); + int[] numBinaryFormats = new int[1]; + GL gl = GLU.getCurrentGL(); + gl.glGetIntegerv(GL.GL_NUM_SHADER_BINARY_FORMATS, numBinaryFormats, 0); + if (numBinaryFormats[0] > 0) { + int[] binaryFormats = new int[numBinaryFormats[0]]; + gl.glGetIntegerv(GL.GL_SHADER_BINARY_FORMATS, binaryFormats, 0); + boolean gotVertexFormat = false; + boolean gotFragmentFormat = false; + + for (int i = 0; i < binaryFormats.length && (!gotVertexFormat || !gotFragmentFormat); i++) { + if (!gotVertexFormat) { + gotVertexFormat = (binaryFormats[i] == vertexShaderFormat); + } + if (!gotFragmentFormat) { + gotFragmentFormat = (binaryFormats[i] == fragmentShaderFormat); + } + } + + if (!gotVertexFormat) { + throw new RuntimeException("Binary vertex program format 0x" + Integer.toHexString(vertexShaderFormat) + + " not available"); + } + + if (!gotFragmentFormat) { + throw new RuntimeException("Binary fragment program format 0x" + Integer.toHexString(fragmentShaderFormat) + + " not available"); + } + } + // Set up the shaders + setupBinaryShader(vertexShader, vertexShaderCode, vertexShaderFormat); + setupBinaryShader(fragmentShader, fragmentShaderCode, fragmentShaderFormat); + + // Set up the shader program + gl.glLinkProgram(program); + if (!glslLog(program, GL.GL_LINK_STATUS, "link")) { + throw new GLException("Error linking program"); + } + } + + private void allocProgram() { + GL gl = GLU.getCurrentGL(); + vertexShader = gl.glCreateShader(GL.GL_VERTEX_SHADER); + fragmentShader = gl.glCreateShader(GL.GL_FRAGMENT_SHADER); + program = gl.glCreateProgram(); + gl.glAttachShader(program, vertexShader); + gl.glAttachShader(program, fragmentShader); + } + + private void setupBinaryShader(int shader, + byte[] shaderData, + int binaryFormat) { + ByteBuffer buf = ByteBuffer.wrap(shaderData); + int[] tmp = new int[1]; + tmp[0] = shader; + GL gl = GLU.getCurrentGL(); + gl.glShaderBinary(1, tmp, 0, binaryFormat, buf, shaderData.length); + } + + private boolean glslLog(int obj, int checkCompile, String op) { + boolean success = false; + + GL gl = GLU.getCurrentGL(); + + // log output. + String str = null; + if (checkCompile == GL.GL_COMPILE_STATUS) { + int[] len = new int[1]; + gl.glGetShaderiv(obj, GL.GL_INFO_LOG_LENGTH, len, 0); + if (len[0] > 0) { + byte[] buf = new byte[len[0]]; + gl.glGetShaderInfoLog(obj, len[0], null, 0, buf, 0); + try { + str = new String(buf, 0, buf.length, "US-ASCII"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } else { + // LINK or VALIDATE + int[] len = new int[1]; + gl.glGetProgramiv(obj, GL.GL_INFO_LOG_LENGTH, len, 0); + if (len[0] > 0) { + byte[] buf = new byte[len[0]]; + gl.glGetProgramInfoLog(obj, len[0], null, 0, buf, 0); + try { + str = new String(buf, 0, buf.length, "US-ASCII"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + + if (str != null) { + System.out.println("--- "); + System.out.println(op); + System.out.println(" log ---"); + System.out.println(str); + } + + // check the compile / link status. + if (checkCompile == GL.GL_COMPILE_STATUS) { + int[] status = new int[1]; + + gl.glGetShaderiv(obj, checkCompile, status, 0); + success = (status[0] != 0); + if (!success) { + int[] len = new int[1]; + gl.glGetShaderiv(obj, GL.GL_SHADER_SOURCE_LENGTH, len, 0); + if (len[0] > 0) { + byte[] buf = new byte[len[0]]; + gl.glGetShaderSource(obj, len[0], null, 0, buf, 0); + try { + str = new String(buf, 0, buf.length, "US-ASCII"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + if (str != null) { + System.out.println("--- "); + System.out.println(op); + System.out.println(" code ---"); + System.out.println(str); + } + } + } + } else { // LINK or VALIDATE + int[] status = new int[1]; + gl.glGetProgramiv(obj, checkCompile, status, 0); + success = (status[0] != 0); + } + + if (!success) { + System.out.println("--- "); + System.out.println(op); + System.out.println(" failed"); + } + + return success; + } +} -- cgit v1.2.3