GenerateGLES.java revision 50d0b14689b0ae95ea7b66a8c2f7b955115812dd
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 GenerateGLES { 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(GLESCodeEmitter emitter, 20 BufferedReader specReader, 21 PrintStream glStream, 22 PrintStream cStream) throws Exception { 23 String s = null; 24 while ((s = specReader.readLine()) != null) { 25 if (s.trim().startsWith("//")) { 26 continue; 27 } 28 29 CFunc cfunc = CFunc.parseCFunc(s); 30 31 String fname = cfunc.getName(); 32 String stubRoot = "stubs/gles11/" + fname; 33 String javaPath = stubRoot + ".java"; 34 File f = new File(javaPath); 35 if (f.exists()) { 36 System.out.println("Special-casing function " + fname); 37 copy(javaPath, glStream); 38 copy(stubRoot + ".cpp", cStream); 39 40 // Register native function names 41 // This should be improved to require fewer discrete files 42 String filename = stubRoot + ".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.emitCode(cfunc, s); 51 } 52 } 53 } 54 55 public static void main(String[] args) throws Exception { 56 int aidx = 0; 57 while ((aidx < args.length) && (args[aidx].charAt(0) == '-')) { 58 switch (args[aidx].charAt(1)) { 59 default: 60 System.err.println("Unknown flag: " + args[aidx]); 61 System.exit(1); 62 } 63 64 aidx++; 65 } 66 67 BufferedReader checksReader = 68 new BufferedReader(new FileReader("specs/gles11/checks.spec")); 69 ParameterChecker checker = new ParameterChecker(checksReader); 70 71 // Generate files 72 for(String suffix: new String[] {"GLES10", "GLES10Ext", 73 "GLES11", "GLES11Ext", "GLES20"}) 74 { 75 BufferedReader spec11Reader = 76 new BufferedReader(new FileReader("specs/gles11/" 77 + suffix + ".spec")); 78 String gl11Filename = "android/opengl/" + suffix + ".java"; 79 String gl11cFilename = "android_opengl_" + suffix + ".cpp"; 80 PrintStream gl11Stream = 81 new PrintStream(new FileOutputStream("out/" + gl11Filename)); 82 PrintStream gl11cStream = 83 new PrintStream(new FileOutputStream("out/" + gl11cFilename)); 84 gl11Stream.println("/*"); 85 gl11cStream.println("/*"); 86 copy("stubs/gles11/" + suffix + "Header.java-if", gl11Stream); 87 copy("stubs/gles11/" + suffix + "cHeader.cpp", gl11cStream); 88 GLESCodeEmitter emitter = new GLESCodeEmitter( 89 "android/opengl/" + suffix, 90 checker, gl11Stream, gl11cStream); 91 emit(emitter, spec11Reader, gl11Stream, gl11cStream); 92 emitter.emitNativeRegistration("register_android_opengl_jni_" 93 + suffix); 94 gl11Stream.println("}"); 95 gl11Stream.close(); 96 gl11cStream.close(); 97 } 98 } 99} 100