blob: 3715a96fc38fbb83e12562ef782e161594b71dbc [file] [log] [blame]
Jean-Baptiste Queru9660d302009-05-20 11:28:04 -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 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
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}