1 2 import java.io.BufferedReader; 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.FileReader; 6 import java.io.IOException; 7 import java.io.PrintStream; 8 9 public class GenerateGL { 10 copy(String filename, PrintStream out)11 static void copy(String filename, PrintStream out) throws IOException { 12 BufferedReader br = new BufferedReader(new FileReader(filename)); 13 String s; 14 while ((s = br.readLine()) != null) { 15 out.println(s); 16 } 17 } 18 emit(int version, boolean ext, boolean pack, CodeEmitter emitter, BufferedReader specReader, PrintStream glStream, PrintStream glImplStream, PrintStream cStream)19 private static void emit(int version, boolean ext, boolean pack, 20 CodeEmitter emitter, 21 BufferedReader specReader, 22 PrintStream glStream, 23 PrintStream glImplStream, 24 PrintStream cStream) throws Exception { 25 String s = null; 26 while ((s = specReader.readLine()) != null) { 27 if (s.trim().startsWith("//")) { 28 continue; 29 } 30 31 CFunc cfunc = CFunc.parseCFunc(s); 32 33 String fname = cfunc.getName(); 34 File f = new File("stubs/jsr239/" + fname + 35 ".java-1" + version + "-if"); 36 if (f.exists()) { 37 System.out.println("Special-casing function " + fname); 38 copy("stubs/jsr239/" + fname + 39 ".java-1" + version + "-if", glStream); 40 copy("stubs/jsr239/" + fname + ".java-impl", glImplStream); 41 copy("stubs/jsr239/" + fname + ".cpp", cStream); 42 43 // Register native function names 44 // This should be improved to require fewer discrete files 45 String filename = "stubs/jsr239/" + fname + ".nativeReg"; 46 BufferedReader br = 47 new BufferedReader(new FileReader(filename)); 48 String nfunc; 49 while ((nfunc = br.readLine()) != null) { 50 emitter.addNativeRegistration(nfunc); 51 } 52 } else { 53 emitter.setVersion(version, ext, pack); 54 emitter.emitCode(cfunc, s); 55 } 56 } 57 } 58 main(String[] args)59 public static void main(String[] args) throws Exception { 60 String classPathName = "com/google/android/gles_jni/GLImpl"; 61 boolean useContextPointer = true; 62 63 int aidx = 0; 64 while (args[aidx].charAt(0) == '-') { 65 switch (args[aidx].charAt(1)) { 66 case 'c': 67 useContextPointer = false; 68 break; 69 70 default: 71 System.err.println("Unknown flag: " + args[aidx]); 72 System.exit(1); 73 } 74 75 aidx++; 76 } 77 78 System.out.println("useContextPointer = " + useContextPointer); 79 80 BufferedReader spec10Reader = 81 new BufferedReader(new FileReader(args[aidx++])); 82 BufferedReader spec10ExtReader = 83 new BufferedReader(new FileReader(args[aidx++])); 84 BufferedReader spec11Reader = 85 new BufferedReader(new FileReader(args[aidx++])); 86 BufferedReader spec11ExtReader = 87 new BufferedReader(new FileReader(args[aidx++])); 88 BufferedReader spec11ExtPackReader = 89 new BufferedReader(new FileReader(args[aidx++])); 90 BufferedReader checksReader = 91 new BufferedReader(new FileReader(args[aidx++])); 92 93 String gl10Filename = "javax/microedition/khronos/opengles/GL10.java"; 94 String gl10ExtFilename = 95 "javax/microedition/khronos/opengles/GL10Ext.java"; 96 String gl11Filename = "javax/microedition/khronos/opengles/GL11.java"; 97 String gl11ExtFilename = 98 "javax/microedition/khronos/opengles/GL11Ext.java"; 99 String gl11ExtPackFilename = 100 "javax/microedition/khronos/opengles/GL11ExtensionPack.java"; 101 String glImplFilename = "com/google/android/gles_jni/GLImpl.java"; 102 String cFilename = "com_google_android_gles_jni_GLImpl.cpp"; 103 104 PrintStream gl10Stream = 105 new PrintStream(new FileOutputStream("out/" + gl10Filename)); 106 PrintStream gl10ExtStream = 107 new PrintStream(new FileOutputStream("out/" + gl10ExtFilename)); 108 PrintStream gl11Stream = 109 new PrintStream(new FileOutputStream("out/" + gl11Filename)); 110 PrintStream gl11ExtStream = 111 new PrintStream(new FileOutputStream("out/" + gl11ExtFilename)); 112 PrintStream gl11ExtPackStream = 113 new PrintStream(new FileOutputStream("out/" + gl11ExtPackFilename)); 114 PrintStream glImplStream = 115 new PrintStream(new FileOutputStream("out/" + glImplFilename)); 116 PrintStream cStream = 117 new PrintStream(new FileOutputStream("out/" + cFilename)); 118 119 ParameterChecker checker = new ParameterChecker(checksReader); 120 121 CodeEmitter emitter = 122 new Jsr239CodeEmitter(classPathName, 123 checker, 124 gl10Stream, gl10ExtStream, 125 gl11Stream, gl11ExtStream, gl11ExtPackStream, 126 glImplStream, cStream, 127 useContextPointer); 128 129 gl10Stream.println("/* //device/java/android/" + gl10Filename); 130 gl10ExtStream.println("/* //device/java/android/" + gl10ExtFilename); 131 gl11Stream.println("/* //device/java/android/" + gl11Filename); 132 gl11ExtStream.println("/* //device/java/android/" + gl11ExtFilename); 133 gl11ExtPackStream.println("/* //device/java/android/" + 134 gl11ExtPackFilename); 135 glImplStream.println("/* //device/java/android/" + glImplFilename); 136 cStream.println("/* //device/libs/android_runtime/" + cFilename); 137 138 copy("stubs/jsr239/GL10Header.java-if", gl10Stream); 139 copy("stubs/jsr239/GL10ExtHeader.java-if", gl10ExtStream); 140 copy("stubs/jsr239/GL11Header.java-if", gl11Stream); 141 copy("stubs/jsr239/GL11ExtHeader.java-if", gl11ExtStream); 142 copy("stubs/jsr239/GL11ExtensionPackHeader.java-if", gl11ExtPackStream); 143 copy("stubs/jsr239/GLImplHeader.java-impl", glImplStream); 144 copy("stubs/jsr239/GLCHeader.cpp", cStream); 145 146 emit(0, false, false, 147 emitter, spec10Reader, gl10Stream, glImplStream, cStream); 148 emit(0, true, false, 149 emitter, spec10ExtReader, gl10ExtStream, glImplStream, cStream); 150 emit(1, false, false, 151 emitter, spec11Reader, gl11Stream, glImplStream, cStream); 152 emit(1, true, false, 153 emitter, spec11ExtReader, gl11ExtStream, glImplStream, cStream); 154 emit(1, true, true, 155 emitter, spec11ExtPackReader, gl11ExtPackStream, glImplStream, 156 cStream); 157 158 emitter.emitNativeRegistration(); 159 160 gl10Stream.println("}"); 161 gl10ExtStream.println("}"); 162 gl11Stream.println("}"); 163 gl11ExtStream.println("}"); 164 gl11ExtPackStream.println("}"); 165 glImplStream.println("}"); 166 } 167 } 168