GenerateGL.java revision 412f38f270b71bbc3214362eb58687cbf26d6df2
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 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 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