diff --git a/CMCore b/CMCore index b7e0852b..3c382665 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit b7e0852bd4b781abbb8a0815f5f456b0f810ce95 +Subproject commit 3c382665efe376af10b231f603344cfd8a5758e8 diff --git a/CMSceneGraph b/CMSceneGraph index 3d69fc8b..1c8e4791 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit 3d69fc8b48d844b9761ec7d9b1a357a5684a295e +Subproject commit 1c8e479181ed9b4d2b59d794be8064f05818ea1c diff --git a/example/common/VulkanAppFramework.h b/example/common/VulkanAppFramework.h index d2204572..c48048d6 100644 --- a/example/common/VulkanAppFramework.h +++ b/example/common/VulkanAppFramework.h @@ -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(); diff --git a/inc/hgl/graph/VKRenderable.h b/inc/hgl/graph/VKRenderable.h index ffa3ccc8..91549443 100644 --- a/inc/hgl/graph/VKRenderable.h +++ b/inc/hgl/graph/VKRenderable.h @@ -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 diff --git a/src/SceneGraph/MaterialRenderList.cpp b/src/SceneGraph/MaterialRenderList.cpp index 64c5ac63..4af939d9 100644 --- a/src/SceneGraph/MaterialRenderList.cpp +++ b/src/SceneGraph/MaterialRenderList.cpp @@ -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;iri->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;ivdm) + return (vdm==pdb->vdm); + if(vab_count!=pdb->vab_count)return(false); for(uint32_t i=0;i