add renderitem sort by vdm

This commit is contained in:
hyzboy 2024-05-29 00:55:12 +08:00
parent 55001843ea
commit cc80fe7f39
6 changed files with 27 additions and 10 deletions

2
CMCore

@ -1 +1 @@
Subproject commit b7e0852bd4b781abbb8a0815f5f456b0f810ce95 Subproject commit 3c382665efe376af10b231f603344cfd8a5758e8

@ -1 +1 @@
Subproject commit 3d69fc8b48d844b9761ec7d9b1a357a5684a295e Subproject commit 1c8e479181ed9b4d2b59d794be8064f05818ea1c

View File

@ -222,8 +222,8 @@ public:
cb->BeginRenderPass(); cb->BeginRenderPass();
cb->BindPipeline(ri->GetPipeline()); cb->BindPipeline(ri->GetPipeline());
cb->BindDescriptorSets(ri->GetMaterial()); cb->BindDescriptorSets(ri->GetMaterial());
cb->BindRenderBuffer(ri->GetRenderBuffer()); cb->BindRenderBuffer(ri->GetDataBuffer());
cb->Draw(ri->GetRenderBuffer(),ri->GetRenderData()); cb->Draw(ri->GetDataBuffer(),ri->GetRenderData());
cb->EndRenderPass(); cb->EndRenderPass();
cb->End(); cb->End();

View File

@ -105,7 +105,7 @@ public:
Primitive * GetPrimitive (){return primitive;} Primitive * GetPrimitive (){return primitive;}
const AABB & GetBoundingBox ()const{return primitive->GetBoundingBox();} const AABB & GetBoundingBox ()const{return primitive->GetBoundingBox();}
const PrimitiveDataBuffer *GetRenderBuffer ()const{return primitive_data_buffer;} const PrimitiveDataBuffer *GetDataBuffer ()const{return primitive_data_buffer;}
const PrimitiveRenderData *GetRenderData ()const{return primitive_render_data;} const PrimitiveRenderData *GetRenderData ()const{return primitive_render_data;}
};//class Renderable };//class Renderable

View File

@ -110,7 +110,7 @@ void MaterialRenderList::RenderItem::Set(Renderable *ri)
{ {
pipeline=ri->GetPipeline(); pipeline=ri->GetPipeline();
mi =ri->GetMaterialInstance(); mi =ri->GetMaterialInstance();
pdb =ri->GetRenderBuffer(); pdb =ri->GetDataBuffer();
prd =ri->GetRenderData(); prd =ri->GetRenderData();
} }
@ -140,13 +140,27 @@ void MaterialRenderList::Stat()
for(uint i=1;i<count;i++) for(uint i=1;i<count;i++)
{ {
if(last_pipeline==rn->ri->GetPipeline()) if(last_pipeline==rn->ri->GetPipeline())
if(last_data_buffer->Comp(rn->ri->GetRenderBuffer())) {
if(last_data_buffer->vdm&&last_data_buffer->vdm==rn->ri->GetDataBuffer()->vdm)
{
if(last_render_data->_Comp(rn->ri->GetRenderData())==0) if(last_render_data->_Comp(rn->ri->GetRenderData())==0)
{ {
++ri->instance_count; ++ri->instance_count;
++rn; ++rn;
continue; continue;
} }
}
else
{
if(last_data_buffer->Comp(rn->ri->GetDataBuffer()))
if(last_render_data->_Comp(rn->ri->GetRenderData())==0)
{
++ri->instance_count;
++rn;
continue;
}
}
}
++ri_count; ++ri_count;
++ri; ++ri;
@ -156,7 +170,8 @@ void MaterialRenderList::Stat()
ri->Set(rn->ri); ri->Set(rn->ri);
last_pipeline =ri->pipeline; last_pipeline =ri->pipeline;
last_data_buffer =ri->pdb; last_data_buffer=ri->pdb;
last_vdm =ri->pdb->vdm;
last_render_data=ri->prd; last_render_data=ri->prd;
++rn; ++rn;
@ -261,8 +276,6 @@ void MaterialRenderList::Render(RenderCmdBuffer *rcb)
cmd_buf=rcb; cmd_buf=rcb;
RenderItem *ri=ri_array.GetData();
last_pipeline =nullptr; last_pipeline =nullptr;
last_data_buffer=nullptr; last_data_buffer=nullptr;
last_vdm =nullptr; last_vdm =nullptr;
@ -273,6 +286,7 @@ void MaterialRenderList::Render(RenderCmdBuffer *rcb)
cmd_buf->BindDescriptorSets(material); cmd_buf->BindDescriptorSets(material);
RenderItem *ri=ri_array.GetData();
for(uint i=0;i<ri_count;i++) for(uint i=0;i<ri_count;i++)
{ {
Render(ri); Render(ri);

View File

@ -26,6 +26,9 @@ const bool PrimitiveDataBuffer::Comp(const PrimitiveDataBuffer *pdb)const
{ {
if(!pdb)return(false); if(!pdb)return(false);
if(vdm&&pdb->vdm)
return (vdm==pdb->vdm);
if(vab_count!=pdb->vab_count)return(false); if(vab_count!=pdb->vab_count)return(false);
for(uint32_t i=0;i<vab_count;i++) for(uint32_t i=0;i<vab_count;i++)