| 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("}"); | |
| } | |
| } |