From a03770fd008a16cdc65293310fffb9361b6693a3 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 28 Jan 2025 22:20:48 +0800 Subject: [PATCH] Added WorkObject::CreateRenderable(...) --- example/Basic/rf_test.cpp | 23 +++++++---------------- inc/hgl/WorkObject.h | 8 +++++++- inc/hgl/graph/VK.h | 7 +++++++ src/Work/WorkObject.cpp | 30 +++++++++++++++++++++++++++++- 4 files changed, 50 insertions(+), 18 deletions(-) diff --git a/example/Basic/rf_test.cpp b/example/Basic/rf_test.cpp index c158704a..8752e011 100644 --- a/example/Basic/rf_test.cpp +++ b/example/Basic/rf_test.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include #include #include @@ -28,6 +27,7 @@ constexpr float color_data[VERTEX_COUNT*4]= 0,0,1,1 }; + class TestApp:public WorkObject { private: @@ -65,14 +65,11 @@ private: bool InitVBO() { - PrimitiveCreater rpc(GetDevice(),material_instance->GetVIL()); - - rpc.Init("Triangle",VERTEX_COUNT); - - if(!rpc.WriteVAB(VAN::Position, VF_V2F, position_data))return(false); - if(!rpc.WriteVAB(VAN::Color, VF_V4F, color_data ))return(false); - - render_obj=db->CreateRenderable(&rpc,material_instance,pipeline); + render_obj=CreateRenderable("Triangle",VERTEX_COUNT,material_instance,pipeline, + { + {VAN::Position,VF_V2F,position_data}, + {VAN::Color, VF_V4F,color_data} + }); return(render_obj); } @@ -81,11 +78,6 @@ public: TestApp(RenderFramework *rf):WorkObject() { Join(rf,rf->GetSwapchainRenderTarget()); - } - - void Join(RenderFramework *rf,IRenderTarget *rt) - { - WorkObject::Join(rf,rt); if(!InitAutoMaterial()) return; @@ -97,8 +89,7 @@ public: return; } - void Tick(double)override - {} + void Tick(double)override{} void Render(double delta_time,graph::RenderCmdBuffer *cmd) { diff --git a/inc/hgl/WorkObject.h b/inc/hgl/WorkObject.h index 72ccf498..ff8833bd 100644 --- a/inc/hgl/WorkObject.h +++ b/inc/hgl/WorkObject.h @@ -1,6 +1,6 @@ #pragma once -#include #include +#include #include //#include @@ -60,6 +60,12 @@ namespace hgl { return render_pass->CreatePipeline(args...); } + + graph::Renderable *CreateRenderable( const AnsiString &name, + uint32_t vertices_count, + graph::MaterialInstance *mi, + graph::Pipeline *pipeline, + const std::initializer_list &vad_list); };//class WorkObject /** diff --git a/inc/hgl/graph/VK.h b/inc/hgl/graph/VK.h index ffb8ff1d..59c3cc71 100644 --- a/inc/hgl/graph/VK.h +++ b/inc/hgl/graph/VK.h @@ -25,6 +25,13 @@ constexpr size_t VK_DESCRIPTOR_TYPE_END_RANGE=VK_DESCRIPTOR_TYPE_INPUT_ATTACHMEN constexpr size_t VK_DESCRIPTOR_TYPE_RANGE_SIZE=VK_DESCRIPTOR_TYPE_END_RANGE-VK_DESCRIPTOR_TYPE_BEGIN_RANGE+1; #endif//VK_DESCRIPTOR_TYPE_RANGE_SIZE +struct VertexAttribDataPtr +{ + const char * name; + const VkFormat format; + const void * data; +}; + using BindingMap =Map; using BindingMapArray =BindingMap[VK_DESCRIPTOR_TYPE_RANGE_SIZE]; diff --git a/src/Work/WorkObject.cpp b/src/Work/WorkObject.cpp index 913508b5..9a2f49ff 100644 --- a/src/Work/WorkObject.cpp +++ b/src/Work/WorkObject.cpp @@ -3,7 +3,10 @@ #include #include #include -#include +#include +#include +#include +#include #include //#include @@ -51,4 +54,29 @@ namespace hgl //std::cout<<"WorkObject::Render End"< &vad_list) + { + auto *pc=new graph::PrimitiveCreater(GetDevice(),mi->GetVIL()); + + 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 *result=db->CreateRenderable(pc,mi,pipeline); + + delete pc; + return result; + } }//namespcae hgl