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