Compare commits
2 Commits
5c186fdb95
...
520b7cae9e
Author | SHA1 | Date | |
---|---|---|---|
520b7cae9e | |||
839e187cb2 |
@ -26,18 +26,15 @@ namespace hgl
|
|||||||
graph::RenderPass *render_pass=nullptr;
|
graph::RenderPass *render_pass=nullptr;
|
||||||
|
|
||||||
bool destroy_flag=false;
|
bool destroy_flag=false;
|
||||||
|
bool render_dirty=true;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
//以下数据均取自RenderFramework
|
||||||
|
|
||||||
graph::RenderResource *db=nullptr; //暂时的,未来会被更好的机制替代
|
graph::RenderResource *db=nullptr; //暂时的,未来会被更好的机制替代
|
||||||
|
|
||||||
/**
|
graph::Scene * scene=nullptr; //场景
|
||||||
* 不管我们的游戏多么的复杂,一般在一个WorkObject中,都只需要一个SceneWorld以及一个Renderer即可。
|
|
||||||
* 如果我们整体切换World,那么建议直接切换到新的WorkObject上。
|
|
||||||
*/
|
|
||||||
|
|
||||||
graph::SceneWorld * world =nullptr; //世界
|
|
||||||
|
|
||||||
graph::Renderer * renderer=nullptr; //渲染器
|
graph::Renderer * renderer=nullptr; //渲染器
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -54,6 +51,9 @@ namespace hgl
|
|||||||
const bool IsDestroy ()const{return destroy_flag;}
|
const bool IsDestroy ()const{return destroy_flag;}
|
||||||
void MarkDestory(){destroy_flag=true;}
|
void MarkDestory(){destroy_flag=true;}
|
||||||
|
|
||||||
|
const bool IsRenderDirty ()const{return render_dirty;}
|
||||||
|
void MarkRenderDirty(){render_dirty=true;}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
WorkObject(graph::RenderFramework *,graph::IRenderTarget *rt=nullptr);
|
WorkObject(graph::RenderFramework *,graph::IRenderTarget *rt=nullptr);
|
||||||
|
@ -11,14 +11,14 @@
|
|||||||
*
|
*
|
||||||
* AMD FidelityFX中,Component存放于Entity下,而我方中与其类似的定义为SceneNode。
|
* AMD FidelityFX中,Component存放于Entity下,而我方中与其类似的定义为SceneNode。
|
||||||
* 不管是Entity还是SceneNode,它们都提供空间变换,以及子节点、Component的管理。
|
* 不管是Entity还是SceneNode,它们都提供空间变换,以及子节点、Component的管理。
|
||||||
* 而AMD FidelityFX中的Scene,类似于我方的SceneWorld,用于储存一个场景世界的根节点及其它世界唯一数据。
|
* 而AMD FidelityFX中的Scene,类似于我方的Scene,用于储存一个场景世界的根节点及其它世界唯一数据。
|
||||||
*
|
*
|
||||||
* ComponentData是每个Component的数据,用于向Component或是其它模块提供数据。
|
* ComponentData是每个Component的数据,用于向Component或是其它模块提供数据。
|
||||||
* ComponentManager是Component的管理器,用于管理Component的创建、销毁、更新等。
|
* ComponentManager是Component的管理器,用于管理Component的创建、销毁、更新等。
|
||||||
*
|
*
|
||||||
* 需要注意的是:同AMD FidelityFX一样,大部分ComponentManager与SceneWorld基本无关。
|
* 需要注意的是:同AMD FidelityFX一样,大部分ComponentManager与Scene基本无关。
|
||||||
* 因为同样的数据可能出现在多个World之中。
|
* 因为同样的数据可能出现在多个World之中。
|
||||||
* 仅有那些与SceneWorld密切相关的Component它对应的Manager才会出现在SceneWorld中,比如CameraManager/LightManager。
|
* 仅有那些与Scene密切相关的Component它对应的Manager才会出现在Scene中,比如CameraManager/LightManager。
|
||||||
* 而如StaticMeshComponent之类的纯资源型就会是独立存在的。
|
* 而如StaticMeshComponent之类的纯资源型就会是独立存在的。
|
||||||
*
|
*
|
||||||
* Component是组件的基类,所有组件都从这里派生。
|
* Component是组件的基类,所有组件都从这里派生。
|
||||||
|
@ -17,6 +17,9 @@ class RenderTargetManager;
|
|||||||
|
|
||||||
class RenderModule;
|
class RenderModule;
|
||||||
|
|
||||||
|
class Scene;
|
||||||
|
class Renderer;
|
||||||
|
|
||||||
class CameraComponentManager{/*现阶段测试使用*/};
|
class CameraComponentManager{/*现阶段测试使用*/};
|
||||||
class LightComponentManager{/*现阶段测试使用*/};
|
class LightComponentManager{/*现阶段测试使用*/};
|
||||||
|
|
||||||
@ -47,6 +50,11 @@ protected:
|
|||||||
CameraComponentManager *camera_component_manager=nullptr;
|
CameraComponentManager *camera_component_manager=nullptr;
|
||||||
LightComponentManager *light_component_manager =nullptr;
|
LightComponentManager *light_component_manager =nullptr;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
Scene * default_scene =nullptr;
|
||||||
|
Renderer * default_renderer=nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
Window * GetWindow ()const{return win;}
|
Window * GetWindow ()const{return win;}
|
||||||
@ -68,6 +76,11 @@ public:
|
|||||||
SwapchainModule * GetSwapchainModule (){return sc_module;}
|
SwapchainModule * GetSwapchainModule (){return sc_module;}
|
||||||
SwapchainRenderTarget * GetSwapchainRenderTarget(){return sc_module?sc_module->GetRenderTarget():nullptr;}
|
SwapchainRenderTarget * GetSwapchainRenderTarget(){return sc_module?sc_module->GetRenderTarget():nullptr;}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Scene * GetDefaultScene (){return default_scene;}
|
||||||
|
Renderer * GetDefaultRenderer (){return default_renderer;}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RenderFramework(const OSString &);
|
RenderFramework(const OSString &);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
namespace hgl::graph
|
namespace hgl::graph
|
||||||
{
|
{
|
||||||
class SceneNode;
|
class SceneNode;
|
||||||
class SceneWorld;
|
class Scene;
|
||||||
class Camera;
|
class Camera;
|
||||||
class IRenderTarget;
|
class IRenderTarget;
|
||||||
class RenderList;
|
class RenderList;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
namespace hgl::graph
|
namespace hgl::graph
|
||||||
{
|
{
|
||||||
class SceneWorld;
|
class Scene;
|
||||||
|
|
||||||
using RenderTaskNameMap=Map<RenderTaskName,RenderTask *>;
|
using RenderTaskNameMap=Map<RenderTaskName,RenderTask *>;
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ namespace hgl::graph
|
|||||||
class Renderer
|
class Renderer
|
||||||
{
|
{
|
||||||
IRenderTarget *render_target;
|
IRenderTarget *render_target;
|
||||||
SceneWorld *world;
|
Scene *world;
|
||||||
|
|
||||||
Camera *camera;
|
Camera *camera;
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ namespace hgl::graph
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
SceneWorld *GetSceneWorld () const { return world; } ///<获取场景世界
|
Scene *GetScene () const { return world; } ///<获取场景世界
|
||||||
Camera * GetCurCamera () const { return camera; } ///<获取当前相机
|
Camera * GetCurCamera () const { return camera; } ///<获取当前相机
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -38,7 +38,7 @@ namespace hgl::graph
|
|||||||
Renderer(IRenderTarget *);
|
Renderer(IRenderTarget *);
|
||||||
virtual ~Renderer();
|
virtual ~Renderer();
|
||||||
|
|
||||||
void SetCurWorld(SceneWorld *);
|
void SetCurWorld(Scene *);
|
||||||
void SetCurCamera(Camera *);
|
void SetCurCamera(Camera *);
|
||||||
|
|
||||||
bool RenderFrame(RenderCmdBuffer *);
|
bool RenderFrame(RenderCmdBuffer *);
|
||||||
|
50
inc/hgl/graph/Scene.h
Normal file
50
inc/hgl/graph/Scene.h
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include<hgl/graph/SceneNode.h>
|
||||||
|
#include<hgl/type/Pool.h>
|
||||||
|
|
||||||
|
namespace hgl::graph
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* 场景管理器<Br>
|
||||||
|
* 管理一个场景中的所有资源与场景节点
|
||||||
|
*/
|
||||||
|
class Scene
|
||||||
|
{
|
||||||
|
U8String SceneName; ///<场景名称
|
||||||
|
|
||||||
|
ObjectList<SceneNode> SceneNodePool; ///<场景节点池
|
||||||
|
|
||||||
|
SceneNode *root_node; ///<场景根节点
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const U8String & GetSceneName()const{return SceneName;} ///<获取场景名称
|
||||||
|
|
||||||
|
SceneNode * GetRootNode (){return root_node;} ///<获取场景根节点
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Scene()
|
||||||
|
{
|
||||||
|
root_node=new SceneNode;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~Scene()
|
||||||
|
{
|
||||||
|
SAFE_CLEAR(root_node);
|
||||||
|
}
|
||||||
|
};//class Scene
|
||||||
|
|
||||||
|
bool RegistryScene(Scene *sw); ///<注册场景
|
||||||
|
bool UnregistryScene(const U8String &world_name); ///<注销场景
|
||||||
|
|
||||||
|
inline bool UnregistryScene(Scene *sw) ///<注销场景
|
||||||
|
{
|
||||||
|
if(!sw)return(false);
|
||||||
|
|
||||||
|
return UnregistryScene(sw->GetSceneName());
|
||||||
|
}
|
||||||
|
|
||||||
|
Scene *GetScene(const U8String &world_name); ///<获取指定名称的场景
|
||||||
|
}//namespace hgl::graph
|
@ -1,50 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include<hgl/graph/SceneNode.h>
|
|
||||||
#include<hgl/type/Pool.h>
|
|
||||||
|
|
||||||
namespace hgl::graph
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* 世界场景管理器<Br>
|
|
||||||
* 管理一个世界场景中的所有资源与场景节点
|
|
||||||
*/
|
|
||||||
class SceneWorld
|
|
||||||
{
|
|
||||||
U8String WorldName; ///<世界名称
|
|
||||||
|
|
||||||
ObjectList<SceneNode> SceneNodePool; ///<场景节点池
|
|
||||||
|
|
||||||
SceneNode *root_node; ///<世界根节点
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
const U8String & GetWorldName()const{return WorldName;} ///<获取世界名称
|
|
||||||
|
|
||||||
SceneNode * GetRootNode (){return root_node;} ///<获取世界根节点
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
SceneWorld()
|
|
||||||
{
|
|
||||||
root_node=new SceneNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual ~SceneWorld()
|
|
||||||
{
|
|
||||||
SAFE_CLEAR(root_node);
|
|
||||||
}
|
|
||||||
};//class SceneWorld
|
|
||||||
|
|
||||||
bool RegistrySceneWorld(SceneWorld *sw); ///<注册场景世界
|
|
||||||
bool UnregistrySceneWorld(const U8String &world_name); ///<注销场景世界
|
|
||||||
|
|
||||||
inline bool UnregistrySceneWorld(SceneWorld *sw) ///<注销场景世界
|
|
||||||
{
|
|
||||||
if(!sw)return(false);
|
|
||||||
|
|
||||||
return UnregistrySceneWorld(sw->GetWorldName());
|
|
||||||
}
|
|
||||||
|
|
||||||
SceneWorld *GetSceneWorld(const U8String &world_name); ///<获取指定名称的场景世界
|
|
||||||
}//namespace hgl::graph
|
|
@ -71,7 +71,7 @@ SET(GRAPH_FRAMEWORK_FILES ${SG_INCLUDE_PATH}/RenderFramework.h
|
|||||||
|
|
||||||
source_group("Framework" FILES ${GRAPH_FRAMEWORK_FILES})
|
source_group("Framework" FILES ${GRAPH_FRAMEWORK_FILES})
|
||||||
|
|
||||||
SET(SG_SCENE_SOURCE ${SG_INCLUDE_PATH}/SceneWorld.h
|
SET(SG_SCENE_SOURCE ${SG_INCLUDE_PATH}/Scene.h
|
||||||
${SG_INCLUDE_PATH}/SceneNodeAttributes.h
|
${SG_INCLUDE_PATH}/SceneNodeAttributes.h
|
||||||
${SG_INCLUDE_PATH}/SceneNode.h
|
${SG_INCLUDE_PATH}/SceneNode.h
|
||||||
${SG_INCLUDE_PATH}/SceneMatrix.h
|
${SG_INCLUDE_PATH}/SceneMatrix.h
|
||||||
@ -79,7 +79,7 @@ SET(SG_SCENE_SOURCE ${SG_INCLUDE_PATH}/SceneWorld.h
|
|||||||
Scene/SceneNode.cpp
|
Scene/SceneNode.cpp
|
||||||
Scene/SceneOrient.cpp
|
Scene/SceneOrient.cpp
|
||||||
Scene/SceneMatrix.cpp
|
Scene/SceneMatrix.cpp
|
||||||
Scene/SceneWorld.cpp
|
Scene/Scene.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
SET(SG_RENDER_SOURCE ${SG_INCLUDE_PATH}/RenderNode.h
|
SET(SG_RENDER_SOURCE ${SG_INCLUDE_PATH}/RenderNode.h
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include<hgl/graph/Renderer.h>
|
#include<hgl/graph/Renderer.h>
|
||||||
#include<hgl/graph/SceneWorld.h>
|
#include<hgl/graph/Scene.h>
|
||||||
#include<hgl/graph/VKCommandBuffer.h>
|
#include<hgl/graph/VKCommandBuffer.h>
|
||||||
|
|
||||||
namespace hgl::graph
|
namespace hgl::graph
|
||||||
@ -17,7 +17,7 @@ namespace hgl::graph
|
|||||||
delete world;
|
delete world;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::SetCurWorld(SceneWorld *sw)
|
void Renderer::SetCurWorld(Scene *sw)
|
||||||
{
|
{
|
||||||
if(world==sw)
|
if(world==sw)
|
||||||
return;
|
return;
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
#include<hgl/graph/SceneWorld.h>
|
#include<hgl/graph/Scene.h>
|
||||||
#include<hgl/type/Map.h>
|
#include<hgl/type/Map.h>
|
||||||
|
|
||||||
namespace hgl::graph
|
namespace hgl::graph
|
||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
Map<U8String,SceneWorld *> scene_world_map;///<场景世界列表
|
Map<U8String,Scene *> scene_world_map;///<场景列表
|
||||||
}//namespace
|
}//namespace
|
||||||
|
|
||||||
bool RegistrySceneWorld(SceneWorld *sw)
|
bool RegistryScene(Scene *sw)
|
||||||
{
|
{
|
||||||
if(!sw)return(false);
|
if(!sw)return(false);
|
||||||
|
|
||||||
const U8String &world_name=sw->GetWorldName();
|
const U8String &world_name=sw->GetSceneName();
|
||||||
|
|
||||||
if(scene_world_map.Find(world_name))
|
if(scene_world_map.Find(world_name))
|
||||||
return false;///<已经注册过了
|
return false;///<已经注册过了
|
||||||
@ -21,7 +21,7 @@ namespace hgl::graph
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
SceneWorld *GetSceneWorld(const U8String &world_name)
|
Scene *GetScene(const U8String &world_name)
|
||||||
{
|
{
|
||||||
if(world_name.IsEmpty())
|
if(world_name.IsEmpty())
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
@ -29,7 +29,7 @@ namespace hgl::graph
|
|||||||
return GetObjectFromMap(scene_world_map,world_name);
|
return GetObjectFromMap(scene_world_map,world_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UnregistrySceneWorld(const U8String &world_name)
|
bool UnregistryScene(const U8String &world_name)
|
||||||
{
|
{
|
||||||
if(world_name.IsEmpty())
|
if(world_name.IsEmpty())
|
||||||
return(false);
|
return(false);
|
@ -75,7 +75,7 @@ namespace hgl
|
|||||||
if(cur_work_object->IsTickable())
|
if(cur_work_object->IsTickable())
|
||||||
Tick(cur_work_object);
|
Tick(cur_work_object);
|
||||||
|
|
||||||
if(win->IsVisible()&&cur_work_object->IsRenderable())
|
if(win->IsVisible())//&&cur_work_object->IsRenderable())
|
||||||
{
|
{
|
||||||
Render(cur_work_object);
|
Render(cur_work_object);
|
||||||
dev->WaitIdle();
|
dev->WaitIdle();
|
||||||
|
@ -43,6 +43,8 @@ namespace hgl
|
|||||||
render_pass=rt->GetRenderPass();
|
render_pass=rt->GetRenderPass();
|
||||||
|
|
||||||
db=rf->GetRenderResource();
|
db=rf->GetRenderResource();
|
||||||
|
scene=rf->GetDefaultScene();
|
||||||
|
renderer=rf->GetDefaultRenderer();
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorkObject::Render(double delta_time)
|
void WorkObject::Render(double delta_time)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user