1 /* 2 * Copyright (C) 2009 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 */ 16 17 import java.io.BufferedReader; 18 import java.io.File; 19 import java.io.FileOutputStream; 20 import java.io.FileReader; 21 import java.io.IOException; 22 import java.io.PrintStream; 23 24 public class GenerateGLES { 25 copy(String filename, PrintStream out)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 emit(GLESCodeEmitter emitter, BufferedReader specReader, PrintStream glStream, PrintStream cStream)34 private static void emit(GLESCodeEmitter emitter, 35 BufferedReader specReader, 36 PrintStream glStream, 37 PrintStream cStream) throws Exception { 38 String s = null; 39 while ((s = specReader.readLine()) != null) { 40 if (s.trim().startsWith("//")) { 41 continue; 42 } 43 44 CFunc cfunc = CFunc.parseCFunc(s); 45 String fname = cfunc.getName(); 46 String stubRoot = "stubs/gles11/" + fname; 47 String javaPath = stubRoot + ".java"; 48 File f = new File(javaPath); 49 if (f.exists()) { 50 System.out.println("Special-casing function " + fname); 51 copy(javaPath, glStream); 52 copy(stubRoot + ".cpp", cStream); 53 54 // Register native function names 55 // This should be improved to require fewer discrete files 56 String filename = stubRoot + ".nativeReg"; 57 BufferedReader br = 58 new BufferedReader(new FileReader(filename)); 59 String nfunc; 60 while ((nfunc = br.readLine()) != null) { 61 emitter.addNativeRegistration(nfunc); 62 } 63 } else { 64 emitter.emitCode(cfunc, s); 65 } 66 } 67 } 68 main(String[] args)69 public static void main(String[] args) throws Exception { 70 int aidx = 0; 71 while ((aidx < args.length) && (args[aidx].charAt(0) == '-')) { 72 switch (args[aidx].charAt(1)) { 73 default: 74 System.err.println("Unknown flag: " + args[aidx]); 75 System.exit(1); 76 } 77 78 aidx++; 79 } 80 81 BufferedReader checksReader = 82 new BufferedReader(new FileReader("specs/gles11/checks.spec")); 83 ParameterChecker checker = new ParameterChecker(checksReader); 84 85 // Generate files 86 for(String suffix: new String[] {"GLES10", "GLES10Ext", 87 "GLES11", "GLES11Ext", "GLES20", 88 "GLES30", "GLES31", "GLES31Ext", "GLES32"}) 89 { 90 BufferedReader spec11Reader = 91 new BufferedReader(new FileReader("specs/gles11/" 92 + suffix + ".spec")); 93 String gl11Filename = "android/opengl/" + suffix + ".java"; 94 String gl11cFilename = "android_opengl_" + suffix + ".cpp"; 95 PrintStream gl11Stream = 96 new PrintStream(new FileOutputStream("out/" + gl11Filename)); 97 PrintStream gl11cStream = 98 new PrintStream(new FileOutputStream("out/" + gl11cFilename)); 99 copy("stubs/gles11/" + suffix + "Header.java-if", gl11Stream); 100 copy("stubs/gles11/" + suffix + "cHeader.cpp", gl11cStream); 101 copy("stubs/gles11/common.cpp", gl11cStream); 102 GLESCodeEmitter emitter = new GLESCodeEmitter( 103 "android/opengl/" + suffix, 104 checker, gl11Stream, gl11cStream); 105 emit(emitter, spec11Reader, gl11Stream, gl11cStream); 106 emitter.emitNativeRegistration("register_android_opengl_jni_" 107 + suffix); 108 gl11Stream.println("}"); 109 gl11Stream.close(); 110 gl11cStream.close(); 111 } 112 } 113 } 114