ULRE/src/SceneGraph/RenderList.cpp

84 lines
1.8 KiB
C++
Raw Normal View History

2019-05-25 00:50:04 +08:00
#include<hgl/graph/RenderList.h>
2019-05-21 21:28:33 +08:00
#include<hgl/graph/SceneNode.h>
#include<hgl/graph/VKBuffer.h>
2022-06-24 17:51:05 +08:00
#include<hgl/graph/VKPrimitive.h>
#include<hgl/graph/VKCommandBuffer.h>
#include<hgl/graph/VertexAttribDataAccess.h>
#include<hgl/graph/VKMaterialParameters.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/util/sort/Sort.h>
2019-05-21 21:28:33 +08:00
namespace hgl
{
namespace graph
{
RenderList::RenderList(GPUDevice *dev)
{
device =dev;
2023-05-07 01:07:26 +08:00
renderable_count=0;
}
RenderList::~RenderList()
{
2023-03-23 21:43:10 +08:00
}
2023-05-07 01:07:26 +08:00
bool RenderList::ExpendNode(SceneNode *sn)
{
if(!sn)return(false);
Renderable *ri=sn->GetRenderable();
if(ri)
{
2023-05-07 01:07:26 +08:00
Material *mtl=ri->GetMaterial();
MaterialRenderList *mrl;
2023-05-07 01:07:26 +08:00
if(!mrl_map.Get(mtl,mrl))
{
mrl=new MaterialRenderList(device,true,mtl);
2023-05-07 01:07:26 +08:00
mrl_map.Add(mtl,mrl);
}
mrl->Add(ri,sn->GetLocalToWorldMatrix());
2023-05-07 01:07:26 +08:00
++renderable_count;
}
for(SceneNode *sub:sn->SubNode)
2023-05-07 01:07:26 +08:00
ExpendNode(sub);
return(true);
}
2023-05-07 01:07:26 +08:00
bool RenderList::Expend(SceneNode *sn)
{
if(!device|!sn)return(false);
2023-05-07 01:07:26 +08:00
mrl_map.Begin();
ExpendNode(sn);
mrl_map.End();
return(true);
}
bool RenderList::Render(RenderCmdBuffer *cb)
{
if(!cb)
2019-05-21 21:28:33 +08:00
return(false);
2023-05-07 01:07:26 +08:00
if(renderable_count<=0)
return(true);
2023-05-07 01:07:26 +08:00
mrl_map.Render(cb);
2019-05-21 21:28:33 +08:00
return(true);
}
2023-05-07 01:07:26 +08:00
void RenderList::Clear()
{
mrl_map.Clear();
}
2019-05-21 21:28:33 +08:00
}//namespace graph
}//namespace hgl