diff --git a/example/Vulkan/first_triangle.cpp b/example/Vulkan/first_triangle.cpp index a5344e5f..0d4edc8b 100644 --- a/example/Vulkan/first_triangle.cpp +++ b/example/Vulkan/first_triangle.cpp @@ -98,7 +98,7 @@ private: bool InitAutoMaterial() { - auto *mci=mtl::CreateVertexColor2DNDC(); + MaterialCreateInfo *mci=mtl::CreateVertexColor2DNDC(); material_instance=db->CreateMaterialInstance(mci,&vil_config); diff --git a/inc/hgl/graph/VKMaterial.h b/inc/hgl/graph/VKMaterial.h index 65f489f5..35c16624 100644 --- a/inc/hgl/graph/VKMaterial.h +++ b/inc/hgl/graph/VKMaterial.h @@ -59,7 +59,7 @@ public: const ShaderStageCreateInfoList & GetStageList ()const{return data->shader_stage_list;} - const MaterialDescriptorManager * GetDescriptorSets ()const{return data->mds;} + const MaterialDescriptorManager * GetDescriptorSets ()const{return data->mds;} const VkPipelineLayout GetPipelineLayout ()const; const PipelineLayoutData * GetPipelineLayoutData ()const{return data->pipeline_layout_data;} diff --git a/inc/hgl/graph/VKRenderResource.h b/inc/hgl/graph/VKRenderResource.h index 137cda47..ea2c7bba 100644 --- a/inc/hgl/graph/VKRenderResource.h +++ b/inc/hgl/graph/VKRenderResource.h @@ -47,6 +47,8 @@ class RenderResource IDResManage rm_textures; ///<纹理合集 IDResManage rm_renderables; ///<渲染实例集合集 + Map global_buffer_map; ///<全局UBO + public: RenderResource(GPUDevice *dev):device(dev){} @@ -63,6 +65,14 @@ public: //Add TextureID Add(Texture * t ){return rm_textures.Add(t);} RenderableID Add(Renderable * r ){return rm_renderables.Add(r);} +public: //全局属性 + + void SetGlobal(const AnsiString &name,DeviceBuffer *buf); + + DeviceBuffer *GetGlobal(const AnsiString &name); + + void Free(DeviceBuffer *); + 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 6319d05c..2342fc92 100644 --- a/src/SceneGraph/Vulkan/VKRenderResource.cpp +++ b/src/SceneGraph/Vulkan/VKRenderResource.cpp @@ -5,6 +5,33 @@ #include VK_NAMESPACE_BEGIN +void RenderResource::SetGlobal(const AnsiString &name,DeviceBuffer *buf) +{ + if(!buf)return; + if(name.IsEmpty())return; + + global_buffer_map.Add(name,buf); +} + +DeviceBuffer *RenderResource::GetGlobal(const AnsiString &name) +{ + if(name.IsEmpty())return(nullptr); + + DeviceBuffer *buf; + + if(global_buffer_map.Get(name,buf)) + return buf; + else + return nullptr; +} + +void RenderResource::Free(DeviceBuffer *buf) +{ + rm_buffers.Release(buf); + + global_buffer_map.DeleteByValue(buf); +} + VBO *RenderResource::CreateVBO(VkFormat format,uint32_t count,const void *data,SharingMode sharing_mode) { VBO *vb=device->CreateVBO(format,count,data,sharing_mode);