From 1c8c92862a4c5c9e4a99f0773669e68a41f3efcc Mon Sep 17 00:00:00 2001 From: Nomango Date: Sun, 26 Jul 2020 19:00:00 +0800 Subject: [PATCH] add Renderer::ResetResolutionWhenWindowResized --- src/kiwano/base/Director.cpp | 6 ----- src/kiwano/platform/Input.cpp | 2 -- src/kiwano/render/DirectX/RendererImpl.cpp | 10 -------- src/kiwano/render/DirectX/RendererImpl.h | 2 -- src/kiwano/render/Renderer.cpp | 29 ++++++++++++++++++++++ src/kiwano/render/Renderer.h | 21 +++++++--------- 6 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/kiwano/base/Director.cpp b/src/kiwano/base/Director.cpp index 5000886c..340076a6 100644 --- a/src/kiwano/base/Director.cpp +++ b/src/kiwano/base/Director.cpp @@ -150,8 +150,6 @@ void Director::OnUpdate(UpdateModuleContext& ctx) if (debug_actor_) debug_actor_->Update(ctx.dt); - - ctx.Next(); } void Director::OnRender(RenderModuleContext& ctx) @@ -174,8 +172,6 @@ void Director::OnRender(RenderModuleContext& ctx) { debug_actor_->Render(ctx.render_ctx); } - - ctx.Next(); } void Director::HandleEvent(EventModuleContext& ctx) @@ -188,8 +184,6 @@ void Director::HandleEvent(EventModuleContext& ctx) if (debug_actor_) debug_actor_->DispatchEvent(ctx.evt); - - ctx.Next(); } } // namespace kiwano diff --git a/src/kiwano/platform/Input.cpp b/src/kiwano/platform/Input.cpp index d5451c0e..86b41258 100644 --- a/src/kiwano/platform/Input.cpp +++ b/src/kiwano/platform/Input.cpp @@ -161,8 +161,6 @@ void Input::HandleEvent(EventModuleContext& ctx) UpdateKey(dynamic_cast(evt)->code, false); } } - - ctx.Next(); } } // namespace kiwano diff --git a/src/kiwano/render/DirectX/RendererImpl.cpp b/src/kiwano/render/DirectX/RendererImpl.cpp index 72d3ca77..f652cd85 100644 --- a/src/kiwano/render/DirectX/RendererImpl.cpp +++ b/src/kiwano/render/DirectX/RendererImpl.cpp @@ -19,7 +19,6 @@ // THE SOFTWARE. #include -#include #include #include #include @@ -131,15 +130,6 @@ void RendererImpl::Destroy() ::CoUninitialize(); } -void RendererImpl::HandleEvent(EventModuleContext& ctx) -{ - if (ctx.evt->IsType()) - { - auto evt = ctx.evt->SafeCast(); - Resize(evt->width, evt->height); - } -} - void RendererImpl::Clear() { KGE_ASSERT(d3d_res_); diff --git a/src/kiwano/render/DirectX/RendererImpl.h b/src/kiwano/render/DirectX/RendererImpl.h index 23a9cd65..747168e9 100644 --- a/src/kiwano/render/DirectX/RendererImpl.h +++ b/src/kiwano/render/DirectX/RendererImpl.h @@ -81,8 +81,6 @@ public: void Destroy() override; - void HandleEvent(EventModuleContext& ctx) override; - protected: RendererImpl(); diff --git a/src/kiwano/render/Renderer.cpp b/src/kiwano/render/Renderer.cpp index 53904c2c..b041c68e 100644 --- a/src/kiwano/render/Renderer.cpp +++ b/src/kiwano/render/Renderer.cpp @@ -19,14 +19,43 @@ // THE SOFTWARE. #include +#include namespace kiwano { Renderer::Renderer() : vsync_(true) + , auto_reset_resolution_(false) , clear_color_(Color::Black) { } +void Renderer::SetClearColor(const Color& color) +{ + clear_color_ = color; +} + +void Renderer::SetVSyncEnabled(bool enabled) +{ + vsync_ = enabled; +} + +void Renderer::ResetResolutionWhenWindowResized(bool enabled) +{ + auto_reset_resolution_ = enabled; +} + +void Renderer::HandleEvent(EventModuleContext& ctx) +{ + if (auto_reset_resolution_) + { + if (ctx.evt->IsType()) + { + auto evt = ctx.evt->SafeCast(); + Resize(evt->width, evt->height); + } + } +} + } // namespace kiwano diff --git a/src/kiwano/render/Renderer.h b/src/kiwano/render/Renderer.h index 48005faf..4b552405 100644 --- a/src/kiwano/render/Renderer.h +++ b/src/kiwano/render/Renderer.h @@ -69,11 +69,15 @@ public: /// \~chinese /// @brief 设置清屏颜色 - virtual void SetClearColor(const Color& clear_color); + void SetClearColor(const Color& clear_color); /// \~chinese /// @brief 开启或关闭垂直同步 - virtual void SetVSyncEnabled(bool enabled); + void SetVSyncEnabled(bool enabled); + + /// \~chinese + /// @brief 窗口大小变化时自动调整分辨率 + void ResetResolutionWhenWindowResized(bool enabled); /// \~chinese /// @brief 创建纹理内部资源 @@ -235,11 +239,14 @@ public: /// @brief 销毁渲染器资源 virtual void Destroy() = 0; + void HandleEvent(EventModuleContext& ctx) override; + protected: Renderer(); protected: bool vsync_; + bool auto_reset_resolution_; Color clear_color_; Size output_size_; RenderContextPtr render_ctx_; @@ -262,14 +269,4 @@ inline Color Renderer::GetClearColor() const return clear_color_; } -inline void Renderer::SetVSyncEnabled(bool enabled) -{ - vsync_ = enabled; -} - -inline void Renderer::SetClearColor(const Color& color) -{ - clear_color_ = color; -} - } // namespace kiwano