From e76234a01a4e5d86cc47db3beb00fc14371a98e1 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Mon, 21 Sep 2020 20:34:47 +0800 Subject: [PATCH] update examples. --- example/Vulkan/Geometry2D.cpp | 53 +++++++-------------- example/Vulkan/Geometry3D.cpp | 65 ++++++++------------------ example/Vulkan/InlineGeometryScene.cpp | 47 ++++++++++++++----- res | 2 +- 4 files changed, 74 insertions(+), 93 deletions(-) diff --git a/example/Vulkan/Geometry2D.cpp b/example/Vulkan/Geometry2D.cpp index 51ea0cc3..1af91939 100644 --- a/example/Vulkan/Geometry2D.cpp +++ b/example/Vulkan/Geometry2D.cpp @@ -8,17 +8,14 @@ #include #include #include -#include +#include #include using namespace hgl; using namespace hgl::graph; -bool SaveToFile(const OSString &filename,VK_NAMESPACE::PipelineCreater *pc); -bool LoadFromFile(const OSString &filename,VK_NAMESPACE::PipelineCreater *pc); - -constexpr uint32_t SCREEN_WIDTH=128; -constexpr uint32_t SCREEN_HEIGHT=128; +constexpr uint32_t SCREEN_WIDTH=256; +constexpr uint32_t SCREEN_HEIGHT=256; static Vector4f color(1,1,0,1); @@ -47,16 +44,17 @@ private: bool InitMaterial() { - material=shader_manage->CreateMaterial(OS_TEXT("res/shader/OnlyPosition.vert"), - OS_TEXT("res/shader/FlatColor.frag")); - if(!material) - return(false); - - material_instance=material->CreateInstance(); + material=db->CreateMaterial(OS_TEXT("res/material/PureColor2D")); - db->Add(material); - db->Add(material_instance); - return(true); + if(!material)return(false); + + material_instance=db->CreateMaterialInstance(material); + + if(!material_instance)return(false); + + pipeline=CreatePipeline(material,OS_TEXT("res/pipeline/solid2d"),Prim::Fan); + + return pipeline; } void CreateRenderObject() @@ -96,7 +94,7 @@ private: vulkan::Buffer *CreateUBO(const AnsiString &name,const VkDeviceSize size,void *data) { - vulkan::Buffer *ubo=device->CreateUBO(size,data); + vulkan::Buffer *ubo=db->CreateUBO(size,data); if(!ubo) return(nullptr); @@ -128,25 +126,11 @@ private: return(true); } - bool InitPipeline() - { - AutoDelete - pipeline_creater=new vulkan::PipelineCreater(device,material,sc_render_target); - pipeline_creater->CloseCullFace(); - pipeline_creater->Set(Prim::Fan); - - pipeline=pipeline_creater->Create(); - if(!pipeline)return(false); - - db->Add(pipeline); - return(true); - } - bool InitScene() { - render_root.Add(db->CreateRenderableInstance(pipeline,material_instance,ro_rectangle)); - render_root.Add(db->CreateRenderableInstance(pipeline,material_instance,ro_round_rectangle)); - render_root.Add(db->CreateRenderableInstance(pipeline,material_instance,ro_circle)); + render_root.Add(db->CreateRenderableInstance(ro_rectangle, material_instance,pipeline)); + render_root.Add(db->CreateRenderableInstance(ro_round_rectangle,material_instance,pipeline)); + render_root.Add(db->CreateRenderableInstance(ro_circle, material_instance,pipeline)); render_root.ExpendToList(&render_list); BuildCommandBuffer(&render_list); @@ -168,9 +152,6 @@ public: if(!InitUBO()) return(false); - if(!InitPipeline()) - return(false); - if(!InitScene()) return(false); diff --git a/example/Vulkan/Geometry3D.cpp b/example/Vulkan/Geometry3D.cpp index adc04a1b..e8bfc0f2 100644 --- a/example/Vulkan/Geometry3D.cpp +++ b/example/Vulkan/Geometry3D.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include using namespace hgl; @@ -36,66 +35,44 @@ private: private: - bool InitMaterial(MDP *mdp,const OSString &vs,const OSString &fs) + + bool InitMDP(MDP *mdp,const Prim primitive,const OSString &mtl_name) { - mdp->material=shader_manage->CreateMaterial(vs,fs); - - if(!mdp->material) - return(false); + mdp->material=db->CreateMaterial(mtl_name); + if(!mdp->material)return(false); - mdp->material_instance=mdp->material->CreateInstance(); + mdp->material_instance=db->CreateMaterialInstance(mdp->material); + if(!mdp->material_instance)return(false); - db->Add(mdp->material); - db->Add(mdp->material_instance); - return(true); - } + mdp->pipeline=CreatePipeline(mdp->material_instance,OS_TEXT("res/pipeline/solid2d"),primitive); - bool InitUBO(MDP *mdp) - { if(!mdp->material_instance->BindUBO("world",GetCameraMatrixBuffer())) return(false); mdp->material_instance->Update(); return(true); } - - bool InitPipeline(MDP *mdp,const Prim primitive) + + void Add(vulkan::Renderable *r,MDP &mdp) { - AutoDelete - pipeline_creater=new vulkan::PipelineCreater(device,mdp->material,sc_render_target); - pipeline_creater->CloseCullFace(); - pipeline_creater->Set(primitive); + auto ri=db->CreateRenderableInstance(r,mdp.material_instance,mdp.pipeline); - mdp->pipeline=pipeline_creater->Create(); - - if(!mdp->pipeline) - return(false); - - db->Add(mdp->pipeline); - return(true); + render_root.Add(ri); } - bool InitMDP(MDP *mdp,const Prim primitive,const OSString &vs,const OSString &fs) + void Add(vulkan::Renderable *r,MDP &mdp,const Matrix4f &mat) { - if(!InitMaterial(mdp,vs,fs)) - return(false); + auto ri=db->CreateRenderableInstance(r,mdp.material_instance,mdp.pipeline); - if(!InitUBO(mdp)) - return(false); - - if(!InitPipeline(mdp,primitive)) - return(false); - - return(true); + render_root.Add(ri,mat); } bool InitScene() { - render_root.Add(db->CreateRenderableInstance(m2d.pipeline,m2d.material_instance,ro_round_rectangle)); - - render_root.Add(db->CreateRenderableInstance(m3d.pipeline,m3d.material_instance,ro_plane_grid[0])); - render_root.Add(db->CreateRenderableInstance(m3d.pipeline,m3d.material_instance,ro_plane_grid[1]),rotate(HGL_RAD_90,0,1,0)); - render_root.Add(db->CreateRenderableInstance(m3d.pipeline,m3d.material_instance,ro_plane_grid[2]),rotate(HGL_RAD_90,1,0,0)); + Add(ro_round_rectangle,m2d); + Add(ro_plane_grid[0],m3d); + Add(ro_plane_grid[1],m3d,rotate(HGL_RAD_90,0,1,0)); + Add(ro_plane_grid[2],m3d,rotate(HGL_RAD_90,1,0,0)); render_root.RefreshMatrix(); render_root.ExpendToList(&render_list); @@ -152,12 +129,10 @@ public: if(!CameraAppFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT)) return(false); - if(!InitMDP(&m3d,Prim::Lines,OS_TEXT("res/shader/PositionColor3D.vert"), - OS_TEXT("res/shader/VertexColor.frag"))) + if(!InitMDP(&m3d,Prim::Lines,OS_TEXT("res/material/VertexColor3D"))) return(false); - if(!InitMDP(&m2d,Prim::Fan, OS_TEXT("res/shader/OnlyPosition.vert"), - OS_TEXT("res/shader/FlatColor.frag"))) + if(!InitMDP(&m2d,Prim::Fan, OS_TEXT("res/material/PureColor2D"))) return(false); { diff --git a/example/Vulkan/InlineGeometryScene.cpp b/example/Vulkan/InlineGeometryScene.cpp index b2d7c80d..1976e080 100644 --- a/example/Vulkan/InlineGeometryScene.cpp +++ b/example/Vulkan/InlineGeometryScene.cpp @@ -22,9 +22,14 @@ private: SceneNode render_root; RenderList render_list; + + struct MDP + { + vulkan::Material * material =nullptr; + vulkan::MaterialInstance * material_instance =nullptr; + vulkan::Pipeline * pipeline =nullptr; + }m3d,m2d; - vulkan::Material * material =nullptr; - vulkan::MaterialInstance * material_instance =nullptr; vulkan::Buffer * ubo_color =nullptr; vulkan::Renderable *ro_plane_grid, @@ -40,17 +45,20 @@ private: private: - bool InitMaterial() + bool InitMDP(MDP *mdp,const Prim primitive,const OSString &mtl_name) { - material=shader_manage->CreateMaterial(OS_TEXT("res/shader/OnlyPosition3D.vert"), - OS_TEXT("res/shader/FlatColor.frag")); - if(!material) + mdp->material=db->CreateMaterial(mtl_name); + if(!mdp->material)return(false); + + mdp->material_instance=db->CreateMaterialInstance(mdp->material); + if(!mdp->material_instance)return(false); + + mdp->pipeline=CreatePipeline(mdp->material_instance,OS_TEXT("res/pipeline/solid2d"),primitive); + + if(!mdp->material_instance->BindUBO("world",GetCameraMatrixBuffer())) return(false); - material_instance=material->CreateInstance(); - - db->Add(material); - db->Add(material_instance); + mdp->material_instance->Update(); return(true); } @@ -168,6 +176,20 @@ private: db->Add(pipeline_solid); return(true); } + + void Add(vulkan::Renderable *r,MDP &mdp) + { + auto ri=db->CreateRenderableInstance(r,mdp.material_instance,mdp.pipeline); + + render_root.Add(ri); + } + + void Add(vulkan::Renderable *r,MDP &mdp,const Matrix4f &mat) + { + auto ri=db->CreateRenderableInstance(r,mdp.material_instance,mdp.pipeline); + + render_root.Add(ri,mat); + } bool InitScene() { @@ -191,8 +213,11 @@ public: { if(!CameraAppFramework::Init(SCREEN_WIDTH,SCREEN_HEIGHT)) return(false); + + if(!InitMDP(&m3d,Prim::Lines,OS_TEXT("res/material/VertexColor3D"))) + return(false); - if(!InitMaterial()) + if(!InitMDP(&m2d,Prim::Fan, OS_TEXT("res/material/PureColor2D"))) return(false); CreateRenderObject(); diff --git a/res b/res index 8bcb5c9e..720c695a 160000 --- a/res +++ b/res @@ -1 +1 @@ -Subproject commit 8bcb5c9e782fbe37c735ac7757a08a568a3f9eee +Subproject commit 720c695a76e17d9babc78bafc17790c28f6d8ae1