• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 GenerateGLES {
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(GLESCodeEmitter emitter, BufferedReader specReader, PrintStream glStream, PrintStream cStream)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 
main(String[] args)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"})
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