From b7627f392cf2eb6ddb32df0322d54c1e9842f384 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 10 Jun 2025 01:34:13 +0800 Subject: [PATCH] =?UTF-8?q?RenderFramework=E6=8E=A5=E5=85=A5=E9=94=AE?= =?UTF-8?q?=E7=9B=98=E9=BC=A0=E6=A0=87=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMCore | 2 +- CMPlatform | 2 +- CMSceneGraph | 2 +- example/Basic/BillboardTest.cpp | 2 +- example/common/VulkanAppFramework.h | 119 ---------------------------- inc/hgl/graph/RenderFramework.h | 8 ++ src/SceneGraph/RenderFramework.cpp | 25 +++++- src/Work/WorkManager.cpp | 3 + 8 files changed, 39 insertions(+), 124 deletions(-) diff --git a/CMCore b/CMCore index 86ac0c37..333bec0a 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 86ac0c37fcf6c4c4cb82446b89767561c9349517 +Subproject commit 333bec0a122a962d0b7c55948a73ead6052ae9d2 diff --git a/CMPlatform b/CMPlatform index 46ae04cd..f0ff2142 160000 --- a/CMPlatform +++ b/CMPlatform @@ -1 +1 @@ -Subproject commit 46ae04cd50d09dfb00d9945c5f43d29a2744bcae +Subproject commit f0ff214289a1265898feecbdbbd2ddf50bff5dca diff --git a/CMSceneGraph b/CMSceneGraph index f8661597..d81a9f79 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit f866159787c98e29029c2b4dba3de8f6455473da +Subproject commit d81a9f79f4f33a67d4c2938cb3acdd4ec18feeaf diff --git a/example/Basic/BillboardTest.cpp b/example/Basic/BillboardTest.cpp index 6930ea43..ec00d990 100644 --- a/example/Basic/BillboardTest.cpp +++ b/example/Basic/BillboardTest.cpp @@ -216,5 +216,5 @@ public: int os_main(int,os_char **) { - return RunFramework(OS_TEXT("AutoInstance"),1280,720); + return RunFramework(OS_TEXT("Billboard"),1280,720); } diff --git a/example/common/VulkanAppFramework.h b/example/common/VulkanAppFramework.h index d1be7298..b5ab7a07 100644 --- a/example/common/VulkanAppFramework.h +++ b/example/common/VulkanAppFramework.h @@ -346,125 +346,6 @@ public: } };//class VulkanApplicationFramework -class CameraKeyboardControl:public KeyboardStateEvent -{ - FirstPersonCameraControl *camera; - float move_speed; - -public: - - CameraKeyboardControl(FirstPersonCameraControl *wc) - { - camera=wc; - move_speed=1.0f; - } - - bool OnPressed(const KeyboardButton &kb)override - { - if(!KeyboardStateEvent::OnPressed(kb)) - return(false); - - if(kb==KeyboardButton::Minus )move_speed*=0.9f;else - if(kb==KeyboardButton::Equals )move_speed*=1.1f; - - return(true); - } - - void Update() - { - if(HasPressed(KeyboardButton::W ))camera->Forward (move_speed);else - if(HasPressed(KeyboardButton::S ))camera->Backward (move_speed);else - if(HasPressed(KeyboardButton::A ))camera->Left (move_speed);else - if(HasPressed(KeyboardButton::D ))camera->Right (move_speed);else - //if(HasPressed(KeyboardButton::R ))camera->Up (move_speed);else - //if(HasPressed(KeyboardButton::F ))camera->Down (move_speed);else - - //if(HasPressed(KeyboardButton::Left ))camera->HoriRotate( move_speed);else - //if(HasPressed(KeyboardButton::Right ))camera->HoriRotate(-move_speed);else - //if(HasPressed(KeyboardButton::Up ))camera->VertRotate( move_speed);else - //if(HasPressed(KeyboardButton::Down ))camera->VertRotate(-move_speed);else - return; - } -}; - -class CameraMouseControl:public MouseEvent -{ - FirstPersonCameraControl *camera; - double cur_time; - double last_time; - - Vector2f mouse_pos; - Vector2f mouse_last_pos; - -protected: - - bool OnPressed(int x,int y,MouseButton) override - { - mouse_last_pos.x=x; - mouse_last_pos.y=y; - - last_time=cur_time; - - return(true); - } - - bool OnWheel(int,int y) override - { - if(y==0)return(false); - - camera->Forward(float(y)/10.0f); - - return(true); - } - - bool OnMove(int x,int y) override - { - mouse_pos.x=x; - mouse_pos.y=y; - - bool left=HasPressed(MouseButton::Left); - bool right=HasPressed(MouseButton::Right); - - Vector2f pos(x,y); - Vector2f gap=pos-mouse_last_pos; - - if(left) - { - gap/=-5.0f; - - camera->Rotate(gap); - } - else - if(right) - { - gap/=10.0f; - - camera->Move(Vector3f(gap.x,0,gap.y)); - } - - last_time=cur_time; - mouse_last_pos=Vector2f(x,y); - - return(true); - } - -public: - - CameraMouseControl(FirstPersonCameraControl *wc) - { - camera=wc; - cur_time=0; - last_time=0; - } - - const Vector2f &GetMouseCoord()const{return mouse_pos;} - - void Update() - { - cur_time=GetPreciseTime(); - } -}; - class CameraAppFramework:public VulkanApplicationFramework { protected: diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index 3b29a59d..5d508a27 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -60,6 +60,10 @@ protected: //RenderContext,未来合并成一个RenderContext结构 void CreateDefaultRenderer(); +protected: //InputEvent + + ObjectList input_event; + public: Window * GetWindow ()const{return win;} @@ -101,6 +105,10 @@ public: // event virtual void OnActive(bool); virtual void OnClose(); +public: + + void Tick(); + public: // other RenderList *CreateRenderList() diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index 78fbd500..768cd230 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -138,6 +138,8 @@ bool RenderFramework::Init(uint w,uint h) void RenderFramework::CreateDefaultRenderer() { + input_event.Clear(); + SAFE_CLEAR(default_renderer) IRenderTarget *rt=GetSwapchainRenderTarget(); @@ -149,7 +151,15 @@ void RenderFramework::CreateDefaultRenderer() { auto ubo_camera_info=device->CreateUBO(&mtl::SBS_CameraInfo); - default_camera_control=new FirstPersonCameraControl(rt->GetViewportInfo(),default_camera,ubo_camera_info); + auto fpcc=new FirstPersonCameraControl(rt->GetViewportInfo(),default_camera,ubo_camera_info); + + auto ckc=new CameraKeyboardControl(fpcc); + auto cmc=new CameraMouseControl(fpcc); + + this->Join(ckc); + this->Join(cmc); + + default_camera_control=fpcc; } default_renderer->SetCameraControl(default_camera_control); @@ -172,4 +182,17 @@ void RenderFramework::OnClose() { } +void RenderFramework::Tick() +{ + if(default_camera_control) + { + for(auto *ie:input_event) + { + ie->Update(); + } + + default_camera_control->Refresh(); + } +} + VK_NAMESPACE_END diff --git a/src/Work/WorkManager.cpp b/src/Work/WorkManager.cpp index 6c9d23c7..491b6ad0 100644 --- a/src/Work/WorkManager.cpp +++ b/src/Work/WorkManager.cpp @@ -11,6 +11,7 @@ namespace hgl if(delta_time>=frame_time) { last_update_time=cur_time; + wo->Tick(delta_time); } } @@ -70,6 +71,8 @@ namespace hgl { cur_time=GetPreciseTime(); + render_framework->Tick(); + if(cur_work_object->IsTickable()) Tick(cur_work_object);