diff --git a/CMCore b/CMCore index a9e37e62..71392198 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit a9e37e6219e538592686e00f0447d3144677ff97 +Subproject commit 713921985587dde43b11d1e0d3d2defc6c35d541 diff --git a/CMPlatform b/CMPlatform index ea52f06e..5c4851e5 160000 --- a/CMPlatform +++ b/CMPlatform @@ -1 +1 @@ -Subproject commit ea52f06e72c27bf1039cc7c458cf52464a0a3108 +Subproject commit 5c4851e586b97f96f17180ba2574f02857be298a diff --git a/example/common/VulkanAppFramework.h b/example/common/VulkanAppFramework.h index d3d3b4d8..17ca9a17 100644 --- a/example/common/VulkanAppFramework.h +++ b/example/common/VulkanAppFramework.h @@ -88,7 +88,7 @@ public: { CloseShaderCompiler(); - win->UnregisterEventDispatch(this); + win->RemoveChildDispatcher(this); SAFE_CLEAR(db); SAFE_CLEAR_OBJECT_ARRAY_OBJECT(cmd_buf,swap_chain_count); @@ -154,7 +154,7 @@ public: InitCommandBuffer(); - win->RegisterEventDispatch(this); + win->AddChildDispatcher(this); { vp_info.Set(w,h); @@ -403,8 +403,8 @@ public: ckc=new CameraKeyboardControl(camera_control); cmc=new CameraMouseControl(camera_control); - win->RegisterEventDispatch(ckc); - win->RegisterEventDispatch(cmc); + win->AddChildDispatcher(ckc); + win->AddChildDispatcher(cmc); RefreshCameraInfo(camera_control->GetCameraInfo(),&vp_info,camera); diff --git a/inc/hgl/WorkManager.h b/inc/hgl/WorkManager.h index b4dc7912..8fee8cc9 100644 --- a/inc/hgl/WorkManager.h +++ b/inc/hgl/WorkManager.h @@ -29,12 +29,12 @@ namespace hgl { render_framework=rf; - rf->RegisterEventDispatch(this); + rf->AddChildDispatcher(this); } virtual ~WorkManager() { - render_framework->UnregisterEventDispatch(this); + render_framework->RemoveChildDispatcher(this); SAFE_CLEAR(cur_work_object); } diff --git a/inc/hgl/WorkObject.h b/inc/hgl/WorkObject.h index 3b04b0c6..53065d44 100644 --- a/inc/hgl/WorkObject.h +++ b/inc/hgl/WorkObject.h @@ -1,10 +1,12 @@ #pragma once + #include #include #include #include #include #include +#include #include //#include @@ -20,7 +22,7 @@ namespace hgl * * WorkObject被定义为工作对象,所有的渲染控制都需要被写在WorkObject的Render函数下。 */ - class WorkObject:public TickObject + class WorkObject:public TickObject,public io::WindowEvent { graph::RenderFramework *render_framework=nullptr; diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index 9c059250..8d9d5204 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -65,7 +65,7 @@ protected: //RenderContext,未来合并成一个RenderContext结构 void CreateDefaultRenderer(); -protected: //EventDispatch +protected: //EventDispatcher io::MouseEvent *mouse_event=nullptr; diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index 0939c691..7379e540 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -112,7 +112,7 @@ bool RenderFramework::Init(uint w,uint h) if(!device) return(false); - win->RegisterEventDispatch(this); + win->AddChildDispatcher(this); module_manager=new GraphModuleManager(this); @@ -161,10 +161,10 @@ void RenderFramework::CreateDefaultRenderer() auto ckc=new CameraKeyboardControl(fpcc); auto cmc=new CameraMouseControl(fpcc); - this->RegisterEventDispatch(fpcc); + this->AddChildDispatcher(fpcc); - fpcc->RegisterEventDispatch(ckc); - fpcc->RegisterEventDispatch(cmc); + fpcc->AddChildDispatcher(ckc); + fpcc->AddChildDispatcher(cmc); default_camera_control=fpcc; diff --git a/src/Work/WorkObject.cpp b/src/Work/WorkObject.cpp index 40266873..93d36d01 100644 --- a/src/Work/WorkObject.cpp +++ b/src/Work/WorkObject.cpp @@ -23,6 +23,11 @@ namespace hgl { if(!rf) { + if(render_framework) + { + render_framework->RemoveChildDispatcher(this); + } + render_framework=nullptr; db=nullptr; } @@ -37,6 +42,8 @@ namespace hgl db=rf->GetRenderResource(); scene=rf->GetDefaultScene(); renderer=rf->GetDefaultRenderer(); + + render_framework->AddChildDispatcher(this); } void WorkObject::Render(double delta_time)