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