/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.io.PrintStream;
/**
* Emits a Java interface and Java & C implementation for a C function.
*
* <p> The Java interface will have Buffer and array variants for functions that
* have a typed pointer argument. The array variant will convert a single "<type> *data"
* argument to a pair of arguments "<type>[] data, int offset".
*/
public class Jsr239CodeEmitter extends JniCodeEmitter implements CodeEmitter {
PrintStream mJava10InterfaceStream;
PrintStream mJava10ExtInterfaceStream;
PrintStream mJava11InterfaceStream;
PrintStream mJava11ExtInterfaceStream;
PrintStream mJava11ExtPackInterfaceStream;
PrintStream mJavaImplStream;
PrintStream mCStream;
PrintStream mJavaInterfaceStream;
/**
* @param java10InterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 functions
* @param java10ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.0 extension functions
* @param java11InterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 functions
* @param java11ExtInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension functions
* @param java11ExtPackInterfaceStream the PrintStream to which to emit the Java interface for GL 1.1 Extension Pack functions
* @param javaImplStream the PrintStream to which to emit the Java implementation
* @param cStream the PrintStream to which to emit the C implementation
*/
public Jsr239CodeEmitter(String classPathName,
ParameterChecker checker,
PrintStream java10InterfaceStream,
PrintStream java10ExtInterfaceStream,
PrintStream java11InterfaceStream,
PrintStream java11ExtInterfaceStream,
PrintStream java11ExtPackInterfaceStream,
PrintStream javaImplStream,
PrintStream cStream,
boolean useContextPointer) {
mClassPathName = classPathName;
mChecker = checker;
mJava10InterfaceStream = java10InterfaceStream;
mJava10ExtInterfaceStream = java10ExtInterfaceStream;
mJava11InterfaceStream = java11InterfaceStream;
mJava11ExtInterfaceStream = java11ExtInterfaceStream;
mJava11ExtPackInterfaceStream = java11ExtPackInterfaceStream;
mJavaImplStream = javaImplStream;
mCStream = cStream;
mUseContextPointer = useContextPointer;
}
public void setVersion(int version, boolean ext, boolean pack) {
if (version == 0) {
mJavaInterfaceStream = ext ? mJava10ExtInterfaceStream :
mJava10InterfaceStream;
} else if (version == 1) {
mJavaInterfaceStream = ext ?
(pack ? mJava11ExtPackInterfaceStream :
mJava11ExtInterfaceStream) :
mJava11InterfaceStream;
} else {
throw new RuntimeException("Bad version: " + version);
}
}
public void emitCode(CFunc cfunc, String original) {
emitCode(cfunc, original, mJavaInterfaceStream, mJavaImplStream, mCStream);
}
public void emitNativeRegistration() {
emitNativeRegistration("register_com_google_android_gles_jni_GLImpl", mCStream);
}
}