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->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();
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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;
|
||||||
@ -157,6 +171,7 @@ void MaterialRenderList::Stat()
|
|||||||
|
|
||||||
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);
|
||||||
|
@ -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++)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user