Fixed freeglut.pdb install for builds with MSVC compiler and NMake.
[freeglut] / src / android / fg_runtime_android.c
index e83c2d3..d96f3af 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * freeglut_runtime_android.c
+ * fg_runtime_android.c
  *
  * Android runtime
  *
@@ -23,7 +23,7 @@
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
-/* Parts taken from Android NDK's 'native-activity' sample : */
+/* Parts taken from Android NDK's 'native-activity' sample: */
 /*
  * Copyright (C) 2010 The Android Open Source Project
  * 
 #include <android/asset_manager.h>
 #include <android/native_window.h>
 #include "android/native_app_glue/android_native_app_glue.h"
+#include "android/fg_main_android.h"
 
-#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "FreeGLUT", __VA_ARGS__))
-#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "FreeGLUT", __VA_ARGS__))
+#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "FreeGLUT-jnicb", __VA_ARGS__))
+#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "FreeGLUT-jnicb", __VA_ARGS__))
 
-/* Cf. freeglut_main_android.c */
+/* Cf. fg_main_android.c */
 extern int32_t handle_input(struct android_app* app, AInputEvent* event);
 extern void handle_cmd(struct android_app* app, int32_t cmd);
 
@@ -78,7 +79,6 @@ static void onNativeWindowResized(ANativeActivity* activity, ANativeWindow* wind
 static void onNativeWindowRedrawNeeded(ANativeActivity* activity, ANativeWindow* window) {
   LOGI("onNativeWindowRedrawNeeded: %p\n", (void*)activity);
   struct android_app* app = (struct android_app*)activity->instance;
-  //if (fgDisplay.pDisplay.single_window->Window.pContext.eglSurface != EGL_NO_SURFACE)
   android_app_write_cmd(app, APP_CMD_WINDOW_RESIZED);
 }
 
@@ -128,6 +128,8 @@ static void extract_assets(struct android_app* app) {
       AAssetDir_close(assetDir);
     }
   }
+
+  (*vm)->DetachCurrentThread(vm);
 }
 
 /**
@@ -136,9 +138,9 @@ static void extract_assets(struct android_app* app) {
  * event loop for receiving input events and doing other things.
  */
 void android_main(struct android_app* app) {
-  LOGI("android_main");
+  LOGI("android_main savedState=%p", app->savedState);
 
-  // Register window resize callback
+  /* Register window resize callback */
   app->activity->callbacks->onNativeWindowResized = onNativeWindowResized;
   app->activity->callbacks->onContentRectChanged = onContentRectChanged;
   app->activity->callbacks->onNativeWindowRedrawNeeded = onNativeWindowRedrawNeeded;
@@ -152,9 +154,16 @@ void android_main(struct android_app* app) {
   {
     char progname[5] = "self";
     char* argv[] = {progname, NULL};
+    fgDisplay.pDisplay.app = app;
     main(1, argv);
+    /* FreeGLUT will exit() by itself if
+       GLUT_ACTION_ON_WINDOW_CLOSE == GLUT_ACTION_EXIT */
   }
 
   LOGI("android_main: end");
-  exit(0);
+
+  /* Let NativeActivity restart us */
+  /* Users may want to forcibly exit() in their main() anyway because
+     NativeActivity doesn't dlclose() us, so all statically-assigned
+     variables keep their old values on restart.. */
 }