summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2008-08-12 15:05:22 +0000
committerSven Gothel <[email protected]>2008-08-12 15:05:22 +0000
commit9c9d03587d2d4ff134f400d67145213b01e83c35 (patch)
tree856711eefa91a7091bb04f4ccaa92d0d0a2fbf7d
parent5c6c7743e602285a88f07a52bde123861ec1b437 (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
-rw-r--r--make/build.xml5
-rwxr-xr-xsrc/demos/es2/Basic.java147
-rwxr-xr-xsrc/demos/es2/RedSquare.java214
-rwxr-xr-xsrc/demos/es2/Shader.java189
-rwxr-xr-xsrc/demos/es2/shader/bin/nvidia/redsquare.bfpbin0 -> 524 bytes
-rwxr-xr-xsrc/demos/es2/shader/bin/nvidia/redsquare.bvpbin0 -> 864 bytes
-rw-r--r--src/demos/es2/shader/redsquare.fp16
-rw-r--r--src/demos/es2/shader/redsquare.vp19
8 files changed, 110 insertions, 480 deletions
diff --git a/make/build.xml b/make/build.xml
index 1f4c4ac..588cd46 100644
--- a/make/build.xml
+++ b/make/build.xml
@@ -204,12 +204,15 @@
</path>
<javac destdir="${classes}"
includes="demos/GLInfo*, demos/es2/**"
- excludes="demos/es2/Shader*, demos/es2/Basic*"
source="1.4" target="1.4" debug="true" debuglevel="source,lines"
bootclasspath="../../gluegen/make/lib/cdc_fp.jar">
<src path="${src}" />
<classpath refid="jogl-demos.classpath" />
</javac>
+ <copy todir="${classes}">
+ <fileset dir="${src}"
+ includes="demos/es2/shader/**" />
+ </copy>
<jar destfile="${jogl.demos.jar}">
<fileset dir="${classes}">
<include name="**" />
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
new file mode 100755
index 0000000..454354c
--- /dev/null
+++ b/src/demos/es2/shader/bin/nvidia/redsquare.bfp
Binary files differ
diff --git a/src/demos/es2/shader/bin/nvidia/redsquare.bvp b/src/demos/es2/shader/bin/nvidia/redsquare.bvp
new file mode 100755
index 0000000..ba0c982
--- /dev/null
+++ b/src/demos/es2/shader/bin/nvidia/redsquare.bvp
Binary files differ
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;
+}