diff options
author | dhewg | 2011-02-27 20:13:48 +0100 |
---|---|---|
committer | dhewg | 2011-03-02 23:18:34 +0100 |
commit | 2333a32697cda8f5f73861856889001839f38f25 (patch) | |
tree | 048a743c33bdcf2f508fd031556abd1079d735c6 /backends/platform/android/jni.h | |
parent | b84b56b2481bac8ad92ffe6870b28b288011bf6a (diff) | |
download | scummvm-rg350-2333a32697cda8f5f73861856889001839f38f25.tar.gz scummvm-rg350-2333a32697cda8f5f73861856889001839f38f25.tar.bz2 scummvm-rg350-2333a32697cda8f5f73861856889001839f38f25.zip |
ANDROID: Untangle JNI interweaving
- make the startup sequence more linear
- use SurfaceHolder events
- get rid of the surface lock
- remove unnecessary JNI calls
- make the ScummVM class implement Runnable
- cleanup
Diffstat (limited to 'backends/platform/android/jni.h')
-rw-r--r-- | backends/platform/android/jni.h | 48 |
1 files changed, 19 insertions, 29 deletions
diff --git a/backends/platform/android/jni.h b/backends/platform/android/jni.h index 0bc64980e2..0005136966 100644 --- a/backends/platform/android/jni.h +++ b/backends/platform/android/jni.h @@ -41,6 +41,10 @@ private: virtual ~JNI(); public: + static int surface_changeid; + static int egl_surface_width; + static int egl_surface_height; + static jint onLoad(JavaVM *vm); static JNIEnv *getEnv(); @@ -48,16 +52,17 @@ public: static void attachThread(); static void detachThread(); - static void initBackend(); + static void setReadyForEvents(bool ready); + static void getPluginDirectories(Common::FSList &dirs); static void setWindowCaption(const char *caption); static void displayMessageOnOSD(const char *msg); static void showVirtualKeyboard(bool enable); static void addSysArchivesToSearchSet(Common::SearchSet &s, int priority); - static inline bool setupSurface(); - static inline void destroySurface(); - static inline bool swapBuffers(); + static inline int swapBuffers(); + static void initSurface(); + static void deinitSurface(); static void setAudioPause(); static void setAudioPlay(); @@ -75,6 +80,8 @@ private: static Common::Archive *_asset_archive; static OSystem_Android *_system; + static bool _ready_for_events; + static jfieldID _FID_Event_type; static jfieldID _FID_Event_synthetic; static jfieldID _FID_Event_kbd_keycode; @@ -87,13 +94,12 @@ private: static jmethodID _MID_displayMessageOnOSD; static jmethodID _MID_setWindowCaption; - static jmethodID _MID_initBackend; static jmethodID _MID_showVirtualKeyboard; static jmethodID _MID_getSysArchives; static jmethodID _MID_getPluginDirectories; - static jmethodID _MID_setupScummVMSurface; - static jmethodID _MID_destroyScummVMSurface; static jmethodID _MID_swapBuffers; + static jmethodID _MID_initSurface; + static jmethodID _MID_deinitSurface; static jmethodID _MID_AudioTrack_flush; static jmethodID _MID_AudioTrack_pause; @@ -104,40 +110,24 @@ private: static const JNINativeMethod _natives[]; static void throwByName(JNIEnv *env, const char *name, const char *msg); + static void throwRuntimeException(JNIEnv *env, const char *msg); // natives for the dark side static void create(JNIEnv *env, jobject self, jobject am, jobject at, jint sample_rate, jint buffer_size); static void destroy(JNIEnv *env, jobject self); + + static void setSurface(JNIEnv *env, jobject self, jint width, jint height); static jint main(JNIEnv *env, jobject self, jobjectArray args); + static void pushEvent(JNIEnv *env, jobject self, jobject java_event); - static void setConfManInt(JNIEnv *env, jclass cls, jstring key_obj, - jint value); - static void setConfManString(JNIEnv *env, jclass cls, jstring key_obj, - jstring value_obj); static void enableZoning(JNIEnv *env, jobject self, jboolean enable); - static void setSurfaceSize(JNIEnv *env, jobject self, jint width, - jint height); }; -inline bool JNI::setupSurface() { - JNIEnv *env = JNI::getEnv(); - - env->CallVoidMethod(_jobj, _MID_setupScummVMSurface); - - return !env->ExceptionCheck(); -} - -inline void JNI::destroySurface() { - JNIEnv *env = JNI::getEnv(); - - env->CallVoidMethod(_jobj, _MID_destroyScummVMSurface); -} - -inline bool JNI::swapBuffers() { +inline int JNI::swapBuffers() { JNIEnv *env = JNI::getEnv(); - return env->CallBooleanMethod(_jobj, _MID_swapBuffers); + return env->CallIntMethod(_jobj, _MID_swapBuffers); } inline int JNI::writeAudio(JNIEnv *env, jbyteArray &data, int offset, int size) { |