From 202bff587036c1683a2f4945f2d0b530a9c0c58e Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Wed, 6 Sep 2023 16:24:05 +0800 Subject: [PATCH] moved few codes to RenderAssignBuffer.cpp from MaterialRenderList.cpp --- src/SceneGraph/CMakeLists.txt | 1 + src/SceneGraph/MaterialRenderList.cpp | 13 +-- src/SceneGraph/RenderAssignBuffer.cpp | 130 ++++++++++++++++++++++++++ src/SceneGraph/RenderAssignBuffer.h | 128 +++---------------------- 4 files changed, 146 insertions(+), 126 deletions(-) create mode 100644 src/SceneGraph/RenderAssignBuffer.cpp diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 987b0d43..1a02f98b 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -45,6 +45,7 @@ SET(SCENE_GRAPH_HEADER ${SG_INCLUDE_PATH}/SceneInfo.h SET(SCENE_GRAPH_SOURCE RenderList.cpp MaterialRenderList.cpp RenderAssignBuffer.h + RenderAssignBuffer.cpp SceneNode.cpp SceneOrient.cpp) diff --git a/src/SceneGraph/MaterialRenderList.cpp b/src/SceneGraph/MaterialRenderList.cpp index 02e50c9f..c22d881d 100644 --- a/src/SceneGraph/MaterialRenderList.cpp +++ b/src/SceneGraph/MaterialRenderList.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include"RenderAssignBuffer.h" @@ -177,15 +176,7 @@ void MaterialRenderList::Bind(MaterialInstance *mi) { if(!mi)return; - const VIL *vil=mi->GetVIL(); - - const uint assign_binding_count=vil->GetCount(VertexInputGroup::Assign); - - if(assign_binding_count>0) - { - mi->BindUBO(DescriptorSetType::PerFrame,mtl::SBS_LocalToWorld.name,assign_buffer->ubo_l2w); -// mi->BindUBO(DescriptorSetType::PerFrame,"Assign",assign_buffer->ubo_mi); - } + assign_buffer->Bind(mi); cmd_buf->BindDescriptorSets(mi->GetMaterial()); } @@ -261,7 +252,7 @@ bool MaterialRenderList::Bind(const VertexInputData *vid,const uint ri_index) if(assign_binding_count!=1) return(false); - vbo_list->Add(assign_buffer->vbo_assigns->GetBuffer(),ASSIGNS_VBO_STRIP_BYTES*ri_index); + vbo_list->Add(assign_buffer->GetAssignVBO(),ASSIGNS_VBO_STRIP_BYTES*ri_index); } } diff --git a/src/SceneGraph/RenderAssignBuffer.cpp b/src/SceneGraph/RenderAssignBuffer.cpp new file mode 100644 index 00000000..fb628869 --- /dev/null +++ b/src/SceneGraph/RenderAssignBuffer.cpp @@ -0,0 +1,130 @@ +#include"RenderAssignBuffer.h" +#include +#include +#include +#include +#include + +VK_NAMESPACE_BEGIN + +VkBuffer RenderAssignBuffer::GetAssignVBO()const +{ + return vbo_assigns->GetBuffer(); +} + +void RenderAssignBuffer::Bind(MaterialInstance *mi)const +{ + const VIL *vil=mi->GetVIL(); + + const uint assign_binding_count=vil->GetCount(VertexInputGroup::Assign); + + if(assign_binding_count<=0)return; + + mi->BindUBO(DescriptorSetType::PerFrame,mtl::SBS_LocalToWorld.name,ubo_l2w); +// mi->BindUBO(DescriptorSetType::PerFrame,"Assign",assign_buffer->ubo_mi); +} + +void RenderAssignBuffer::ClearNode() +{ + SAFE_CLEAR(ubo_l2w); + SAFE_CLEAR(ubo_mi); + SAFE_CLEAR(vbo_assigns); + + node_count=0; +} + +void RenderAssignBuffer::Clear() +{ + ClearNode(); +// ClearMI(); + +// SAFE_CLEAR(bone_id) +// SAFE_CLEAR(bone_weight) +} + +void RenderAssignBuffer::NodeAlloc(GPUDevice *dev,const uint c) +{ + ClearNode(); + node_count=power_to_2(c); + + ubo_l2w=dev->CreateUBO(node_count*sizeof(Matrix4f)); + //ubo_mi=dev->CreateUBO(node_count*sizeof(uint8)); + vbo_assigns=dev->CreateVBO(VF_V1U16,node_count); +} + +//void MIAlloc(GPUDevice *dev,const uint c,const uint mis) +//{ +// ClearMI(); +// if(c<=0||mi_size<=0)return; +// +// mi_count=power_to_2(c); +// mi_size=mis; + +// mi_id=dev->CreateVBO(VF_V1U8,mi_count); +// mi_id_buffer=mi_id->GetBuffer(); + +// mi_data_buffer=dev->CreateUBO(mi_count*mi_size); +//} + +void RenderAssignBuffer::WriteLocalToWorld(RenderNode *render_node,const uint count) +{ + RenderNode *rn; + + //new l2w array in ubo + { + Matrix4f *tp=(hgl::Matrix4f *)(ubo_l2w->Map()); + uint16 *idp=(uint16 *)(vbo_assigns->Map()); + + rn=render_node; + + for(uint i=0;ilocal_to_world; + ++tp; + + *idp=i; + ++idp; + + ++rn; + } + + vbo_assigns->Unmap(); + ubo_l2w->Unmap(); + } +} + +//void WriteMaterialInstance(RenderNode *render_node,const uint count,const MaterialInstanceSets &mi_set) +//{ +// //MaterialInstance ID +// { +// uint8 *tp=(uint8 *)(mi_id->Map()); + +// for(uint i=0;iri->GetMaterialInstance()); +// ++tp; +// ++render_node; +// } +// mi_id->Unmap(); +// } + +// //MaterialInstance Data +// { +// //const uint count=mi_set.GetCount(); + +// //uint8 *tp=(uint8 *)(mi_data_buffer->Map()); +// //const MaterialInstance **mi=mi_set.GetData(); + +// //for(uint i=0;iGetData(),mi_size); +// +// // ++mi; +// // tp+=mi_size; +// //} + +// //mi_data_buffer->Unmap(); +// } +//} + +VK_NAMESPACE_END diff --git a/src/SceneGraph/RenderAssignBuffer.h b/src/SceneGraph/RenderAssignBuffer.h index f66de8e7..1eb16243 100644 --- a/src/SceneGraph/RenderAssignBuffer.h +++ b/src/SceneGraph/RenderAssignBuffer.h @@ -1,6 +1,5 @@ #pragma once -//#include -#include +#include VK_NAMESPACE_BEGIN // ubo_range大致分为三档: @@ -24,6 +23,9 @@ VK_NAMESPACE_BEGIN constexpr const uint ASSIGNS_VBO_STRIP_BYTES=2; ///CreateUBO(node_count*sizeof(Matrix4f)); - //ubo_mi=dev->CreateUBO(node_count*sizeof(uint8)); - vbo_assigns=dev->CreateVBO(VF_V1U16,node_count); - } - - //void MIAlloc(GPUDevice *dev,const uint c,const uint mis) - //{ - // ClearMI(); - // if(c<=0||mi_size<=0)return; - // - // mi_count=power_to_2(c); - // mi_size=mis; - - // mi_id=dev->CreateVBO(VF_V1U8,mi_count); - // mi_id_buffer=mi_id->GetBuffer(); - - // mi_data_buffer=dev->CreateUBO(mi_count*mi_size); - //} - - void WriteLocalToWorld(RenderNode *render_node,const uint count) - { - RenderNode *rn; - - //new l2w array in ubo - { - Matrix4f *tp=(hgl::Matrix4f *)(ubo_l2w->Map()); - uint16 *idp=(uint16 *)(vbo_assigns->Map()); - - rn=render_node; - - for(uint i=0;ilocal_to_world; - ++tp; - - *idp=i; - ++idp; - - ++rn; - } - - vbo_assigns->Unmap(); - ubo_l2w->Unmap(); - } - } - - //void WriteMaterialInstance(RenderNode *render_node,const uint count,const MaterialInstanceSets &mi_set) - //{ - // //MaterialInstance ID - // { - // uint8 *tp=(uint8 *)(mi_id->Map()); - - // for(uint i=0;iri->GetMaterialInstance()); - // ++tp; - // ++render_node; - // } - // mi_id->Unmap(); - // } - - // //MaterialInstance Data - // { - // //const uint count=mi_set.GetCount(); - - // //uint8 *tp=(uint8 *)(mi_data_buffer->Map()); - // //const MaterialInstance **mi=mi_set.GetData(); - - // //for(uint i=0;iGetData(),mi_size); - // - // // ++mi; - // // tp+=mi_size; - // //} - - // //mi_data_buffer->Unmap(); - // } - //} };//struct RenderAssignBuffer VK_NAMESPACE_END