diff --git a/inc/hgl/WorkObject.h b/inc/hgl/WorkObject.h index efea90df..25685d6b 100644 --- a/inc/hgl/WorkObject.h +++ b/inc/hgl/WorkObject.h @@ -26,18 +26,15 @@ namespace hgl graph::RenderPass *render_pass=nullptr; bool destroy_flag=false; + bool render_dirty=true; protected: + //以下数据均取自RenderFramework + graph::RenderResource *db=nullptr; //暂时的,未来会被更好的机制替代 - /** - * 不管我们的游戏多么的复杂,一般在一个WorkObject中,都只需要一个SceneWorld以及一个Renderer即可。 - * 如果我们整体切换World,那么建议直接切换到新的WorkObject上。 - */ - - graph::SceneWorld * world =nullptr; //世界 - + graph::Scene * scene=nullptr; //场景 graph::Renderer * renderer=nullptr; //渲染器 public: @@ -54,6 +51,9 @@ namespace hgl const bool IsDestroy ()const{return destroy_flag;} void MarkDestory(){destroy_flag=true;} + const bool IsRenderDirty ()const{return render_dirty;} + void MarkRenderDirty(){render_dirty=true;} + public: WorkObject(graph::RenderFramework *,graph::IRenderTarget *rt=nullptr); diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index 41de8019..ca7c4b87 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -17,6 +17,9 @@ class RenderTargetManager; class RenderModule; +class Scene; +class Renderer; + class CameraComponentManager{/*现阶段测试使用*/}; class LightComponentManager{/*现阶段测试使用*/}; @@ -47,6 +50,11 @@ protected: CameraComponentManager *camera_component_manager=nullptr; LightComponentManager *light_component_manager =nullptr; +protected: + + Scene * default_scene =nullptr; + Renderer * default_renderer=nullptr; + public: Window * GetWindow ()const{return win;} @@ -68,6 +76,11 @@ public: SwapchainModule * GetSwapchainModule (){return sc_module;} SwapchainRenderTarget * GetSwapchainRenderTarget(){return sc_module?sc_module->GetRenderTarget():nullptr;} +public: + + Scene * GetDefaultScene (){return default_scene;} + Renderer * GetDefaultRenderer (){return default_renderer;} + public: RenderFramework(const OSString &); diff --git a/inc/hgl/graph/RenderTask.h b/inc/hgl/graph/RenderTask.h index 97b83f03..ebcf6404 100644 --- a/inc/hgl/graph/RenderTask.h +++ b/inc/hgl/graph/RenderTask.h @@ -6,7 +6,7 @@ namespace hgl::graph { class SceneNode; - class SceneWorld; + class Scene; class Camera; class IRenderTarget; class RenderList; diff --git a/inc/hgl/graph/Renderer.h b/inc/hgl/graph/Renderer.h index db82d753..81e36e27 100644 --- a/inc/hgl/graph/Renderer.h +++ b/inc/hgl/graph/Renderer.h @@ -5,7 +5,7 @@ namespace hgl::graph { - class SceneWorld; + class Scene; using RenderTaskNameMap=Map; @@ -15,7 +15,7 @@ namespace hgl::graph class Renderer { IRenderTarget *render_target; - SceneWorld *world; + Scene *world; Camera *camera; @@ -30,7 +30,7 @@ namespace hgl::graph public: - SceneWorld *GetSceneWorld () const { return world; } ///<获取场景世界 + Scene *GetScene () const { return world; } ///<获取场景世界 Camera * GetCurCamera () const { return camera; } ///<获取当前相机 public: @@ -38,7 +38,7 @@ namespace hgl::graph Renderer(IRenderTarget *); virtual ~Renderer(); - void SetCurWorld(SceneWorld *); + void SetCurWorld(Scene *); void SetCurCamera(Camera *); bool RenderFrame(RenderCmdBuffer *); diff --git a/inc/hgl/graph/SceneWorld.h b/inc/hgl/graph/SceneWorld.h index 5a593cd1..2ad06d81 100644 --- a/inc/hgl/graph/SceneWorld.h +++ b/inc/hgl/graph/SceneWorld.h @@ -6,45 +6,45 @@ namespace hgl::graph { /** - * 世界场景管理器
- * 管理一个世界场景中的所有资源与场景节点 + * 场景管理器
+ * 管理一个场景中的所有资源与场景节点 */ - class SceneWorld + class Scene { - U8String WorldName; ///<世界名称 + U8String SceneName; ///<场景名称 ObjectList SceneNodePool; ///<场景节点池 - SceneNode *root_node; ///<世界根节点 + SceneNode *root_node; ///<场景根节点 public: - const U8String & GetWorldName()const{return WorldName;} ///<获取世界名称 + const U8String & GetSceneName()const{return SceneName;} ///<获取场景名称 - SceneNode * GetRootNode (){return root_node;} ///<获取世界根节点 + SceneNode * GetRootNode (){return root_node;} ///<获取场景根节点 public: - SceneWorld() + Scene() { root_node=new SceneNode; } - virtual ~SceneWorld() + virtual ~Scene() { SAFE_CLEAR(root_node); } - };//class SceneWorld + };//class Scene - bool RegistrySceneWorld(SceneWorld *sw); ///<注册场景世界 - bool UnregistrySceneWorld(const U8String &world_name); ///<注销场景世界 + bool RegistryScene(Scene *sw); ///<注册场景 + bool UnregistryScene(const U8String &world_name); ///<注销场景 - inline bool UnregistrySceneWorld(SceneWorld *sw) ///<注销场景世界 + inline bool UnregistryScene(Scene *sw) ///<注销场景 { if(!sw)return(false); - return UnregistrySceneWorld(sw->GetWorldName()); + return UnregistryScene(sw->GetSceneName()); } - SceneWorld *GetSceneWorld(const U8String &world_name); ///<获取指定名称的场景世界 + Scene *GetScene(const U8String &world_name); ///<获取指定名称的场景 }//namespace hgl::graph diff --git a/src/SceneGraph/render/Renderer.cpp b/src/SceneGraph/render/Renderer.cpp index abd76072..ed577b89 100644 --- a/src/SceneGraph/render/Renderer.cpp +++ b/src/SceneGraph/render/Renderer.cpp @@ -17,7 +17,7 @@ namespace hgl::graph delete world; } - void Renderer::SetCurWorld(SceneWorld *sw) + void Renderer::SetCurWorld(Scene *sw) { if(world==sw) return; diff --git a/src/SceneGraph/scene/SceneWorld.cpp b/src/SceneGraph/scene/SceneWorld.cpp index f6a9424b..0b0026e3 100644 --- a/src/SceneGraph/scene/SceneWorld.cpp +++ b/src/SceneGraph/scene/SceneWorld.cpp @@ -5,14 +5,14 @@ namespace hgl::graph { namespace { - Map scene_world_map;///<场景世界列表 + Map scene_world_map;///<场景世界列表 }//namespace - bool RegistrySceneWorld(SceneWorld *sw) + bool RegistryScene(Scene *sw) { if(!sw)return(false); - const U8String &world_name=sw->GetWorldName(); + const U8String &world_name=sw->GetSceneName(); if(scene_world_map.Find(world_name)) return false;///<已经注册过了 @@ -21,7 +21,7 @@ namespace hgl::graph return true; } - SceneWorld *GetSceneWorld(const U8String &world_name) + Scene *GetScene(const U8String &world_name) { if(world_name.IsEmpty()) return(nullptr); @@ -29,7 +29,7 @@ namespace hgl::graph return GetObjectFromMap(scene_world_map,world_name); } - bool UnregistrySceneWorld(const U8String &world_name) + bool UnregistryScene(const U8String &world_name) { if(world_name.IsEmpty()) return(false); diff --git a/src/Work/WorkManager.cpp b/src/Work/WorkManager.cpp index 30fcc3d8..005d008f 100644 --- a/src/Work/WorkManager.cpp +++ b/src/Work/WorkManager.cpp @@ -75,7 +75,7 @@ namespace hgl if(cur_work_object->IsTickable()) Tick(cur_work_object); - if(win->IsVisible()&&cur_work_object->IsRenderable()) + if(win->IsVisible())//&&cur_work_object->IsRenderable()) { Render(cur_work_object); dev->WaitIdle(); diff --git a/src/Work/WorkObject.cpp b/src/Work/WorkObject.cpp index a6f8a9b2..1966a88d 100644 --- a/src/Work/WorkObject.cpp +++ b/src/Work/WorkObject.cpp @@ -43,6 +43,8 @@ namespace hgl render_pass=rt->GetRenderPass(); db=rf->GetRenderResource(); + scene=rf->GetDefaultScene(); + renderer=rf->GetDefaultRenderer(); } void WorkObject::Render(double delta_time)