改进ResManage,增加IDResManage

This commit is contained in:
hyzboy 2019-05-23 21:50:58 +08:00
parent 593b0b4a03
commit 5b55c34334
4 changed files with 49 additions and 19 deletions

View File

@ -7,6 +7,7 @@
#include<hgl/math/Math.h>
#include<hgl/filesystem/FileSystem.h>
#include<hgl/graph/VertexBuffer.h>
#include<hgl/type/ResManage.h>
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 *> material_sets; ///<材质合集
Set<Pipeline *> pipeline_sets; ///<管线合集
Set<DescriptorSets *> desc_sets_sets; ///<描述符合集
Set<Renderable *> renderable_sets; ///<可渲染对象合集
IDResManage<MaterialID, Material> rm_material; ///<材质合集
IDResManage<PipelineID, Pipeline> rm_pipeline; ///<管线合集
IDResManage<DescriptorSetsID, DescriptorSets> rm_desc_sets; ///<描述符合集
IDResManage<RenderableID, Renderable> 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;}

View File

@ -4,6 +4,8 @@
#include<hgl/graph/vulkan/VK.h>
#include<hgl/io/DataOutputStream.h>
VK_NAMESPACE_BEGIN
using PipelineID=uint64;
class Pipeline
{
VkDevice device;

View File

@ -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);
}

View File

@ -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<typename F,typename T> class ResManage
/**
* 使int类做数标致的资源管理器
*/
template<typename F,typename T> class IDResManage:public ResManage<F,T>
{
F id_count=0;
public:
using ResManage<F,T>::ResManage;
virtual ~IDResManage()=default;
virtual F Add(T *value)
{
if(!ResManage<F,T>::Add(id_count,value))
return(-1);
return id_count++;
}
};//template<typename F,typename T> class IDResManage:public ResManage<F,T>
}//namespace hgl
#include<hgl/type/ResManage.cpp>
#endif//HGL_RES_MANAGE_INCLUDE