Plasma Engine  2.0
Loading...
Searching...
No Matches
ApplicationEntryPoint_android.h
1#pragma once
2
4#include <Foundation/Application/Application.h>
5#include <Foundation/Basics/Platform/Android/AndroidUtils.h>
6
7class plApplication;
8
9extern PL_FOUNDATION_DLL void plAndroidRun(struct android_app* pAndroidApp, plApplication* pApp);
10
11namespace plApplicationDetails
12{
13 template <typename AppClass, typename... Args>
14 void EntryFunc(struct android_app* pAndroidApp, Args&&... arguments)
15 {
16 alignas(PL_ALIGNMENT_OF(AppClass)) static char appBuffer[sizeof(AppClass)]; // Not on the stack to cope with smaller stacks.
17 plAndroidUtils::SetAndroidApp(pAndroidApp);
18 AppClass* pApp = new (appBuffer) AppClass(std::forward<Args>(arguments)...);
19
20 plAndroidRun(pAndroidApp, pApp);
21
22 pApp->~AppClass();
23 memset(pApp, 0, sizeof(AppClass));
24 }
25} // namespace plApplicationDetails
26
27
29#define PL_CONSOLEAPP_ENTRY_POINT(...) PL_APPLICATION_ENTRY_POINT(__VA_ARGS__)
30
35#define PL_APPLICATION_ENTRY_POINT(AppClass, ...) \
36 alignas(PL_ALIGNMENT_OF(AppClass)) static char appBuffer[sizeof(AppClass)]; /* Not on the stack to cope with smaller stacks */ \
37 PL_APPLICATION_ENTRY_POINT_CODE_INJECTION \
38 extern "C" void android_main(struct android_app* app) \
39 { \
40 ::plApplicationDetails::EntryFunc<AppClass>(app, ##__VA_ARGS__); \
41 }
Base class to be used by applications based on plEngine.
Definition Application.h:66