ULRE/src/SceneGraph/RenderList.cpp

105 lines
2.4 KiB
C++
Raw Normal View History

2019-05-25 00:50:04 +08:00
#include<hgl/graph/RenderList.h>
#include<hgl/graph/Camera.h>
2019-05-21 21:28:33 +08:00
#include<hgl/graph/SceneNode.h>
#include<hgl/graph/VKBuffer.h>
#include<hgl/graph/VKRenderable.h>
#include<hgl/graph/VKCommandBuffer.h>
#include<hgl/graph/VertexAttribDataAccess.h>
#include<hgl/graph/VKMaterialInstance.h>
#include<hgl/graph/VKRenderableInstance.h>
2019-05-25 00:50:04 +08:00
2019-05-21 21:28:33 +08:00
namespace hgl
{
namespace graph
{
2021-06-15 19:03:34 +08:00
RenderList::RenderList()
{
cmd_buf =nullptr;
mvp_buffer =nullptr;
ri_list =nullptr;
2020-12-18 16:52:45 +08:00
ubo_offset =0;
ubo_align =0;
last_pipeline =nullptr;
last_mi =nullptr;
last_vbo =0;
}
void RenderList::Set(List<RenderableInstance *> *ril,GPUBuffer *buf,const uint32_t align)
{
ri_list=ril;
mvp_buffer=buf;
ubo_align=align;
}
2021-06-10 18:56:23 +08:00
void RenderList::Render(RenderableInstance *ri)
2019-05-21 21:28:33 +08:00
{
2019-05-25 00:50:04 +08:00
if(last_pipeline!=ri->GetPipeline())
{
last_pipeline=ri->GetPipeline();
cmd_buf->BindPipeline(last_pipeline);
2019-05-25 00:50:04 +08:00
}
2019-05-25 00:50:04 +08:00
{
MaterialParameters *mi=ri->GetMaterialInstance();
if(mi!=last_mi)
{
last_mi=mi;
cmd_buf->BindDescriptorSets(mi->GetDescriptorSets());
}
}
{
}
2019-05-25 00:50:04 +08:00
if(last_vbo!=ri->GetBufferHash())
2019-05-25 00:50:04 +08:00
{
last_vbo=ri->GetBufferHash();
cmd_buf->BindVAB(ri);
2019-05-25 00:50:04 +08:00
}
2020-10-21 12:47:06 +08:00
const IndexBuffer *ib=ri->GetIndexBuffer();
2019-05-25 00:50:04 +08:00
if(ib)
{
cmd_buf->DrawIndexed(ib->GetCount());
}
else
{
cmd_buf->Draw(ri->GetDrawCount());
2019-05-25 00:50:04 +08:00
}
}
bool RenderList::Render(RenderCmdBuffer *cb)
{
if(!cb)
2019-05-21 21:28:33 +08:00
return(false);
if(!mvp_buffer
||!ri_list)
return(false);
if(ri_list->GetCount()<=0)
return(true);
cmd_buf=cb;
2019-05-25 00:50:04 +08:00
last_pipeline=nullptr;
last_mi=nullptr;
last_vbo=0;
ubo_offset=0;
2019-05-25 00:50:04 +08:00
for(RenderableInstance *ri:*ri_list)
Render(ri);
2019-05-21 21:28:33 +08:00
return(true);
}
}//namespace graph
}//namespace hgl