From d577642533f5c85c18f1d3e572174325eb0cad72 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sun, 27 Jul 2025 16:47:12 +0800 Subject: [PATCH] =?UTF-8?q?RenderFramework=E5=85=B3=E8=81=94default=5Fscen?= =?UTF-8?q?e=E4=BA=8B=E4=BB=B6=E4=BC=A0=E9=80=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/hgl/graph/RenderFramework.h | 2 ++ src/SceneGraph/RenderFramework.cpp | 30 ++++++++++++++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index 55ed8a04..5b3ee291 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -63,6 +63,8 @@ protected: //RenderContext,未来合并成一个RenderContext结构 CameraControl * default_camera_control =nullptr; Renderer * default_renderer =nullptr; + void OnChangeDefaultScene(Scene *); + void CreateDefaultRenderer(); protected: //EventDispatcher diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index 7379e540..dd59af11 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -134,7 +134,7 @@ bool RenderFramework::Init(uint w,uint h) render_resource=new RenderResource(device); - default_scene=new Scene; + OnChangeDefaultScene(new Scene); default_camera=new Camera(); @@ -143,6 +143,24 @@ bool RenderFramework::Init(uint w,uint h) return(true); } +void RenderFramework::OnChangeDefaultScene(Scene *s) +{ + if(default_scene==s) + return; + + if(default_scene) + { + this->RemoveChildDispatcher(&(default_scene->GetEventDispatcher())); + } + + if(s) + { + this->AddChildDispatcher(&(s->GetEventDispatcher())); + } + + default_scene=s; +} + void RenderFramework::CreateDefaultRenderer() { SAFE_CLEAR(default_renderer) @@ -246,11 +264,11 @@ graph::Primitive *RenderFramework::CreatePrimitive( const AnsiString &name, return prim; } -graph::Mesh *RenderFramework::CreateMesh( const AnsiString &name, - const uint32_t vertices_count, - graph::MaterialInstance *mi, - graph::Pipeline *pipeline, - const std::initializer_list &vad_list) +graph::Mesh *RenderFramework::CreateMesh( const AnsiString &name, + const uint32_t vertices_count, + graph::MaterialInstance *mi, + graph::Pipeline *pipeline, + const std::initializer_list &vad_list) { auto *prim=this->CreatePrimitive(name,vertices_count,mi->GetVIL(),vad_list);