Code drop from //branches/cupcake/...@124589
diff --git a/opengl/tools/glgen/src/GenerateGL.java b/opengl/tools/glgen/src/GenerateGL.java
new file mode 100644
index 0000000..657ee6e
--- /dev/null
+++ b/opengl/tools/glgen/src/GenerateGL.java
@@ -0,0 +1,164 @@
+

+import java.io.*;

+import java.util.*;

+

+public class GenerateGL {

+

+    static void copy(String filename, PrintStream out) throws IOException {

+        BufferedReader br = new BufferedReader(new FileReader(filename));

+        String s;

+        while ((s = br.readLine()) != null) {

+            out.println(s);

+        }

+    }

+

+    private static void emit(int version, boolean ext, boolean pack,

+                             CodeEmitter emitter,

+                             BufferedReader specReader,

+                             PrintStream glStream,

+                             PrintStream glImplStream,

+                             PrintStream cStream) throws Exception {

+        String s = null;

+        int counter = 0;

+        while ((s = specReader.readLine()) != null) {

+            if (s.trim().startsWith("//")) {

+                continue;

+            }

+

+            CFunc cfunc = CFunc.parseCFunc(s);

+

+            String fname = cfunc.getName();

+            File f = new File("stubs/" + fname +

+                              ".java-1" + version + "-if");

+            if (f.exists()) {

+                System.out.println("Special-casing function " + fname);

+                copy("stubs/" + fname +

+                     ".java-1" + version + "-if", glStream);

+                copy("stubs/" + fname + ".java-impl", glImplStream);

+                copy("stubs/" + fname + ".cpp", cStream);

+

+                // Register native function names

+                // This should be improved to require fewer discrete files

+                String filename = "stubs/" + fname + ".nativeReg";

+                BufferedReader br =

+                    new BufferedReader(new FileReader(filename));

+                String nfunc;

+                while ((nfunc = br.readLine()) != null) {

+                    emitter.addNativeRegistration(nfunc);

+                }

+            } else {

+                emitter.setVersion(version, ext, pack);

+                emitter.emitCode(cfunc, s);

+            }

+        }

+    }

+

+    public static void main(String[] args) throws Exception {

+        String classPathName = "com/google/android/gles_jni/GLImpl";

+        boolean useContextPointer = true;

+

+        int aidx = 0;

+        while (args[aidx].charAt(0) == '-') {

+            switch (args[aidx].charAt(1)) {

+            case 'c':

+                useContextPointer = false;

+                break;

+

+            default:

+                System.err.println("Unknown flag: " + args[aidx]);

+                System.exit(1);

+            }

+

+            aidx++;

+        }

+

+        System.out.println("useContextPointer = " + useContextPointer);

+

+        BufferedReader spec10Reader =

+            new BufferedReader(new FileReader(args[aidx++]));

+        BufferedReader spec10ExtReader =

+            new BufferedReader(new FileReader(args[aidx++]));

+        BufferedReader spec11Reader =

+            new BufferedReader(new FileReader(args[aidx++]));

+        BufferedReader spec11ExtReader =

+            new BufferedReader(new FileReader(args[aidx++]));

+        BufferedReader spec11ExtPackReader =

+            new BufferedReader(new FileReader(args[aidx++]));

+        BufferedReader checksReader =

+            new BufferedReader(new FileReader(args[aidx++]));

+

+        String gl10Filename = "javax/microedition/khronos/opengles/GL10.java";

+        String gl10ExtFilename =

+            "javax/microedition/khronos/opengles/GL10Ext.java";

+        String gl11Filename = "javax/microedition/khronos/opengles/GL11.java";

+        String gl11ExtFilename =

+            "javax/microedition/khronos/opengles/GL11Ext.java";

+        String gl11ExtPackFilename =

+            "javax/microedition/khronos/opengles/GL11ExtensionPack.java";

+        String glImplFilename = "com/google/android/gles_jni/GLImpl.java";

+        String cFilename = "com_google_android_gles_jni_GLImpl.cpp";

+

+        PrintStream gl10Stream =

+            new PrintStream(new FileOutputStream("out/" + gl10Filename));

+        PrintStream gl10ExtStream =

+            new PrintStream(new FileOutputStream("out/" + gl10ExtFilename));

+        PrintStream gl11Stream =

+            new PrintStream(new FileOutputStream("out/" + gl11Filename));

+        PrintStream gl11ExtStream =

+            new PrintStream(new FileOutputStream("out/" + gl11ExtFilename));

+        PrintStream gl11ExtPackStream =

+            new PrintStream(new FileOutputStream("out/" + gl11ExtPackFilename));

+        PrintStream glImplStream =

+            new PrintStream(new FileOutputStream("out/" + glImplFilename));

+        PrintStream cStream =

+            new PrintStream(new FileOutputStream("out/" + cFilename));

+

+        ParameterChecker checker = new ParameterChecker(checksReader);

+

+        CodeEmitter emitter =

+            new JniCodeEmitter(classPathName,

+                               checker,

+                               gl10Stream, gl10ExtStream,

+                               gl11Stream, gl11ExtStream, gl11ExtPackStream,

+                               glImplStream, cStream,

+                               useContextPointer);

+

+        gl10Stream.println("/* //device/java/android/" + gl10Filename);

+        gl10ExtStream.println("/* //device/java/android/" + gl10ExtFilename);

+        gl11Stream.println("/* //device/java/android/" + gl11Filename);

+        gl11ExtStream.println("/* //device/java/android/" + gl11ExtFilename);

+        gl11ExtPackStream.println("/* //device/java/android/" +

+            gl11ExtPackFilename);

+        glImplStream.println("/* //device/java/android/" + glImplFilename);

+        cStream.println("/* //device/libs/android_runtime/" + cFilename);

+

+        copy("stubs/GL10Header.java-if", gl10Stream);

+        copy("stubs/GL10ExtHeader.java-if", gl10ExtStream);

+        copy("stubs/GL11Header.java-if", gl11Stream);

+        copy("stubs/GL11ExtHeader.java-if", gl11ExtStream);

+        copy("stubs/GL11ExtensionPackHeader.java-if", gl11ExtPackStream);

+        copy("stubs/GLImplHeader.java-impl", glImplStream);

+        copy("stubs/GLCHeader.cpp", cStream);

+

+        emit(0, false, false,

+             emitter, spec10Reader, gl10Stream, glImplStream, cStream);

+        emit(0, true, false,

+             emitter, spec10ExtReader, gl10ExtStream, glImplStream, cStream);

+        emit(1, false, false,

+             emitter, spec11Reader, gl11Stream, glImplStream, cStream);

+        emit(1, true, false,

+             emitter, spec11ExtReader, gl11ExtStream, glImplStream, cStream);

+        emit(1, true, true,

+             emitter, spec11ExtPackReader, gl11ExtPackStream, glImplStream,

+             cStream);

+

+        emitter.emitNativeRegistration();

+

+        gl10Stream.println("}");

+        gl10ExtStream.println("}");

+        gl11Stream.println("}");

+        gl11ExtStream.println("}");

+        gl11ExtPackStream.println("}");

+        glImplStream.println("}");

+    }

+}