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);