From 79d9d294e6a494a2be4d22fd6b483eb9439f42ea Mon Sep 17 00:00:00 2001 From: Attila Uygun Date: Sun, 3 Oct 2021 00:43:07 +0200 Subject: [PATCH] Platform code refactoring. --- build/android/app/CMakeLists.txt | 2 +- build/linux/Makefile | 2 +- src/engine/engine.h | 2 +- .../{platform_base.cc => platform.cc} | 17 ++- src/engine/platform/platform.h | 106 +++++++++++++++++- src/engine/platform/platform_android.cc | 41 +++---- src/engine/platform/platform_android.h | 43 ------- src/engine/platform/platform_base.h | 65 ----------- src/engine/platform/platform_forward.h | 16 --- src/engine/platform/platform_linux.cc | 33 +++--- src/engine/platform/platform_linux.h | 42 ------- 11 files changed, 153 insertions(+), 216 deletions(-) rename src/engine/platform/{platform_base.cc => platform.cc} (79%) delete mode 100644 src/engine/platform/platform_android.h delete mode 100644 src/engine/platform/platform_base.h delete mode 100644 src/engine/platform/platform_forward.h delete mode 100644 src/engine/platform/platform_linux.h diff --git a/build/android/app/CMakeLists.txt b/build/android/app/CMakeLists.txt index 8ca756b..f19b8e3 100644 --- a/build/android/app/CMakeLists.txt +++ b/build/android/app/CMakeLists.txt @@ -76,7 +76,7 @@ add_library(kaliber SHARED ../../../src/engine/platform/asset_file_android.cc ../../../src/engine/platform/asset_file.cc ../../../src/engine/platform/platform_android.cc - ../../../src/engine/platform/platform_base.cc + ../../../src/engine/platform/platform.cc ../../../src/engine/renderer/geometry.cc ../../../src/engine/renderer/opengl/render_command.cc ../../../src/engine/renderer/opengl/renderer_opengl_android.cc diff --git a/build/linux/Makefile b/build/linux/Makefile index 9b02295..4702bd2 100644 --- a/build/linux/Makefile +++ b/build/linux/Makefile @@ -100,7 +100,7 @@ GLTEST_SRC := \ $(SRC_ROOT)/engine/persistent_data.cc \ $(SRC_ROOT)/engine/platform/asset_file_linux.cc \ $(SRC_ROOT)/engine/platform/asset_file.cc \ - $(SRC_ROOT)/engine/platform/platform_base.cc \ + $(SRC_ROOT)/engine/platform/platform.cc \ $(SRC_ROOT)/engine/platform/platform_linux.cc \ $(SRC_ROOT)/engine/renderer/geometry.cc \ $(SRC_ROOT)/engine/renderer/opengl/render_command.cc \ diff --git a/src/engine/engine.h b/src/engine/engine.h index 70e5a57..12879ac 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -11,7 +11,6 @@ #include "../base/vecmath.h" #include "audio/audio_forward.h" #include "persistent_data.h" -#include "platform/platform_forward.h" #include "renderer/render_resource.h" class TextureCompressor; @@ -29,6 +28,7 @@ class Renderer; class Geometry; class Shader; class Texture; +class Platform; class Engine { public: diff --git a/src/engine/platform/platform_base.cc b/src/engine/platform/platform.cc similarity index 79% rename from src/engine/platform/platform_base.cc rename to src/engine/platform/platform.cc index 97fd868..392419a 100644 --- a/src/engine/platform/platform_base.cc +++ b/src/engine/platform/platform.cc @@ -13,13 +13,13 @@ using namespace base; namespace eng { -PlatformBase::InternalError PlatformBase::internal_error; +Platform::InternalError Platform::internal_error; -PlatformBase::PlatformBase() = default; +Platform::Platform() = default; -PlatformBase::~PlatformBase() = default; +Platform::~Platform() = default; -void PlatformBase::Initialize() { +void Platform::InitializeCommon() { LOG << "Initializing platform."; worker_.Initialize(); @@ -38,16 +38,15 @@ void PlatformBase::Initialize() { #endif } -void PlatformBase::Shutdown() { +void Platform::ShutdownCommon() { LOG << "Shutting down platform."; audio_->Shutdown(); renderer_->Shutdown(); } -void PlatformBase::RunMainLoop() { - engine_ = std::make_unique(static_cast(this), - renderer_.get(), audio_.get()); +void Platform::RunMainLoop() { + engine_ = std::make_unique(this, renderer_.get(), audio_.get()); if (!engine_->Initialize()) { LOG << "Failed to initialize the engine."; throw internal_error; @@ -71,7 +70,7 @@ void PlatformBase::RunMainLoop() { while (accumulator >= time_step) { TaskRunner::GetThreadLocalTaskRunner()->SingleConsumerRun(); - static_cast(this)->Update(); + Update(); engine_->Update(time_step); if (should_exit_) { diff --git a/src/engine/platform/platform.h b/src/engine/platform/platform.h index b5b3e53..68edbee 100644 --- a/src/engine/platform/platform.h +++ b/src/engine/platform/platform.h @@ -1,20 +1,118 @@ #ifndef PLATFORM_H #define PLATFORM_H +#include +#include +#include + +#include "../../base/timer.h" +#include "../../base/worker.h" +#include "../audio/audio_forward.h" + #if defined(__ANDROID__) -#include "platform_android.h" + +#include "../../base/vecmath.h" + +struct android_app; +struct AInputEvent; + #elif defined(__linux__) -#include "platform_linux.h" + +#include +#include + #endif namespace eng { +class Renderer; +class Engine; + +class Platform { + public: + Platform(); + ~Platform(); + #if defined(__ANDROID__) -using Platform = PlatformAndroid; + void Initialize(android_app* app); #elif defined(__linux__) -using Platform = PlatformLinux; + void Initialize(); #endif + void Shutdown(); + + void Update(); + + void Exit(); + + void Vibrate(int duration); + + void ShowInterstitialAd(); + + void ShareFile(const std::string& file_name); + + void SetKeepScreenOn(bool keep_screen_on); + + void RunMainLoop(); + + int GetDeviceDpi() const { return device_dpi_; } + + const std::string& GetRootPath() const { return root_path_; } + + const std::string& GetDataPath() const { return data_path_; } + + const std::string& GetSharedDataPath() const { return shared_data_path_; } + + bool mobile_device() const { return mobile_device_; } + + static class InternalError : public std::exception { + } internal_error; + + protected: + base::Timer timer_; + + bool mobile_device_ = false; + int device_dpi_ = 100; + std::string root_path_; + std::string data_path_; + std::string shared_data_path_; + + bool has_focus_ = false; + bool should_exit_ = false; + + std::unique_ptr