• 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 GenerateGL {
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(int version, boolean ext, boolean pack, CodeEmitter emitter, BufferedReader specReader, PrintStream glStream, PrintStream glImplStream, PrintStream cStream)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 
main(String[] args)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