blob: 657ee6e7c7e0c6590daf712e71c3a50ccb890b84 [file] [log] [blame]
The Android Open Source Projecte09fd9e2008-12-17 18:05:43 -08001
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}