config_android.cxx 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /**
  2. * PANDA 3D SOFTWARE
  3. * Copyright (c) Carnegie Mellon University. All rights reserved.
  4. *
  5. * All use of this software is subject to the terms of the revised BSD
  6. * license. You should have received a copy of this license along
  7. * with this source code in a file named "LICENSE."
  8. *
  9. * @file config_android.cxx
  10. * @author rdb
  11. * @date 2013-01-12
  12. */
  13. #include "config_android.h"
  14. #include "pnmFileTypeAndroid.h"
  15. #include "pnmFileTypeRegistry.h"
  16. #include "dconfig.h"
  17. #include "pandaSystem.h"
  18. NotifyCategoryDef(android, "");
  19. struct android_app *panda_android_app = NULL;
  20. jclass jni_PandaActivity;
  21. jmethodID jni_PandaActivity_readBitmapSize;
  22. jmethodID jni_PandaActivity_readBitmap;
  23. jclass jni_BitmapFactory_Options;
  24. jfieldID jni_BitmapFactory_Options_outWidth;
  25. jfieldID jni_BitmapFactory_Options_outHeight;
  26. /**
  27. * Initializes the library. This must be called at least once before any of
  28. * the functions or classes in this library can be used. Normally, this is
  29. * called by JNI_OnLoad.
  30. */
  31. void
  32. init_libandroid() {
  33. PNMFileTypeRegistry *tr = PNMFileTypeRegistry::get_global_ptr();
  34. PNMFileTypeAndroid::init_type();
  35. PNMFileTypeAndroid::register_with_read_factory();
  36. tr->register_type(new PNMFileTypeAndroid);
  37. }
  38. /**
  39. * Called by Java when loading this library. Initializes the global class
  40. * references and the method IDs.
  41. */
  42. jint JNI_OnLoad(JavaVM *jvm, void *reserved) {
  43. init_libandroid();
  44. Thread *thread = Thread::get_current_thread();
  45. JNIEnv *env = thread->get_jni_env();
  46. nassertr(env != nullptr, -1);
  47. jni_PandaActivity = env->FindClass("org/panda3d/android/PandaActivity");
  48. jni_PandaActivity = (jclass) env->NewGlobalRef(jni_PandaActivity);
  49. jni_PandaActivity_readBitmapSize = env->GetStaticMethodID(jni_PandaActivity,
  50. "readBitmapSize", "(J)Landroid/graphics/BitmapFactory$Options;");
  51. jni_PandaActivity_readBitmap = env->GetStaticMethodID(jni_PandaActivity,
  52. "readBitmap", "(JI)Landroid/graphics/Bitmap;");
  53. jni_BitmapFactory_Options = env->FindClass("android/graphics/BitmapFactory$Options");
  54. jni_BitmapFactory_Options = (jclass) env->NewGlobalRef(jni_BitmapFactory_Options);
  55. jni_BitmapFactory_Options_outWidth = env->GetFieldID(jni_BitmapFactory_Options, "outWidth", "I");
  56. jni_BitmapFactory_Options_outHeight = env->GetFieldID(jni_BitmapFactory_Options, "outHeight", "I");
  57. return JNI_VERSION_1_4;
  58. }
  59. /**
  60. * Called by Java when unloading this library. Destroys the global class
  61. * references.
  62. */
  63. void JNI_OnUnload(JavaVM *jvm, void *reserved) {
  64. Thread *thread = Thread::get_current_thread();
  65. JNIEnv *env = thread->get_jni_env();
  66. nassertv(env != nullptr);
  67. env->DeleteGlobalRef(jni_PandaActivity);
  68. env->DeleteGlobalRef(jni_BitmapFactory_Options);
  69. }