Skip to content

Commit be09133

Browse files
committed
fix possible rendering edge cases
1 parent 7ecb18d commit be09133

File tree

3 files changed

+379
-234
lines changed

3 files changed

+379
-234
lines changed

NativeApp/include/Android/AndroidAppBase.hpp

Lines changed: 89 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@
2626
#pragma once
2727

2828
#include <memory>
29+
#include <mutex>
2930

3031
#include <android_native_app_glue.h>
32+
#include <FlagEnum.h>
3133
#include "AppBase.hpp"
3234

3335
#include "NDKHelper.h"
@@ -38,62 +40,92 @@ namespace Diligent
3840
{
3941

4042
/// Base class for Android applications.
41-
class AndroidAppBase : public AppBase
42-
{
43-
public:
44-
int InitDisplay();
45-
void SetState(android_app* state, const char* native_activity_class_name);
46-
void InitSensors();
47-
void ProcessSensors(int32_t id);
48-
virtual void DrawFrame();
49-
bool IsReady();
50-
virtual void TrimMemory() = 0;
51-
virtual void TermDisplay() = 0;
52-
static int32_t HandleInput(android_app* app, AInputEvent* event);
53-
static void HandleCmd(android_app* app, int32_t cmd);
54-
55-
protected:
56-
virtual void Initialize()
57-
{
58-
}
59-
60-
virtual int Resume(ANativeWindow* window) = 0;
61-
62-
virtual int32_t HandleInput(AInputEvent* event) { return 0; }
63-
64-
virtual void LoadResources()
65-
{
66-
//renderer_.Init();
67-
//renderer_.Bind( &tap_camera_ );
68-
}
69-
70-
virtual void UnloadResources()
71-
{
72-
//renderer_.Unload();
73-
}
74-
75-
ndk_helper::DoubletapDetector doubletap_detector_;
76-
ndk_helper::PinchDetector pinch_detector_;
77-
ndk_helper::DragDetector drag_detector_;
78-
ndk_helper::PerfMonitor monitor_;
79-
80-
//ndk_helper::TapCamera tap_camera_;
81-
android_app* app_ = nullptr;
82-
std::string native_activity_class_name_;
83-
84-
private:
85-
void UpdatePosition(AInputEvent* event, int32_t iIndex, float& fX, float& fY);
86-
void SuspendSensors();
87-
void ResumeSensors();
88-
void ShowUI();
89-
void UpdateFPS(float fFPS);
90-
91-
bool initialized_resources_ = false;
92-
bool has_focus_ = false;
93-
94-
ASensorManager* sensor_manager_ = nullptr;
95-
const ASensor* accelerometer_sensor_ = nullptr;
96-
ASensorEventQueue* sensor_event_queue_ = nullptr;
97-
};
43+
class AndroidAppBase : public AppBase {
44+
public:
45+
int InitDisplay();
46+
47+
void SetState(android_app *state, const char *native_activity_class_name);
48+
49+
void InitSensors();
50+
51+
void ProcessSensors(int32_t id);
52+
53+
virtual void DrawFrame();
54+
55+
bool IsReady();
56+
57+
virtual void TrimMemory() = 0;
58+
59+
virtual void TermDisplay() = 0;
60+
61+
static int32_t HandleInput(android_app *app, AInputEvent *event);
62+
63+
static void HandleCmd(android_app *app, int32_t cmd);
64+
65+
enum APP_STATUS_FLAGS {
66+
APP_STATUS_FLAG_NONE = 0x00000000,
67+
// Android lifecycle status flags. Not app-specific
68+
// Set between onCreate and onDestroy
69+
APP_STATUS_FLAG_RUNNING = 0x00000001,
70+
// Set between onResume and onPause
71+
APP_STATUS_FLAG_ACTIVE = 0x00000002,
72+
// Set between onWindowFocusChanged(true) and (false)
73+
APP_STATUS_FLAG_FOCUSED = 0x00000004,
74+
// Set when the app's SurfaceHolder points to a
75+
// valid, nonzero-sized surface
76+
APP_STATUS_FLAG_HAS_REAL_SURFACE = 0x00000008,
77+
};
78+
79+
APP_STATUS_FLAGS app_status_ = APP_STATUS_FLAG_NONE;
80+
protected:
81+
virtual void Initialize() {
82+
}
83+
84+
virtual int Resume(ANativeWindow *window) = 0;
85+
86+
virtual int32_t HandleInput(AInputEvent *event) { return 0; }
87+
88+
virtual void LoadResources() {
89+
//renderer_.Init();
90+
//renderer_.Bind( &tap_camera_ );
91+
}
92+
93+
virtual void UnloadResources() {
94+
//renderer_.Unload();
95+
}
96+
97+
ndk_helper::DoubletapDetector doubletap_detector_;
98+
ndk_helper::PinchDetector pinch_detector_;
99+
ndk_helper::DragDetector drag_detector_;
100+
ndk_helper::PerfMonitor monitor_;
101+
102+
//ndk_helper::TapCamera tap_camera_;
103+
android_app *app_ = nullptr;
104+
std::string native_activity_class_name_;
105+
106+
std::mutex mutex;
107+
108+
private:
109+
void UpdatePosition(AInputEvent *event, int32_t iIndex, float &fX, float &fY);
110+
111+
void SuspendSensors();
112+
113+
void ResumeSensors();
114+
115+
void ShowUI();
116+
117+
void UpdateFPS(float fFPS);
118+
119+
bool initialized_resources_ = false;
120+
121+
int32_t window_width_ = 0;
122+
int32_t window_height_ = 0;
123+
124+
ASensorManager* sensor_manager_ = nullptr;
125+
const ASensor* accelerometer_sensor_ = nullptr;
126+
ASensorEventQueue* sensor_event_queue_ = nullptr;
127+
};
128+
129+
DEFINE_FLAG_ENUM_OPERATORS(AndroidAppBase::APP_STATUS_FLAGS)
98130

99131
} // namespace Diligent

0 commit comments

Comments
 (0)