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.PrintStream; 18 19 /** 20 * Emits a Java interface and Java & C implementation for a C function. 21 * 22 * <p> The Java interface will have Buffer and array variants for functions that 23 * have a typed pointer argument. The array variant will convert a single "<type> *data" 24 * argument to a pair of arguments "<type>[] data, int offset". 25 */ 26 public class Jsr239CodeEmitter extends JniCodeEmitter implements CodeEmitter { 27 28 PrintStream mJava10InterfaceStream; 29 PrintStream mJava10ExtInterfaceStream; 30 PrintStream mJava11InterfaceStream; 31 PrintStream mJava11ExtInterfaceStream; 32 PrintStream mJava11ExtPackInterfaceStream; 33 PrintStream mJavaImplStream; 34 PrintStream mCStream; 35 36 PrintStream mJavaInterfaceStream; 37 38 /** 39 * @param java10InterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 functions 40 * @param java10ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 extension functions 41 * @param java11InterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 functions 42 * @param java11ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension functions 43 * @param java11ExtPackInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension Pack functions 44 * @param javaImplStream the PrintStream to which to emit the Java implementation 45 * @param cStream the PrintStream to which to emit the C implementation 46 */ Jsr239CodeEmitter(String classPathName, ParameterChecker checker, PrintStream java10InterfaceStream, PrintStream java10ExtInterfaceStream, PrintStream java11InterfaceStream, PrintStream java11ExtInterfaceStream, PrintStream java11ExtPackInterfaceStream, PrintStream javaImplStream, PrintStream cStream, boolean useContextPointer)47 public Jsr239CodeEmitter(String classPathName, 48 ParameterChecker checker, 49 PrintStream java10InterfaceStream, 50 PrintStream java10ExtInterfaceStream, 51 PrintStream java11InterfaceStream, 52 PrintStream java11ExtInterfaceStream, 53 PrintStream java11ExtPackInterfaceStream, 54 PrintStream javaImplStream, 55 PrintStream cStream, 56 boolean useContextPointer) { 57 mClassPathName = classPathName; 58 mChecker = checker; 59 mJava10InterfaceStream = java10InterfaceStream; 60 mJava10ExtInterfaceStream = java10ExtInterfaceStream; 61 mJava11InterfaceStream = java11InterfaceStream; 62 mJava11ExtInterfaceStream = java11ExtInterfaceStream; 63 mJava11ExtPackInterfaceStream = java11ExtPackInterfaceStream; 64 mJavaImplStream = javaImplStream; 65 mCStream = cStream; 66 mUseContextPointer = useContextPointer; 67 } 68 setVersion(int version, boolean ext, boolean pack)69 public void setVersion(int version, boolean ext, boolean pack) { 70 if (version == 0) { 71 mJavaInterfaceStream = ext ? mJava10ExtInterfaceStream : 72 mJava10InterfaceStream; 73 } else if (version == 1) { 74 mJavaInterfaceStream = ext ? 75 (pack ? mJava11ExtPackInterfaceStream : 76 mJava11ExtInterfaceStream) : 77 mJava11InterfaceStream; 78 } else { 79 throw new RuntimeException("Bad version: " + version); 80 } 81 } 82 emitCode(CFunc cfunc, String original)83 public void emitCode(CFunc cfunc, String original) { 84 emitCode(cfunc, original, mJavaInterfaceStream, mJavaImplStream, mCStream); 85 } 86 emitNativeRegistration()87 public void emitNativeRegistration() { 88 emitNativeRegistration("register_com_google_android_gles_jni_GLImpl", mCStream); 89 } 90 } 91