summaryrefslogtreecommitdiffstats
path: root/NativeApp/src/Android/AndroidMain.cpp
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2019-11-11 15:42:14 +0000
committerEgor Yusov <egor.yusov@gmail.com>2019-11-11 15:42:14 +0000
commitee177d37df85b982d6c528a7b79e3cd9ca9749d6 (patch)
treedda6c9b0c2a3f2756c08b71ebaca32644dbc9d32 /NativeApp/src/Android/AndroidMain.cpp
parentUpdated HLSL2GLSL converter app (diff)
downloadDiligentTools-ee177d37df85b982d6c528a7b79e3cd9ca9749d6.tar.gz
DiligentTools-ee177d37df85b982d6c528a7b79e3cd9ca9749d6.zip
Moved Native App from master repository
Diffstat (limited to 'NativeApp/src/Android/AndroidMain.cpp')
-rw-r--r--NativeApp/src/Android/AndroidMain.cpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/NativeApp/src/Android/AndroidMain.cpp b/NativeApp/src/Android/AndroidMain.cpp
new file mode 100644
index 0000000..6e65b8a
--- /dev/null
+++ b/NativeApp/src/Android/AndroidMain.cpp
@@ -0,0 +1,93 @@
+ /* Copyright 2015-2018 Egor Yusov
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF ANY PROPRIETARY RIGHTS.
+ *
+ * In no event and under no legal theory, whether in tort (including negligence),
+ * contract, or otherwise, unless required by applicable law (such as deliberate
+ * and grossly negligent acts) or agreed to in writing, shall any Contributor be
+ * liable for any damages, including any direct, indirect, special, incidental,
+ * or consequential damages of any character arising as a result of this License or
+ * out of the use or inability to use the software (including but not limited to damages
+ * for loss of goodwill, work stoppage, computer failure or malfunction, or any and
+ * all other commercial damages or losses), even if such Contributor has been advised
+ * of the possibility of such damages.
+ */
+
+#include <memory>
+#include <jni.h>
+#include <errno.h>
+
+#include "PlatformDefinitions.h"
+#include "NativeAppBase.h"
+
+
+#define HELPER_CLASS_NAME "com/android/helper/NDKHelper" //Class name of helper function
+#define NATIVEACTIVITY_CLASS_NAME "android/app/NativeActivity"
+
+using namespace Diligent;
+
+// This is the main entry point of a native application that is using
+// android_native_app_glue. It runs in its own thread, with its own
+// event loop for receiving input events and doing other things.
+void android_main( android_app* state )
+{
+ std::unique_ptr<AndroidAppBase> theApp(CreateApplication());
+ theApp->SetState( state, NATIVEACTIVITY_CLASS_NAME );
+
+ //Init helper functions
+ ndk_helper::JNIHelper::Init( state->activity, HELPER_CLASS_NAME );
+
+ state->userData = theApp.get();
+ state->onAppCmd = AndroidAppBase::HandleCmd;
+ state->onInputEvent = AndroidAppBase::HandleInput;
+
+#ifdef USE_NDK_PROFILER
+ monstartup( "libEngineSandbox.so" );
+#endif
+
+ // Prepare to monitor accelerometer
+ theApp->InitSensors();
+
+ // loop waiting for stuff to do.
+ while( 1 )
+ {
+ // Read all pending events.
+ int id;
+ int events;
+ android_poll_source* source;
+
+ // If not animating, we will block forever waiting for events.
+ // If animating, we loop until all events are read, then continue
+ // to draw the next frame of animation.
+ while( (id = ALooper_pollAll( theApp->IsReady() ? 0 : -1, NULL, &events, (void**)&source )) >= 0 )
+ {
+ // Process this event.
+ if( source != NULL )
+ source->process( state, source );
+
+ theApp->ProcessSensors( id );
+
+ // Check if we are exiting.
+ if( state->destroyRequested != 0 )
+ {
+ theApp->TermDisplay();
+ return;
+ }
+ }
+
+ if( theApp->IsReady() )
+ {
+ // Drawing is throttled to the screen update rate, so there
+ // is no need to do timing here.
+ theApp->DrawFrame();
+ }
+ }
+}