From 69646971ce15783cda07ebe60857894d42a0f4e8 Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Wed, 20 Sep 2023 17:19:46 +0800 Subject: [PATCH] used VIL instead of MI in MaterialRenderList --- inc/hgl/graph/MaterialRenderList.h | 2 +- src/SceneGraph/MaterialRenderList.cpp | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/inc/hgl/graph/MaterialRenderList.h b/inc/hgl/graph/MaterialRenderList.h index ffe24a9f..0fa9d886 100644 --- a/inc/hgl/graph/MaterialRenderList.h +++ b/inc/hgl/graph/MaterialRenderList.h @@ -46,7 +46,7 @@ protected: VBOList * vbo_list; - MaterialInstance * last_mi; + const VIL * last_vil; Pipeline * last_pipeline; const VertexInputData * last_vid; uint last_index; diff --git a/src/SceneGraph/MaterialRenderList.cpp b/src/SceneGraph/MaterialRenderList.cpp index 5dcd608b..cf99ba8d 100644 --- a/src/SceneGraph/MaterialRenderList.cpp +++ b/src/SceneGraph/MaterialRenderList.cpp @@ -137,7 +137,7 @@ void MaterialRenderList::Stat() ri->Set(rn->ri); last_pipeline =ri->pipeline; - last_mi =ri->mi; + last_vil =ri->mi->GetVIL(); last_vid =ri->vid; ++rn; @@ -145,7 +145,7 @@ void MaterialRenderList::Stat() for(uint i=1;iri->GetPipeline()) - if(last_mi==rn->ri->GetMaterialInstance()) + if(last_vil==rn->ri->GetMaterialInstance()->GetVIL()) if(last_vid==rn->ri->GetVertexInputData()) { ++ri->count; @@ -161,7 +161,7 @@ void MaterialRenderList::Stat() ri->Set(rn->ri); last_pipeline =ri->pipeline; - last_mi =ri->mi; + last_vil =ri->mi->GetVIL(); last_vid =ri->vid; ++rn; @@ -181,7 +181,7 @@ bool MaterialRenderList::Bind(const VertexInputData *vid,const uint ri_index) { //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) return(false); //这里基本不太可能,因为CreateRenderable时就会检查值是否一样 @@ -253,16 +253,15 @@ void MaterialRenderList::Render(RenderItem *ri) cmd_buf->BindPipeline(ri->pipeline); last_pipeline=ri->pipeline; - last_mi=nullptr; last_vid=nullptr; //这里未来尝试换pipeline同时不换mi/primitive是否需要重新绑定mi/primitive } - if(last_mi!=ri->mi) + if(last_vil!=ri->mi->GetVIL()) { Bind(ri->mi); - last_mi=ri->mi; + last_vil=ri->mi->GetVIL(); last_vid=nullptr; } @@ -301,7 +300,7 @@ void MaterialRenderList::Render(RenderCmdBuffer *rcb) RenderItem *ri=ri_array.GetData(); last_pipeline =nullptr; - last_mi =nullptr; + last_vil =nullptr; last_vid =nullptr; for(uint i=0;i