From 6e952e511e2524a62d3f79ca4443d13426043561 Mon Sep 17 00:00:00 2001 From: Attila Uygun Date: Wed, 9 Aug 2023 23:02:12 +0200 Subject: [PATCH] Add Platform::CreateMainWindow --- src/engine/engine.cc | 9 ++++++--- src/engine/platform/platform.h | 2 ++ src/engine/platform/platform_android.cc | 18 +++++++++--------- src/engine/platform/platform_linux.cc | 6 +++++- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/engine/engine.cc b/src/engine/engine.cc index ec63947..ff72159 100644 --- a/src/engine/engine.cc +++ b/src/engine/engine.cc @@ -108,6 +108,8 @@ void Engine::Initialize() { thread_pool_.Initialize(); + platform_->CreateMainWindow(); + CreateRendererInternal(RendererType::kVulkan); CreateProjectionMatrix(); @@ -485,7 +487,8 @@ bool Engine::IsMobile() const { } void Engine::OnWindowCreated() { - renderer_->Initialize(platform_); + if (renderer_) + renderer_->Initialize(platform_); } void Engine::OnWindowDestroyed() { @@ -493,8 +496,8 @@ void Engine::OnWindowDestroyed() { } void Engine::OnWindowResized(int width, int height) { - if (width != renderer_->GetScreenWidth() || - height != renderer_->GetScreenHeight()) { + if (renderer_ && (width != renderer_->GetScreenWidth() || + height != renderer_->GetScreenHeight())) { renderer_->OnWindowResized(width, height); CreateProjectionMatrix(); } diff --git a/src/engine/platform/platform.h b/src/engine/platform/platform.h index 37e1805..324d65a 100644 --- a/src/engine/platform/platform.h +++ b/src/engine/platform/platform.h @@ -31,6 +31,8 @@ class Platform { #endif ~Platform(); + void CreateMainWindow(); + void Update(); void Exit(); diff --git a/src/engine/platform/platform_android.cc b/src/engine/platform/platform_android.cc index f6f3178..462ca7e 100644 --- a/src/engine/platform/platform_android.cc +++ b/src/engine/platform/platform_android.cc @@ -292,20 +292,18 @@ void Platform::HandleCmd(android_app* app, int32_t cmd) { DLOG(0) << "APP_CMD_INIT_WINDOW"; if (app->window != NULL) { platform->SetFrameRate(60); - if (platform->observer_) - platform->observer_->OnWindowCreated(); + platform->observer_->OnWindowCreated(); } break; case APP_CMD_TERM_WINDOW: DLOG(0) << "APP_CMD_TERM_WINDOW"; - if (platform->observer_) - platform->observer_->OnWindowDestroyed(); + platform->observer_->OnWindowDestroyed(); break; case APP_CMD_CONFIG_CHANGED: DLOG(0) << "APP_CMD_CONFIG_CHANGED"; - if (platform->app_->window != NULL && platform->observer_) + if (platform->app_->window != NULL) platform->observer_->OnWindowResized( ANativeWindow_getWidth(app->window), ANativeWindow_getHeight(app->window)); @@ -319,16 +317,14 @@ void Platform::HandleCmd(android_app* app, int32_t cmd) { DLOG(0) << "APP_CMD_GAINED_FOCUS"; // platform->timer_.Reset(); platform->has_focus_ = true; - if (platform->observer_) - platform->observer_->GainedFocus(g_showing_interstitial_ad); + platform->observer_->GainedFocus(g_showing_interstitial_ad); g_showing_interstitial_ad = false; break; case APP_CMD_LOST_FOCUS: DLOG(0) << "APP_CMD_LOST_FOCUS"; platform->has_focus_ = false; - if (platform->observer_) - platform->observer_->LostFocus(); + platform->observer_->LostFocus(); break; case APP_CMD_LOW_MEMORY: @@ -370,8 +366,12 @@ Platform::Platform(android_app* app) { reinterpret_cast( dlsym(mLibAndroid, "ANativeWindow_setFrameRateWithChangeStrategy")); } +} +void Platform::CreateMainWindow() { + DCHECK(!app_->window); Update(); + DCHECK(app_->window); } Platform::~Platform() { diff --git a/src/engine/platform/platform_linux.cc b/src/engine/platform/platform_linux.cc index 3a10433..2e3fb16 100644 --- a/src/engine/platform/platform_linux.cc +++ b/src/engine/platform/platform_linux.cc @@ -39,7 +39,9 @@ Platform::Platform() { LOG(0) << "Root path: " << root_path_.c_str(); LOG(0) << "Data path: " << data_path_.c_str(); LOG(0) << "Shared data path: " << shared_data_path_.c_str(); +} +void Platform::CreateMainWindow() { bool res = CreateWindow(800, 1205); CHECK(res) << "Failed to create window."; @@ -103,8 +105,10 @@ void Platform::Update() { } case ClientMessage: { // WM_DELETE_WINDOW is the only registered type for now. + observer_->OnWindowDestroyed(); + DestroyWindow(); should_exit_ = true; - break; + return; } case ConfigureNotify: { XConfigureEvent xce = e.xconfigure;