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);