初步定义RenderTask

This commit is contained in:
hyzboy 2025-05-28 02:27:59 +08:00
parent 75da8cabef
commit 8f1b891f9e
8 changed files with 156 additions and 2 deletions

2
CMCore

@ -1 +1 @@
Subproject commit f1a6f0b90eb7766be90afb7e62ec539dfa30f746
Subproject commit fd0dbb00550bf8aee92ae19651fe8a780d8d5205

View File

@ -37,6 +37,8 @@ namespace hgl
virtual void SetCamera(CameraInfo *ci){camera_info=ci;} ///<设置相机信息
virtual bool Expend(SceneNode *); ///<展开场景树到渲染列表
bool IsEmpty()const{return !renderable_count;} ///<是否是空的
virtual bool Render(RenderCmdBuffer *); ///<渲染所有对象
virtual void UpdateLocalToWorld(); ///<更新所有对象的变换数据

View 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
View 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

View File

@ -7,7 +7,7 @@
STD_MTL_NAMESPACE_BEGIN
DefineIDName(MaterialName, char)
HGL_DEFINE_IDNAME(MaterialName, char)
class MaterialFactory
{

View File

@ -87,6 +87,10 @@ SET(SG_RENDER_SOURCE ${SG_INCLUDE_PATH}/RenderNode.h
${SG_INCLUDE_PATH}/MaterialRenderList.h
${SG_INCLUDE_PATH}/MaterialRenderMap.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/MaterialRenderList.cpp
render/RenderAssignBuffer.h

View 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

View File