From 5e55cec6d418a2dc1fdcbe5c9f7bf26776070a82 Mon Sep 17 00:00:00 2001 From: James Sanford Date: Fri, 10 Aug 2012 00:20:02 -0700 Subject: [PATCH] Add high level description of how JNI is used --- README.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2bb3b94..c689113 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ The touch screen acts as a big trackpad for the mouse. To click and drag, for example to pull down GS/OS menus, you need to Long Press first. What's not ready yet: -- No audio. - No joystick. - Screen scaling to fit your device. - Native UI configuration options. @@ -23,3 +22,26 @@ To build from source: (cd jni && ndk-build) ant debug install + + +Changes made to KEGS: +- Various ifdefs for __ANDROID__ in the kegs 'core' +- Addition of android_driver.c and android_sound_driver.c + +Application structure: +- The UI is coordinated via KegsMain +- There is a KegsView$KegsThread class that gets its own thread. This thread ends up calling mainLoop() in jni/android_driver.c and running KEGS in that thread. +- The native thread gets two things from Java: +-- a Bitmap +-- a ConcurrentLinkedQueue + +All UI events are sent to the native thread by pushing events into the ConcurrentLinkedQueue (KegsEvent, MouseKegsEvent, KeyKegsEvent). + +The native thread pulls events off the queue, writes updates into the bitmap object, then calls the Java "updateScreen" in the KegsView$KegsThread object. + +The native thread also calls support functions in Java, such as checkForPause(), which deadlocks the thread while it should be paused. + +Android NDK samples were used as a base for this: +- bitmap-plasma +- JetBoy +- native-audio