diff --git a/inc/hgl/WorkObject.h b/inc/hgl/WorkObject.h index 4c6f883a..895c547f 100644 --- a/inc/hgl/WorkObject.h +++ b/inc/hgl/WorkObject.h @@ -115,13 +115,19 @@ namespace hgl graph::Primitive *CreatePrimitive( const AnsiString &name, const uint32_t vertices_count, const graph::VIL *vil, - const std::initializer_list &vad_list); + const std::initializer_list &vad_list) + { + return render_framework?render_framework->CreatePrimitive(name,vertices_count,vil,vad_list):nullptr; //创建Primitive + } graph::Mesh *CreateMesh(const AnsiString &name, const uint32_t vertices_count, graph::MaterialInstance *mi, graph::Pipeline *pipeline, - const std::initializer_list &vad_list); + const std::initializer_list &vad_list) + { + return render_framework?render_framework->CreateMesh(name,vertices_count,mi,pipeline,vad_list):nullptr; //创建Mesh + } public: //Component 相关 diff --git a/inc/hgl/graph/RenderFramework.h b/inc/hgl/graph/RenderFramework.h index eccd18f8..0ff8c38d 100644 --- a/inc/hgl/graph/RenderFramework.h +++ b/inc/hgl/graph/RenderFramework.h @@ -130,6 +130,19 @@ public: // other TileFont *CreateTileFont(FontSource *fs,int limit_count=-1); ///<创建只使用一种字符的Tile字符管理对象 +public: // Primitive, Mesh + + graph::Primitive *CreatePrimitive(const AnsiString &name, + const uint32_t vertices_count, + const graph::VIL *vil, + const std::initializer_list &vad_list); + + graph::Mesh *CreateMesh(const AnsiString &name, + const uint32_t vertices_count, + graph::MaterialInstance *mi, + graph::Pipeline *pipeline, + const std::initializer_list &vad_list); + public: // ComponentManager template T *GetComponentManager() diff --git a/src/SceneGraph/RenderFramework.cpp b/src/SceneGraph/RenderFramework.cpp index 415a715a..06c1e2ee 100644 --- a/src/SceneGraph/RenderFramework.cpp +++ b/src/SceneGraph/RenderFramework.cpp @@ -196,4 +196,43 @@ void RenderFramework::Tick() } } +graph::Primitive *RenderFramework::CreatePrimitive(const AnsiString &name, + const uint32_t vertices_count, + const graph::VIL *vil, + const std::initializer_list &vad_list) +{ + auto *pc=new graph::PrimitiveCreater(GetDevice(),vil); + + pc->Init(name,vertices_count); + + for(const auto &vad:vad_list) + { + if(!pc->WriteVAB(vad.name,vad.format,vad.data)) + { + delete pc; + return(nullptr); + } + } + + auto *prim=pc->Create(); + + if(prim) + render_resource->Add(prim); + + return prim; +} + +graph::Mesh *RenderFramework::CreateMesh( const AnsiString &name, + const uint32_t vertices_count, + graph::MaterialInstance *mi, + graph::Pipeline *pipeline, + const std::initializer_list &vad_list) +{ + auto *prim=this->CreatePrimitive(name,vertices_count,mi->GetVIL(),vad_list); + + if(!prim) + return(nullptr); + + return render_resource->CreateMesh(prim,mi,pipeline); +} VK_NAMESPACE_END diff --git a/src/Work/WorkObject.cpp b/src/Work/WorkObject.cpp index de46ee9c..40266873 100644 --- a/src/Work/WorkObject.cpp +++ b/src/Work/WorkObject.cpp @@ -60,44 +60,4 @@ namespace hgl //std::cout<<"WorkObject::Render End"< &vad_list) - { - auto *pc=new graph::PrimitiveCreater(GetDevice(),vil); - - pc->Init(name,vertices_count); - - for(const auto &vad:vad_list) - { - if(!pc->WriteVAB(vad.name,vad.format,vad.data)) - { - delete pc; - return(nullptr); - } - } - - auto *prim=pc->Create(); - - if(prim) - db->Add(prim); - - return prim; - } - - graph::Mesh *WorkObject::CreateMesh( const AnsiString &name, - const uint32_t vertices_count, - graph::MaterialInstance *mi, - graph::Pipeline *pipeline, - const std::initializer_list &vad_list) - { - auto *prim=this->CreatePrimitive(name,vertices_count,mi->GetVIL(),vad_list); - - if(!prim) - return(nullptr); - - return db->CreateMesh(prim,mi,pipeline); - } }//namespcae hgl