ULRE/src/SceneGraph/RenderList.cpp

105 lines
2.3 KiB
C++
Raw Normal View History

2024-10-06 02:30:59 +08:00
#include<hgl/graph/MaterialRenderList.h>
#include<hgl/graph/RenderList.h>
2019-05-21 21:28:33 +08:00
#include<hgl/graph/SceneNode.h>
2024-10-06 02:30:59 +08:00
#include<hgl/graph/VK.h>
#include<hgl/graph/VKCommandBuffer.h>
2024-10-06 02:30:59 +08:00
#include<hgl/graph/VKMaterial.h>
#include<hgl/graph/VKRenderable.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;
camera_info=nullptr;
}
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(sn);
2023-05-07 01:07:26 +08:00
++renderable_count;
}
for(SceneNode *sub:sn->GetChildNode())
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);
mrl_map.Begin(camera_info);
2023-05-07 01:07:26 +08:00
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();
}
void RenderList::UpdateLocalToWorld()
{
if(renderable_count<=0)
return;
mrl_map.UpdateLocalToWorld();
}
void RenderList::UpdateMaterialInstance(SceneNode *sn)
{
if(!sn)return;
Renderable *ri=sn->GetRenderable();
if(!ri)return;
Material *mtl=ri->GetMaterial();
MaterialRenderList *mrl;
if(!mrl_map.Get(mtl,mrl)) //找到对应的
return;
mrl->UpdateMaterialInstance(sn);
}
2019-05-21 21:28:33 +08:00
}//namespace graph
}//namespace hgl