From c12b333337918c6170a05c91918c7540813af49c Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sun, 6 Jul 2025 18:13:22 +0800 Subject: [PATCH] =?UTF-8?q?RenderFramework/WorkObject=E5=A2=9E=E5=8A=A0Cre?= =?UTF-8?q?ateVDM=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/hgl/WorkObject.h | 6 ++++++ inc/hgl/graph/RenderFramework.h | 3 +++ src/SceneGraph/RenderFramework.cpp | 26 +++++++++++++++++++++++--- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/inc/hgl/WorkObject.h b/inc/hgl/WorkObject.h index cedfcc02..3b04b0c6 100644 --- a/inc/hgl/WorkObject.h +++ b/inc/hgl/WorkObject.h @@ -78,6 +78,12 @@ namespace hgl public: + template + graph::VertexDataManager *CreateVDM(ARGS...args) + { + return render_framework?render_framework->CreateVDM(args...):nullptr; + } + graph::Material *CreateMaterial(const AnsiString &mi_name,const graph::mtl::MaterialCreateInfo *mci) { return render_framework?render_framework->CreateMaterial(mi_name,mci):nullptr; diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index d5f274fd..9d3c5203 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -223,6 +223,9 @@ public: return(new graph::PrimitiveCreater(GetDevice(),mi->GetVIL())); } + graph::VertexDataManager *CreateVDM(const graph::VIL *vil,const VkDeviceSize vertices_number,VkDeviceSize indices_number,const IndexType type=IndexType::U16); + graph::VertexDataManager *CreateVDM(const graph::VIL *vil,const VkDeviceSize number,const IndexType type=IndexType::U16){return CreateVDM(vil,number,number,type);} + public: // Primitive, Mesh graph::Primitive *CreatePrimitive(const AnsiString &name, diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index d4992024..aec03a95 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -196,10 +197,29 @@ void RenderFramework::Tick() } } +graph::VertexDataManager *RenderFramework::CreateVDM(const graph::VIL *vil,const VkDeviceSize vertices_number,VkDeviceSize indices_number,const IndexType type) +{ + if(!vil||vertices_number<=0||indices_number<=0||!device->IsSupport(type)) + return(nullptr); + + auto *vdm=new VertexDataManager(device,vil); + + if(!vdm) + return(nullptr); + + if(!vdm->Init(vertices_number,indices_number,type)) + { + delete vdm; + return nullptr; + } + + return vdm; +} + graph::Primitive *RenderFramework::CreatePrimitive( const AnsiString &name, - const uint32_t vertices_count, - const graph::VIL *vil, - const std::initializer_list &vad_list) + const uint32_t vertices_count, + const graph::VIL *vil, + const std::initializer_list &vad_list) { auto *pc=new graph::PrimitiveCreater(GetDevice(),vil);