#ifndef HGL_GRAPH_SCENE_DATABASE_INCLUDE #define HGL_GRAPH_SCENE_DATABASE_INCLUDE #include #include #include #include #include #include #include #include namespace hgl { namespace graph { using MaterialID =int; using PipelineID =int; using BufferID =int; using DescriptorSetsID =int; using RenderableID =int; using RenderableInstanceID =int; class VertexBufferCreater; /** * 场景DB,用于管理场景内所需的所有数据 */ class SceneDB { vulkan::Device *device; IDResManage rm_material; ///<材质合集 IDResManage rm_pipeline; ///<管线合集 IDResManage rm_desc_sets; ///<描述符合集 IDResManage rm_renderables; ///<可渲染对象合集 IDResManage rm_buffers; ///<顶点缓冲区合集 IDResManage rm_renderable_instances; ///<渲染实例集合集 public: SceneDB(vulkan::Device *dev):device(dev){} virtual ~SceneDB()=default; MaterialID Add(vulkan::Material * mtl ){return rm_material.Add(mtl);} PipelineID Add(vulkan::Pipeline * p ){return rm_pipeline.Add(p);} DescriptorSetsID Add(vulkan::DescriptorSets *ds ){return rm_desc_sets.Add(ds);} RenderableID Add(vulkan::Renderable * r ){return rm_renderables.Add(r);} BufferID Add(vulkan::Buffer * buf ){return rm_buffers.Add(buf);} RenderableInstanceID Add(RenderableInstance * ri ){return rm_renderable_instances.Add(ri);} vulkan::VertexBuffer *CreateVBO(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); vulkan::VertexBuffer *CreateVBO(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(format,count,nullptr,sharing_mode);} vulkan::VertexBuffer *CreateVBO(const VertexBufferCreater *vbc,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(vbc->GetDataType(),vbc->GetCount(),vbc->GetData(),sharing_mode);} #define SCENE_DB_CREATE_FUNC(name) vulkan::Buffer *Create##name(VkDeviceSize size,void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); \ vulkan::Buffer *Create##name(VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); SCENE_DB_CREATE_FUNC(UBO) SCENE_DB_CREATE_FUNC(SSBO) SCENE_DB_CREATE_FUNC(INBO) #undef SCENE_DB_CREATE_FUNC RenderableInstance * CreateRenderableInstance(vulkan::Pipeline *p,vulkan::DescriptorSets *ds,vulkan::Renderable *r); vulkan::Material * GetMaterial (const MaterialID &id){return rm_material.Get(id);} vulkan::Pipeline * GetPipeline (const PipelineID &id){return rm_pipeline.Get(id);} vulkan::DescriptorSets *GetDescSets (const DescriptorSetsID &id){return rm_desc_sets.Get(id);} vulkan::Renderable * GetRenderable (const RenderableID &id){return rm_renderables.Get(id);} vulkan::Buffer * GetBuffer (const BufferID &id){return rm_buffers.Get(id);} RenderableInstance * GetRenderableInstance (const RenderableInstanceID &id){return rm_renderable_instances.Get(id);} };//class SceneDB }//namespace graph }//namespace hgl #endif//HGL_GRAPH_SCENE_DATABASE_INCLUDE