改进ResManage,增加IDResManage
This commit is contained in:
parent
593b0b4a03
commit
5b55c34334
@ -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;}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user