add renderitem sort by vdm
This commit is contained in:
parent
55001843ea
commit
cc80fe7f39
2
CMCore
2
CMCore
@ -1 +1 @@
|
||||
Subproject commit b7e0852bd4b781abbb8a0815f5f456b0f810ce95
|
||||
Subproject commit 3c382665efe376af10b231f603344cfd8a5758e8
|
@ -1 +1 @@
|
||||
Subproject commit 3d69fc8b48d844b9761ec7d9b1a357a5684a295e
|
||||
Subproject commit 1c8e479181ed9b4d2b59d794be8064f05818ea1c
|
@ -222,8 +222,8 @@ public:
|
||||
cb->BeginRenderPass();
|
||||
cb->BindPipeline(ri->GetPipeline());
|
||||
cb->BindDescriptorSets(ri->GetMaterial());
|
||||
cb->BindRenderBuffer(ri->GetRenderBuffer());
|
||||
cb->Draw(ri->GetRenderBuffer(),ri->GetRenderData());
|
||||
cb->BindRenderBuffer(ri->GetDataBuffer());
|
||||
cb->Draw(ri->GetDataBuffer(),ri->GetRenderData());
|
||||
cb->EndRenderPass();
|
||||
cb->End();
|
||||
|
||||
|
@ -105,7 +105,7 @@ public:
|
||||
Primitive * GetPrimitive (){return primitive;}
|
||||
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;}
|
||||
};//class Renderable
|
||||
|
||||
|
@ -110,7 +110,7 @@ void MaterialRenderList::RenderItem::Set(Renderable *ri)
|
||||
{
|
||||
pipeline=ri->GetPipeline();
|
||||
mi =ri->GetMaterialInstance();
|
||||
pdb =ri->GetRenderBuffer();
|
||||
pdb =ri->GetDataBuffer();
|
||||
prd =ri->GetRenderData();
|
||||
}
|
||||
|
||||
@ -140,13 +140,27 @@ void MaterialRenderList::Stat()
|
||||
for(uint i=1;i<count;i++)
|
||||
{
|
||||
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)
|
||||
{
|
||||
++ri->instance_count;
|
||||
++rn;
|
||||
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;
|
||||
@ -156,7 +170,8 @@ void MaterialRenderList::Stat()
|
||||
ri->Set(rn->ri);
|
||||
|
||||
last_pipeline =ri->pipeline;
|
||||
last_data_buffer =ri->pdb;
|
||||
last_data_buffer=ri->pdb;
|
||||
last_vdm =ri->pdb->vdm;
|
||||
last_render_data=ri->prd;
|
||||
|
||||
++rn;
|
||||
@ -261,8 +276,6 @@ void MaterialRenderList::Render(RenderCmdBuffer *rcb)
|
||||
|
||||
cmd_buf=rcb;
|
||||
|
||||
RenderItem *ri=ri_array.GetData();
|
||||
|
||||
last_pipeline =nullptr;
|
||||
last_data_buffer=nullptr;
|
||||
last_vdm =nullptr;
|
||||
@ -273,6 +286,7 @@ void MaterialRenderList::Render(RenderCmdBuffer *rcb)
|
||||
|
||||
cmd_buf->BindDescriptorSets(material);
|
||||
|
||||
RenderItem *ri=ri_array.GetData();
|
||||
for(uint i=0;i<ri_count;i++)
|
||||
{
|
||||
Render(ri);
|
||||
|
@ -26,6 +26,9 @@ const bool PrimitiveDataBuffer::Comp(const PrimitiveDataBuffer *pdb)const
|
||||
{
|
||||
if(!pdb)return(false);
|
||||
|
||||
if(vdm&&pdb->vdm)
|
||||
return (vdm==pdb->vdm);
|
||||
|
||||
if(vab_count!=pdb->vab_count)return(false);
|
||||
|
||||
for(uint32_t i=0;i<vab_count;i++)
|
||||
|
Loading…
x
Reference in New Issue
Block a user