初步定义RenderTask
This commit is contained in:
parent
75da8cabef
commit
8f1b891f9e
2
CMCore
2
CMCore
@ -1 +1 @@
|
|||||||
Subproject commit f1a6f0b90eb7766be90afb7e62ec539dfa30f746
|
Subproject commit fd0dbb00550bf8aee92ae19651fe8a780d8d5205
|
@ -37,6 +37,8 @@ namespace hgl
|
|||||||
virtual void SetCamera(CameraInfo *ci){camera_info=ci;} ///<设置相机信息
|
virtual void SetCamera(CameraInfo *ci){camera_info=ci;} ///<设置相机信息
|
||||||
virtual bool Expend(SceneNode *); ///<展开场景树到渲染列表
|
virtual bool Expend(SceneNode *); ///<展开场景树到渲染列表
|
||||||
|
|
||||||
|
bool IsEmpty()const{return !renderable_count;} ///<是否是空的
|
||||||
|
|
||||||
virtual bool Render(RenderCmdBuffer *); ///<渲染所有对象
|
virtual bool Render(RenderCmdBuffer *); ///<渲染所有对象
|
||||||
|
|
||||||
virtual void UpdateLocalToWorld(); ///<更新所有对象的变换数据
|
virtual void UpdateLocalToWorld(); ///<更新所有对象的变换数据
|
||||||
|
68
inc/hgl/graph/RenderTask.h
Normal file
68
inc/hgl/graph/RenderTask.h
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include<hgl/graph/VK.h>
|
||||||
|
#include<hgl/type/IDName.h>
|
||||||
|
|
||||||
|
namespace hgl::graph
|
||||||
|
{
|
||||||
|
class SceneNode;
|
||||||
|
class SceneWorld;
|
||||||
|
class Camera;
|
||||||
|
class IRenderTarget;
|
||||||
|
class RenderList;
|
||||||
|
|
||||||
|
HGL_DEFINE_IDNAME(RenderTaskName,char)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最终的具体渲染任务
|
||||||
|
*/
|
||||||
|
class RenderTask
|
||||||
|
{
|
||||||
|
RenderTaskName task_name;
|
||||||
|
|
||||||
|
RenderList * render_list;
|
||||||
|
IRenderTarget * render_target;
|
||||||
|
Camera * camera;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
const RenderTaskName &GetName ()const;
|
||||||
|
|
||||||
|
IRenderTarget * GetRenderTarget ()const{return render_target;}
|
||||||
|
RenderList * GetRenderList ()const{return render_list;}
|
||||||
|
Camera * GetCamera ()const{return camera;}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
RenderTask(const RenderTaskName &tn)
|
||||||
|
{
|
||||||
|
task_name=tn;
|
||||||
|
|
||||||
|
render_list=nullptr;
|
||||||
|
render_target=nullptr;
|
||||||
|
camera=nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
RenderTask(const RenderTaskName &tn,RenderList *rl,IRenderTarget *rt=nullptr,Camera *c=nullptr)
|
||||||
|
{
|
||||||
|
task_name=tn;
|
||||||
|
|
||||||
|
render_list=rl;
|
||||||
|
render_target=rt;
|
||||||
|
camera=c;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~RenderTask();
|
||||||
|
|
||||||
|
void Set(IRenderTarget *rt){render_target=rt;}
|
||||||
|
void Set(Camera *c){camera=c;}
|
||||||
|
|
||||||
|
void Restart(); ///<复位数据,清空渲染列表
|
||||||
|
|
||||||
|
void MakeRenderList(SceneNode *);
|
||||||
|
|
||||||
|
bool IsEmpty()const; ///<是否是空的,不可渲染或是没啥可渲染的
|
||||||
|
|
||||||
|
bool Render(RenderCmdBuffer *);
|
||||||
|
};//class RenderTask
|
||||||
|
}//namespace hgl::graph
|
27
inc/hgl/graph/Renderer.h
Normal file
27
inc/hgl/graph/Renderer.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include<hgl/graph/RenderTask.h>
|
||||||
|
#include<hgl/type/Map.h>
|
||||||
|
|
||||||
|
namespace hgl::graph
|
||||||
|
{
|
||||||
|
class SceneWorld;
|
||||||
|
|
||||||
|
using RenderTaskNameMap=Map<RenderTaskName,RenderTask *>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 渲染器
|
||||||
|
* 管理相对的所有的渲染资源,包括场景、相机、渲染目标、渲染任务等
|
||||||
|
*/
|
||||||
|
class Renderer
|
||||||
|
{
|
||||||
|
SceneWorld *world;
|
||||||
|
|
||||||
|
RenderTaskNameMap static_render_task_list; ///<静态渲染任务列表
|
||||||
|
RenderTaskNameMap dynamic_render_task_list; ///<动态渲染任务列表
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
};//class Renderer
|
||||||
|
}//namespace hgl::graph
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
STD_MTL_NAMESPACE_BEGIN
|
STD_MTL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
DefineIDName(MaterialName, char)
|
HGL_DEFINE_IDNAME(MaterialName, char)
|
||||||
|
|
||||||
class MaterialFactory
|
class MaterialFactory
|
||||||
{
|
{
|
||||||
|
@ -87,6 +87,10 @@ SET(SG_RENDER_SOURCE ${SG_INCLUDE_PATH}/RenderNode.h
|
|||||||
${SG_INCLUDE_PATH}/MaterialRenderList.h
|
${SG_INCLUDE_PATH}/MaterialRenderList.h
|
||||||
${SG_INCLUDE_PATH}/MaterialRenderMap.h
|
${SG_INCLUDE_PATH}/MaterialRenderMap.h
|
||||||
# ${SG_INCLUDE_PATH}/ShadowPolicy.h
|
# ${SG_INCLUDE_PATH}/ShadowPolicy.h
|
||||||
|
${SG_INCLUDE_PATH}/RenderTask.h
|
||||||
|
${SG_INCLUDE_PATH}/Renderer.h
|
||||||
|
render/Renderer.cpp
|
||||||
|
render/RenderTask.cpp
|
||||||
render/RenderList.cpp
|
render/RenderList.cpp
|
||||||
render/MaterialRenderList.cpp
|
render/MaterialRenderList.cpp
|
||||||
render/RenderAssignBuffer.h
|
render/RenderAssignBuffer.h
|
||||||
|
53
src/SceneGraph/render/RenderTask.cpp
Normal file
53
src/SceneGraph/render/RenderTask.cpp
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#include<hgl/graph/RenderTask.h>
|
||||||
|
#include<hgl/graph/RenderList.h>
|
||||||
|
|
||||||
|
namespace hgl::graph
|
||||||
|
{
|
||||||
|
RenderTask::~RenderTask()
|
||||||
|
{
|
||||||
|
SAFE_CLEAR(render_list)
|
||||||
|
}
|
||||||
|
|
||||||
|
void RenderTask::Restart()
|
||||||
|
{
|
||||||
|
if(!render_list)
|
||||||
|
return;
|
||||||
|
|
||||||
|
render_list->Clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void RenderTask::MakeRenderList(SceneNode *root)
|
||||||
|
{
|
||||||
|
if(!root)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(!render_list)
|
||||||
|
return;
|
||||||
|
|
||||||
|
render_list->Clear();
|
||||||
|
render_list->Expend(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RenderTask::IsEmpty()const
|
||||||
|
{
|
||||||
|
if(!render_list)
|
||||||
|
return(true);
|
||||||
|
|
||||||
|
return render_list->IsEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool RenderTask::Render(RenderCmdBuffer *cmd)
|
||||||
|
{
|
||||||
|
if(!cmd)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(!render_list)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
if(render_list->IsEmpty())
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
render_list->Render(cmd);
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
}//namespace hgl::graph
|
0
src/SceneGraph/render/Renderer.cpp
Normal file
0
src/SceneGraph/render/Renderer.cpp
Normal file
Loading…
x
Reference in New Issue
Block a user