diff options
author | Sven Gothel <[email protected]> | 2008-08-12 15:05:22 +0000 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2008-08-12 15:05:22 +0000 |
commit | 9c9d03587d2d4ff134f400d67145213b01e83c35 (patch) | |
tree | 856711eefa91a7091bb04f4ccaa92d0d0a2fbf7d /src | |
parent | 5c6c7743e602285a88f07a52bde123861ec1b437 (diff) |
Proper ES2 demo with precompiled shader
git-svn-id: file:///usr/local/projects/SUN/JOGL/git-svn/../svn-server-sync/jogl-demos/branches/JOGL_2_SANDBOX@272 3298f667-5e0e-4b4a-8ed4-a3559d26a5f4
Diffstat (limited to 'src')
-rwxr-xr-x | src/demos/es2/Basic.java | 147 | ||||
-rwxr-xr-x | src/demos/es2/RedSquare.java | 214 | ||||
-rwxr-xr-x | src/demos/es2/Shader.java | 189 | ||||
-rwxr-xr-x | src/demos/es2/shader/bin/nvidia/redsquare.bfp | bin | 0 -> 524 bytes | |||
-rwxr-xr-x | src/demos/es2/shader/bin/nvidia/redsquare.bvp | bin | 0 -> 864 bytes | |||
-rw-r--r-- | src/demos/es2/shader/redsquare.fp | 16 | ||||
-rw-r--r-- | src/demos/es2/shader/redsquare.vp | 19 |
7 files changed, 106 insertions, 479 deletions
diff --git a/src/demos/es2/Basic.java b/src/demos/es2/Basic.java deleted file mode 100755 index d951d3b..0000000 --- a/src/demos/es2/Basic.java +++ /dev/null @@ -1,147 +0,0 @@ -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/RedSquare.java b/src/demos/es2/RedSquare.java index 9e74c4f..089ebfe 100755 --- a/src/demos/es2/RedSquare.java +++ b/src/demos/es2/RedSquare.java @@ -4,6 +4,7 @@ import java.nio.*; import javax.media.opengl.*; import javax.media.opengl.util.*; import javax.media.opengl.glu.*; +import javax.media.opengl.glsl.*; import com.sun.javafx.newt.*; @@ -84,126 +85,29 @@ public class RedSquare implements MouseListener, GLEventListener { } } - // FIXME: we must add storage of the pointers in the GL state to - // the GLImpl classes. The need for this can be seen by making - // these variables method local instead of instance members. The - // square will disappear after a second or so due to garbage - // collection. On desktop OpenGL this implies a stack of - // references due to the existence of glPush/PopClientAttrib. On - // OpenGL ES 1/2 it can simply be one set of references. - private FloatBuffer colors; - private FloatBuffer vertices; - - public static final int VERTEX_ARRAY = 0; - public static final int COLOR_ARRAY = 1; - - boolean shaderOk = false; - IntBuffer fragShader = BufferUtil.newIntBuffer(1); - IntBuffer vertShader = BufferUtil.newIntBuffer(1); - int shaderProgram=-1; - int shaderPMVMatrix=-1; + ShaderState st; PMVMatrix pmvMatrix; - public static final String[][] vertShaderSource = new String[][] { { - "#ifdef GL_ES\n"+ - " #define MEDIUMP mediump\n"+ - " #define HIGHP highp\n"+ - "#else\n"+ - " #define MEDIUMP\n"+ - " #define HIGHP\n"+ - "#endif\n"+ - "\n"+ - "uniform MEDIUMP mat4 mgl_PMVMatrix[2];\n"+ - "attribute HIGHP vec4 mgl_Vertex;\n"+ - "attribute HIGHP vec4 mgl_Color;\n"+ - "varying HIGHP vec4 frontColor;\n"+ - "void main(void)\n"+ - "{\n"+ - " frontColor=mgl_Color;\n"+ - " gl_Position = mgl_PMVMatrix[0] * mgl_PMVMatrix[1] * mgl_Vertex;\n"+ - "}\n" } } ; - - public static final String[][] fragShaderSource = new String[][] { { - "#ifdef GL_ES\n"+ - " #define MEDIUMP mediump\n"+ - " #define HIGHP highp\n"+ - "#else\n"+ - " #define MEDIUMP\n"+ - " #define HIGHP\n"+ - "#endif\n"+ - "\n"+ - "varying HIGHP vec4 frontColor;\n"+ - "void main (void)\n"+ - "{\n"+ - " gl_FragColor = frontColor;\n"+ - "}\n" } } ; - - private void initShader(GL2ES2 gl) { int tmpI; - // Create & Compile the vertex shader object - tmpI = gl.glCreateShader(gl.GL_VERTEX_SHADER); - vertShader.put(tmpI); - vertShader.flip(); - - gl.glShaderSource(vertShader, vertShaderSource); - gl.glCompileShader(vertShader.get(0)); - if ( ! gl.glIsShaderStatusValid(vertShader.get(0), gl.GL_COMPILE_STATUS) ) { - System.err.println("Failed to compile vertex shader: id "+vertShader.get(0)+ - "\n\t"+gl.glGetShaderInfoLog(vertShader.get(0))); - return; - } - - // Create & Compile the fragment shader object - tmpI = gl.glCreateShader(gl.GL_FRAGMENT_SHADER); - fragShader.put(tmpI); - fragShader.flip(); - - gl.glShaderSource(fragShader, fragShaderSource); - - gl.glCompileShader(fragShader.get(0)); - - if ( ! gl.glIsShaderStatusValid(fragShader.get(0), gl.GL_COMPILE_STATUS) ) { - System.err.println("Failed to compile fragment shader: id "+fragShader.get(0)+ - "\n\t"+gl.glGetShaderInfoLog(fragShader.get(0))); - return; - } - - // Create the shader program - shaderProgram = gl.glCreateProgram(); - - // Attach the fragment and vertex shaders to it - gl.glAttachShader(shaderProgram, fragShader.get(0)); - gl.glAttachShader(shaderProgram, vertShader.get(0)); - - gl.glBindAttribLocation(shaderProgram, VERTEX_ARRAY, "mgl_Vertex"); - gl.glBindAttribLocation(shaderProgram, COLOR_ARRAY, "mgl_Color"); - - // Link the program - gl.glLinkProgram(shaderProgram); - - if ( ! gl.glIsProgramValid(shaderProgram, System.err) ) { - return; + // Create & Compile the shader objects + ShaderCode rsVp = ShaderCode.create(gl, gl.GL_VERTEX_SHADER, 1, RedSquare.class, + "shader", "shader/bin", "redsquare"); + ShaderCode rsFp = ShaderCode.create(gl, gl.GL_FRAGMENT_SHADER, 1, RedSquare.class, + "shader", "shader/bin", "redsquare"); + + // Create & Link the shader program + ShaderProgram sp = new ShaderProgram(); + sp.add(rsVp); + sp.add(rsFp); + if(!sp.link(gl, System.err)) { + throw new GLException("Couldn't link program: "+sp); } - gl.glUseProgram(shaderProgram); - - pmvMatrix.glMatrixMode(gl.GL_PROJECTION); - pmvMatrix.glLoadIdentity(); - pmvMatrix.glMatrixMode(gl.GL_MODELVIEW); - pmvMatrix.glLoadIdentity(); - - shaderPMVMatrix = gl.glGetUniformLocation(shaderProgram, "mgl_PMVMatrix"); - if(0<=shaderPMVMatrix) { - gl.glUniformMatrix4fv(shaderPMVMatrix, 2, false, pmvMatrix.glGetPMvMatrixf()); - } else { - System.err.println("could not get uniform mgl_PMVMatrix: "+shaderPMVMatrix); - return; - } - - shaderOk = true; - + // Let's manage all our states using ShaderState. + st = new ShaderState(); + st.attachShaderProgram(gl, sp); } public void init(GLAutoDrawable drawable) { @@ -222,54 +126,77 @@ public class RedSquare implements MouseListener, GLEventListener { initShader(gl); + // Push the 1st uniform down the path + st.glUseProgram(gl, true); + + pmvMatrix.glMatrixMode(gl.GL_PROJECTION); + pmvMatrix.glLoadIdentity(); + pmvMatrix.glMatrixMode(gl.GL_MODELVIEW); + pmvMatrix.glLoadIdentity(); + + if(!st.glUniform(gl, new GLUniformData("mgl_PMVMatrix", 4, 4, pmvMatrix.glGetPMvMatrixf()))) { + throw new GLException("Error setting PMVMatrix in shader: "+st); + } // Allocate vertex arrays - colors = BufferUtil.newFloatBuffer(16); - vertices = BufferUtil.newFloatBuffer(12); - // Fill them up - colors.put( 1); colors.put( 0); colors.put( 0); colors.put( 1); - colors.put( 0); colors.put( 0); colors.put( 1); colors.put( 1); - colors.put( 1); colors.put( 0); colors.put( 0); colors.put( 1); - colors.put( 1); colors.put( 0); colors.put( 0); colors.put( 1); - colors.flip(); - - vertices.put(-2); vertices.put( 2); vertices.put( 0); - vertices.put( 2); vertices.put( 2); vertices.put( 0); - vertices.put(-2); vertices.put( -2); vertices.put( 0); - vertices.put( 2); vertices.put( -2); vertices.put( 0); - vertices.flip(); - - gl.glEnableVertexAttribArray(VERTEX_ARRAY); - gl.glVertexAttribPointer(VERTEX_ARRAY, 3, gl.GL_FLOAT, false, 0, vertices); - - gl.glEnableVertexAttribArray(COLOR_ARRAY); - gl.glVertexAttribPointer(COLOR_ARRAY, 4, gl.GL_FLOAT, false, 0, colors); + GLArrayDataClient vertices = GLArrayDataClient.createGLSL(-1, "mgl_Vertex", 3, gl.GL_FLOAT, false, 4); + { + // Fill them up + FloatBuffer verticeb = (FloatBuffer)vertices.getBuffer(); + verticeb.put(-2); verticeb.put( 2); verticeb.put( 0); + verticeb.put( 2); verticeb.put( 2); verticeb.put( 0); + verticeb.put(-2); verticeb.put( -2); verticeb.put( 0); + verticeb.put( 2); verticeb.put( -2); verticeb.put( 0); + verticeb.flip(); + } + + GLArrayDataClient colors = GLArrayDataClient.createGLSL(-1, "mgl_Color", 4, gl.GL_FLOAT, false, 4); + { + // Fill them up + FloatBuffer colorb = (FloatBuffer)colors.getBuffer(); + colorb.put( 1); colorb.put( 0); colorb.put( 0); colorb.put( 1); + colorb.put( 0); colorb.put( 0); colorb.put( 1); colorb.put( 1); + colorb.put( 1); colorb.put( 0); colorb.put( 0); colorb.put( 1); + colorb.put( 1); colorb.put( 0); colorb.put( 0); colorb.put( 1); + colorb.flip(); + } + + st.glVertexAttribPointer(gl, vertices); + st.glVertexAttribPointer(gl, colors); // OpenGL Render Settings gl.glClearColor(0, 0, 0, 1); gl.glEnable(GL2ES2.GL_DEPTH_TEST); - gl.glUseProgram(0); + st.glUseProgram(gl, false); + // Let's show the completed shader state .. + System.out.println(st); } public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { GL2ES2 gl = drawable.getGL().getGL2ES2(); + st.glUseProgram(gl, true); + // Set location in front of camera pmvMatrix.glMatrixMode(GL2ES2.GL_PROJECTION); pmvMatrix.glLoadIdentity(); pmvMatrix.gluPerspective(45.0f, (float)width / (float)height, 1.0f, 100.0f); //pmvMatrix.glOrthof(-4.0f, 4.0f, -4.0f, 4.0f, 1.0f, 100.0f); - if(0<=shaderPMVMatrix) { - gl.glUniformMatrix4fv(shaderPMVMatrix, 2, false, pmvMatrix.glGetPMvMatrixf()); - } + GLUniformData ud = st.getUniform("mgl_PMVMatrix"); + if(null!=ud) { + // same data object + st.glUniform(gl, ud); + } + + st.glUseProgram(gl, false); } public void display(GLAutoDrawable drawable) { GL2ES2 gl = drawable.getGL().getGL2ES2(); - gl.glUseProgram(shaderProgram); + st.glUseProgram(gl, true); gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT); @@ -281,15 +208,16 @@ public class RedSquare implements MouseListener, GLEventListener { pmvMatrix.glRotatef(ang, 0, 0, 1); pmvMatrix.glRotatef(ang, 0, 1, 0); - if(0<=shaderPMVMatrix) { - gl.glUniformMatrix4fv(shaderPMVMatrix, 2, false, pmvMatrix.glGetPMvMatrixf()); - } + GLUniformData ud = st.getUniform("mgl_PMVMatrix"); + if(null!=ud) { + // same data object + st.glUniform(gl, ud); + } // Draw a square gl.glDrawArrays(gl.GL_TRIANGLE_STRIP, 0, 4); - gl.glUseProgram(0); - + st.glUseProgram(gl, false); } public void displayChanged(GLAutoDrawable drawable, boolean modeChanged, boolean deviceChanged) { diff --git a/src/demos/es2/Shader.java b/src/demos/es2/Shader.java deleted file mode 100755 index 0222bfe..0000000 --- a/src/demos/es2/Shader.java +++ /dev/null @@ -1,189 +0,0 @@ -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; - } -} diff --git a/src/demos/es2/shader/bin/nvidia/redsquare.bfp b/src/demos/es2/shader/bin/nvidia/redsquare.bfp Binary files differnew file mode 100755 index 0000000..454354c --- /dev/null +++ b/src/demos/es2/shader/bin/nvidia/redsquare.bfp diff --git a/src/demos/es2/shader/bin/nvidia/redsquare.bvp b/src/demos/es2/shader/bin/nvidia/redsquare.bvp Binary files differnew file mode 100755 index 0000000..ba0c982 --- /dev/null +++ b/src/demos/es2/shader/bin/nvidia/redsquare.bvp diff --git a/src/demos/es2/shader/redsquare.fp b/src/demos/es2/shader/redsquare.fp new file mode 100644 index 0000000..a94f705 --- /dev/null +++ b/src/demos/es2/shader/redsquare.fp @@ -0,0 +1,16 @@ + +#ifdef GL_ES + #define MEDIUMP mediump + #define HIGHP highp +#else + #define MEDIUMP + #define HIGHP +#endif + +varying HIGHP vec4 frontColor; + +void main (void) +{ + gl_FragColor = frontColor; +} + diff --git a/src/demos/es2/shader/redsquare.vp b/src/demos/es2/shader/redsquare.vp new file mode 100644 index 0000000..0348e90 --- /dev/null +++ b/src/demos/es2/shader/redsquare.vp @@ -0,0 +1,19 @@ + +#ifdef GL_ES + #define MEDIUMP mediump + #define HIGHP highp +#else + #define MEDIUMP + #define HIGHP +#endif + +uniform MEDIUMP mat4 mgl_PMVMatrix[2]; +attribute HIGHP vec4 mgl_Vertex; +attribute HIGHP vec4 mgl_Color; +varying HIGHP vec4 frontColor; + +void main(void) +{ + frontColor=mgl_Color; + gl_Position = mgl_PMVMatrix[0] * mgl_PMVMatrix[1] * mgl_Vertex; +} |