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