From f2c6c24ddf9975306a5151a91bd467a7b2ce6c26 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Wed, 22 Mar 2023 02:35:37 +0800 Subject: [PATCH] added BindGlobalDescriptor at RenderResource --- inc/hgl/graph/VKRenderResource.h | 7 ++++-- src/SceneGraph/Vulkan/VKRenderResource.cpp | 28 ++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/inc/hgl/graph/VKRenderResource.h b/inc/hgl/graph/VKRenderResource.h index ea2c7bba..b52c02e4 100644 --- a/inc/hgl/graph/VKRenderResource.h +++ b/inc/hgl/graph/VKRenderResource.h @@ -47,7 +47,8 @@ class RenderResource IDResManage rm_textures; ///<纹理合集 IDResManage rm_renderables; ///<渲染实例集合集 - Map global_buffer_map; ///<全局UBO + Map global_buffer_map; ///<全局Buffer(UBO/SSBO) + Map global_texture_map; ///<全局Texture public: @@ -65,7 +66,7 @@ public: //Add TextureID Add(Texture * t ){return rm_textures.Add(t);} RenderableID Add(Renderable * r ){return rm_renderables.Add(r);} -public: //全局属性 +public: //全局属性(对应shader中的PerGlobal set合集) void SetGlobal(const AnsiString &name,DeviceBuffer *buf); @@ -73,6 +74,8 @@ public: //全局属性 void Free(DeviceBuffer *); + void BindGlobalDescriptor(MaterialInstance *); + public: // VBO/VAO VBO *CreateVBO(VkFormat format,uint32_t count,const void *data,SharingMode sm=SharingMode::Exclusive); diff --git a/src/SceneGraph/Vulkan/VKRenderResource.cpp b/src/SceneGraph/Vulkan/VKRenderResource.cpp index 2342fc92..66f5e32f 100644 --- a/src/SceneGraph/Vulkan/VKRenderResource.cpp +++ b/src/SceneGraph/Vulkan/VKRenderResource.cpp @@ -32,6 +32,34 @@ void RenderResource::Free(DeviceBuffer *buf) global_buffer_map.DeleteByValue(buf); } +void RenderResource::BindGlobalDescriptor(MaterialInstance *mi) +{ + if(!mi)return; + + const uint count=global_buffer_map.GetCount(); + + if(count<=0)return; + + auto **gb_list=global_buffer_map.GetDataList(); + + auto *mp=mi->GetMP(DescriptorSetType::Global); + + if(!mp) + return; + + if(mp->GetDescriptorCount()<=0) + return; + + for(uint i=0;iBindUBO((*gb_list)->left,(*gb_list)->right); + + ++gb_list; + } + + mp->Update(); +} + VBO *RenderResource::CreateVBO(VkFormat format,uint32_t count,const void *data,SharingMode sharing_mode) { VBO *vb=device->CreateVBO(format,count,data,sharing_mode);