blob: 500cf0b9274dc1a57c6703a2039043df2a4de7ae [file] [log] [blame]
Kenny Rootbd393b72010-03-11 18:20:12 -08001/*
2 * Copyright (C) 2006 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
Jack Palevich412f38f22009-04-13 16:22:25 -070016
17import java.io.BufferedReader;
18import java.io.File;
19import java.io.FileOutputStream;
20import java.io.FileReader;
21import java.io.IOException;
22import java.io.PrintStream;
23
24public class GenerateGL {
25
26 static void copy(String filename, PrintStream out) throws IOException {
27 BufferedReader br = new BufferedReader(new FileReader(filename));
28 String s;
29 while ((s = br.readLine()) != null) {
30 out.println(s);
31 }
32 }
33
34 private static void emit(int version, boolean ext, boolean pack,
35 CodeEmitter emitter,
36 BufferedReader specReader,
37 PrintStream glStream,
38 PrintStream glImplStream,
39 PrintStream cStream) throws Exception {
40 String s = null;
41 while ((s = specReader.readLine()) != null) {
42 if (s.trim().startsWith("//")) {
43 continue;
44 }
45
46 CFunc cfunc = CFunc.parseCFunc(s);
47
48 String fname = cfunc.getName();
49 File f = new File("stubs/jsr239/" + fname +
50 ".java-1" + version + "-if");
51 if (f.exists()) {
52 System.out.println("Special-casing function " + fname);
53 copy("stubs/jsr239/" + fname +
54 ".java-1" + version + "-if", glStream);
55 copy("stubs/jsr239/" + fname + ".java-impl", glImplStream);
56 copy("stubs/jsr239/" + fname + ".cpp", cStream);
57
58 // Register native function names
59 // This should be improved to require fewer discrete files
60 String filename = "stubs/jsr239/" + fname + ".nativeReg";
61 BufferedReader br =
62 new BufferedReader(new FileReader(filename));
63 String nfunc;
64 while ((nfunc = br.readLine()) != null) {
65 emitter.addNativeRegistration(nfunc);
66 }
67 } else {
68 emitter.setVersion(version, ext, pack);
69 emitter.emitCode(cfunc, s);
70 }
71 }
72 }
73
74 public static void main(String[] args) throws Exception {
75 String classPathName = "com/google/android/gles_jni/GLImpl";
76 boolean useContextPointer = true;
77
78 int aidx = 0;
79 while (args[aidx].charAt(0) == '-') {
80 switch (args[aidx].charAt(1)) {
81 case 'c':
82 useContextPointer = false;
83 break;
84
85 default:
86 System.err.println("Unknown flag: " + args[aidx]);
87 System.exit(1);
88 }
89
90 aidx++;
91 }
92
93 System.out.println("useContextPointer = " + useContextPointer);
94
95 BufferedReader spec10Reader =
96 new BufferedReader(new FileReader(args[aidx++]));
97 BufferedReader spec10ExtReader =
98 new BufferedReader(new FileReader(args[aidx++]));
99 BufferedReader spec11Reader =
100 new BufferedReader(new FileReader(args[aidx++]));
101 BufferedReader spec11ExtReader =
102 new BufferedReader(new FileReader(args[aidx++]));
103 BufferedReader spec11ExtPackReader =
104 new BufferedReader(new FileReader(args[aidx++]));
105 BufferedReader checksReader =
106 new BufferedReader(new FileReader(args[aidx++]));
107
108 String gl10Filename = "javax/microedition/khronos/opengles/GL10.java";
109 String gl10ExtFilename =
110 "javax/microedition/khronos/opengles/GL10Ext.java";
111 String gl11Filename = "javax/microedition/khronos/opengles/GL11.java";
112 String gl11ExtFilename =
113 "javax/microedition/khronos/opengles/GL11Ext.java";
114 String gl11ExtPackFilename =
115 "javax/microedition/khronos/opengles/GL11ExtensionPack.java";
116 String glImplFilename = "com/google/android/gles_jni/GLImpl.java";
117 String cFilename = "com_google_android_gles_jni_GLImpl.cpp";
118
119 PrintStream gl10Stream =
120 new PrintStream(new FileOutputStream("out/" + gl10Filename));
121 PrintStream gl10ExtStream =
122 new PrintStream(new FileOutputStream("out/" + gl10ExtFilename));
123 PrintStream gl11Stream =
124 new PrintStream(new FileOutputStream("out/" + gl11Filename));
125 PrintStream gl11ExtStream =
126 new PrintStream(new FileOutputStream("out/" + gl11ExtFilename));
127 PrintStream gl11ExtPackStream =
128 new PrintStream(new FileOutputStream("out/" + gl11ExtPackFilename));
129 PrintStream glImplStream =
130 new PrintStream(new FileOutputStream("out/" + glImplFilename));
131 PrintStream cStream =
132 new PrintStream(new FileOutputStream("out/" + cFilename));
133
134 ParameterChecker checker = new ParameterChecker(checksReader);
135
136 CodeEmitter emitter =
137 new Jsr239CodeEmitter(classPathName,
138 checker,
139 gl10Stream, gl10ExtStream,
140 gl11Stream, gl11ExtStream, gl11ExtPackStream,
141 glImplStream, cStream,
142 useContextPointer);
143
144 gl10Stream.println("/* //device/java/android/" + gl10Filename);
145 gl10ExtStream.println("/* //device/java/android/" + gl10ExtFilename);
146 gl11Stream.println("/* //device/java/android/" + gl11Filename);
147 gl11ExtStream.println("/* //device/java/android/" + gl11ExtFilename);
148 gl11ExtPackStream.println("/* //device/java/android/" +
149 gl11ExtPackFilename);
150 glImplStream.println("/* //device/java/android/" + glImplFilename);
151 cStream.println("/* //device/libs/android_runtime/" + cFilename);
152
153 copy("stubs/jsr239/GL10Header.java-if", gl10Stream);
154 copy("stubs/jsr239/GL10ExtHeader.java-if", gl10ExtStream);
155 copy("stubs/jsr239/GL11Header.java-if", gl11Stream);
156 copy("stubs/jsr239/GL11ExtHeader.java-if", gl11ExtStream);
157 copy("stubs/jsr239/GL11ExtensionPackHeader.java-if", gl11ExtPackStream);
158 copy("stubs/jsr239/GLImplHeader.java-impl", glImplStream);
159 copy("stubs/jsr239/GLCHeader.cpp", cStream);
160
161 emit(0, false, false,
162 emitter, spec10Reader, gl10Stream, glImplStream, cStream);
163 emit(0, true, false,
164 emitter, spec10ExtReader, gl10ExtStream, glImplStream, cStream);
165 emit(1, false, false,
166 emitter, spec11Reader, gl11Stream, glImplStream, cStream);
167 emit(1, true, false,
168 emitter, spec11ExtReader, gl11ExtStream, glImplStream, cStream);
169 emit(1, true, true,
170 emitter, spec11ExtPackReader, gl11ExtPackStream, glImplStream,
171 cStream);
172
173 emitter.emitNativeRegistration();
174
175 gl10Stream.println("}");
176 gl10ExtStream.println("}");
177 gl11Stream.println("}");
178 gl11ExtStream.println("}");
179 gl11ExtPackStream.println("}");
180 glImplStream.println("}");
181 }
182}