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