used VIL instead of MI in MaterialRenderList

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-09-20 17:19:46 +08:00
parent e71ec4be85
commit 69646971ce
2 changed files with 8 additions and 9 deletions

View File

@ -46,7 +46,7 @@ protected:
VBOList * vbo_list; VBOList * vbo_list;
MaterialInstance * last_mi; const VIL * last_vil;
Pipeline * last_pipeline; Pipeline * last_pipeline;
const VertexInputData * last_vid; const VertexInputData * last_vid;
uint last_index; uint last_index;

View File

@ -137,7 +137,7 @@ void MaterialRenderList::Stat()
ri->Set(rn->ri); ri->Set(rn->ri);
last_pipeline =ri->pipeline; last_pipeline =ri->pipeline;
last_mi =ri->mi; last_vil =ri->mi->GetVIL();
last_vid =ri->vid; last_vid =ri->vid;
++rn; ++rn;
@ -145,7 +145,7 @@ 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_mi==rn->ri->GetMaterialInstance()) if(last_vil==rn->ri->GetMaterialInstance()->GetVIL())
if(last_vid==rn->ri->GetVertexInputData()) if(last_vid==rn->ri->GetVertexInputData())
{ {
++ri->count; ++ri->count;
@ -161,7 +161,7 @@ void MaterialRenderList::Stat()
ri->Set(rn->ri); ri->Set(rn->ri);
last_pipeline =ri->pipeline; last_pipeline =ri->pipeline;
last_mi =ri->mi; last_vil =ri->mi->GetVIL();
last_vid =ri->vid; last_vid =ri->vid;
++rn; ++rn;
@ -181,7 +181,7 @@ bool MaterialRenderList::Bind(const VertexInputData *vid,const uint ri_index)
{ {
//binding号都是在VertexInput::CreateVIL时连续紧密排列生成的所以bind时first_binding写0就行了。 //binding号都是在VertexInput::CreateVIL时连续紧密排列生成的所以bind时first_binding写0就行了。
const VIL *vil=last_mi->GetVIL(); const VIL *vil=last_vil;
if(vil->GetCount(VertexInputGroup::Basic)!=vid->binding_count) if(vil->GetCount(VertexInputGroup::Basic)!=vid->binding_count)
return(false); //这里基本不太可能因为CreateRenderable时就会检查值是否一样 return(false); //这里基本不太可能因为CreateRenderable时就会检查值是否一样
@ -253,16 +253,15 @@ void MaterialRenderList::Render(RenderItem *ri)
cmd_buf->BindPipeline(ri->pipeline); cmd_buf->BindPipeline(ri->pipeline);
last_pipeline=ri->pipeline; last_pipeline=ri->pipeline;
last_mi=nullptr;
last_vid=nullptr; last_vid=nullptr;
//这里未来尝试换pipeline同时不换mi/primitive是否需要重新绑定mi/primitive //这里未来尝试换pipeline同时不换mi/primitive是否需要重新绑定mi/primitive
} }
if(last_mi!=ri->mi) if(last_vil!=ri->mi->GetVIL())
{ {
Bind(ri->mi); Bind(ri->mi);
last_mi=ri->mi; last_vil=ri->mi->GetVIL();
last_vid=nullptr; last_vid=nullptr;
} }
@ -301,7 +300,7 @@ void MaterialRenderList::Render(RenderCmdBuffer *rcb)
RenderItem *ri=ri_array.GetData(); RenderItem *ri=ri_array.GetData();
last_pipeline =nullptr; last_pipeline =nullptr;
last_mi =nullptr; last_vil =nullptr;
last_vid =nullptr; last_vid =nullptr;
for(uint i=0;i<ri_count;i++) for(uint i=0;i<ri_count;i++)