1bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root/* 2bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * Copyright (C) 2009 The Android Open Source Project 3bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * 4bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 5bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * you may not use this file except in compliance with the License. 6bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * You may obtain a copy of the License at 7bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * 8bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * http://www.apache.org/licenses/LICENSE-2.0 9bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * 10bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * Unless required by applicable law or agreed to in writing, software 11bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 12bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * See the License for the specific language governing permissions and 14bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root * limitations under the License. 15bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root */ 16bd393b7f39a71a13893aea8b64474b0b07ebe0ddKenny Root 17412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevichimport java.io.PrintStream; 18412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 19412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich/** 20412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich * Emits a Java interface and Java & C implementation for a C function. 21412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich * 22412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich * <p> The Java interface will have Buffer and array variants for functions that 23412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich * have a typed pointer argument. The array variant will convert a single "<type> *data" 24412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich * argument to a pair of arguments "<type>[] data, int offset". 25412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich */ 26412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevichpublic class Jsr239CodeEmitter extends JniCodeEmitter implements CodeEmitter { 27412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 28412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream mJava10InterfaceStream; 29412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream mJava10ExtInterfaceStream; 30412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream mJava11InterfaceStream; 31412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream mJava11ExtInterfaceStream; 32412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream mJava11ExtPackInterfaceStream; 33412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream mJavaImplStream; 34412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream mCStream; 35412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 36412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream mJavaInterfaceStream; 37412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 38412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich /** 39412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich * @param java10InterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 functions 40412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich * @param java10ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 extension functions 41412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich * @param java11InterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 functions 42412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich * @param java11ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension functions 43412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich * @param java11ExtPackInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension Pack functions 44412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich * @param javaImplStream the PrintStream to which to emit the Java implementation 45412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich * @param cStream the PrintStream to which to emit the C implementation 46412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich */ 47412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public Jsr239CodeEmitter(String classPathName, 48412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich ParameterChecker checker, 49412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream java10InterfaceStream, 50412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream java10ExtInterfaceStream, 51412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream java11InterfaceStream, 52412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream java11ExtInterfaceStream, 53412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream java11ExtPackInterfaceStream, 54412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream javaImplStream, 55412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich PrintStream cStream, 56412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich boolean useContextPointer) { 57412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mClassPathName = classPathName; 58412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mChecker = checker; 59412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mJava10InterfaceStream = java10InterfaceStream; 60412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mJava10ExtInterfaceStream = java10ExtInterfaceStream; 61412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mJava11InterfaceStream = java11InterfaceStream; 62412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mJava11ExtInterfaceStream = java11ExtInterfaceStream; 63412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mJava11ExtPackInterfaceStream = java11ExtPackInterfaceStream; 64412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mJavaImplStream = javaImplStream; 65412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mCStream = cStream; 66412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mUseContextPointer = useContextPointer; 67412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 68412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 69412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public void setVersion(int version, boolean ext, boolean pack) { 70412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich if (version == 0) { 71412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mJavaInterfaceStream = ext ? mJava10ExtInterfaceStream : 72412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mJava10InterfaceStream; 73412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } else if (version == 1) { 74412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mJavaInterfaceStream = ext ? 75412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich (pack ? mJava11ExtPackInterfaceStream : 76412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mJava11ExtInterfaceStream) : 77412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich mJava11InterfaceStream; 78412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } else { 79412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich throw new RuntimeException("Bad version: " + version); 80412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 81412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 82412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 83412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public void emitCode(CFunc cfunc, String original) { 84412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich emitCode(cfunc, original, mJavaInterfaceStream, mJavaImplStream, mCStream); 85412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 86412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich 87412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich public void emitNativeRegistration() { 88412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich emitNativeRegistration("register_com_google_android_gles_jni_GLImpl", mCStream); 89412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich } 90412f38f270b71bbc3214362eb58687cbf26d6df2Jack Palevich} 91