diff --git a/example/Vulkan/Geometry2D.cpp b/example/Vulkan/Geometry2D.cpp index 33ef1c32..d37aa4b4 100644 --- a/example/Vulkan/Geometry2D.cpp +++ b/example/Vulkan/Geometry2D.cpp @@ -7,6 +7,7 @@ #include #include #include +#include using namespace hgl; using namespace hgl::graph; @@ -28,15 +29,31 @@ struct RectangleCreateInfo }; VK_NAMESPACE_BEGIN +using MaterialID=int; +using PipelineID=int; +using DescriptorSetsID=int; +using RenderableID=int; + /** * 场景DB,用于管理场景内所需的所有数据 */ class SceneDatabase { - Set material_sets; ///<材质合集 - Set pipeline_sets; ///<管线合集 - Set desc_sets_sets; ///<描述符合集 - Set renderable_sets; ///<可渲染对象合集 + IDResManage rm_material; ///<材质合集 + IDResManage rm_pipeline; ///<管线合集 + IDResManage rm_desc_sets; ///<描述符合集 + IDResManage rm_renderable; ///<可渲染对象合集 + +public: + + MaterialID Add(Material *mtl) + { + if(!mtl)return(-1); + + rm_material.Add(mtl); + } + + PipelineID };//class SceneDatabase /** @@ -51,7 +68,9 @@ class RenderableInstance public: RenderableInstance(Pipeline *p,DescriptorSets *ds,Renderable *r):pipeline(p),desc_sets(ds),render_obj(r){} - virtual ~RenderableInstance()=default; + virtual ~RenderableInstance() + { + } Pipeline * GetPipeline (){return pipeline;} DescriptorSets *GetDescriptorSets (){return desc_sets;} diff --git a/inc/hgl/graph/vulkan/VKPipeline.h b/inc/hgl/graph/vulkan/VKPipeline.h index 2f5f44b5..ecee3502 100644 --- a/inc/hgl/graph/vulkan/VKPipeline.h +++ b/inc/hgl/graph/vulkan/VKPipeline.h @@ -4,6 +4,8 @@ #include #include VK_NAMESPACE_BEGIN +using PipelineID=uint64; + class Pipeline { VkDevice device; diff --git a/inc/hgl/type/ResManage.cpp b/inc/hgl/type/ResManage.cpp index ee61e8d2..a72eb810 100644 --- a/inc/hgl/type/ResManage.cpp +++ b/inc/hgl/type/ResManage.cpp @@ -79,22 +79,11 @@ namespace hgl { ResItem *obj=items.GetItem(index); - //items[index]->count++; - obj->count++; + ++obj->count; -// return(items[index]->data); return obj->right; } - T *data=Create(flag); - - if(data) - { - items.Add(flag,data); - - return(data); - } - return(nullptr); } diff --git a/inc/hgl/type/ResManage.h b/inc/hgl/type/ResManage.h index 59850933..a48351c8 100644 --- a/inc/hgl/type/ResManage.h +++ b/inc/hgl/type/ResManage.h @@ -31,7 +31,6 @@ namespace hgl protected: - virtual T *Create(const F &)=0; ///<资源创建虚拟函数无实现,请特例化实现 virtual void Clear(T *obj){delete obj;} ///<资源释放虚拟函数(缺省为直接delete对象) public: @@ -45,11 +44,32 @@ namespace hgl virtual bool Add(const F &,T *); ///<添加一个数据 virtual T * Find(const F &); ///<查找一个数据 - virtual T * Get(const F &); ///<取得一个数据,如不存在则创建 + virtual T * Get(const F &); ///<取得一个数据 virtual void Release(const F &,bool zero_clear=false); ///<释放一个数据 virtual void Release(T *,bool zero_clear=false); ///<释放一个数据 };//template class ResManage + + /** + * 使用int类做数标致的资源管理器 + */ + template class IDResManage:public ResManage + { + F id_count=0; + + public: + + using ResManage::ResManage; + virtual ~IDResManage()=default; + + virtual F Add(T *value) + { + if(!ResManage::Add(id_count,value)) + return(-1); + + return id_count++; + } + };//template class IDResManage:public ResManage }//namespace hgl #include #endif//HGL_RES_MANAGE_INCLUDE