改进ResManage,增加IDResManage
This commit is contained in:
parent
593b0b4a03
commit
5b55c34334
@ -7,6 +7,7 @@
|
|||||||
#include<hgl/math/Math.h>
|
#include<hgl/math/Math.h>
|
||||||
#include<hgl/filesystem/FileSystem.h>
|
#include<hgl/filesystem/FileSystem.h>
|
||||||
#include<hgl/graph/VertexBuffer.h>
|
#include<hgl/graph/VertexBuffer.h>
|
||||||
|
#include<hgl/type/ResManage.h>
|
||||||
|
|
||||||
using namespace hgl;
|
using namespace hgl;
|
||||||
using namespace hgl::graph;
|
using namespace hgl::graph;
|
||||||
@ -28,15 +29,31 @@ struct RectangleCreateInfo
|
|||||||
};
|
};
|
||||||
|
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
|
using MaterialID=int;
|
||||||
|
using PipelineID=int;
|
||||||
|
using DescriptorSetsID=int;
|
||||||
|
using RenderableID=int;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 场景DB,用于管理场景内所需的所有数据
|
* 场景DB,用于管理场景内所需的所有数据
|
||||||
*/
|
*/
|
||||||
class SceneDatabase
|
class SceneDatabase
|
||||||
{
|
{
|
||||||
Set<Material *> material_sets; ///<材质合集
|
IDResManage<MaterialID, Material> rm_material; ///<材质合集
|
||||||
Set<Pipeline *> pipeline_sets; ///<管线合集
|
IDResManage<PipelineID, Pipeline> rm_pipeline; ///<管线合集
|
||||||
Set<DescriptorSets *> desc_sets_sets; ///<描述符合集
|
IDResManage<DescriptorSetsID, DescriptorSets> rm_desc_sets; ///<描述符合集
|
||||||
Set<Renderable *> renderable_sets; ///<可渲染对象合集
|
IDResManage<RenderableID, Renderable> rm_renderable; ///<可渲染对象合集
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
MaterialID Add(Material *mtl)
|
||||||
|
{
|
||||||
|
if(!mtl)return(-1);
|
||||||
|
|
||||||
|
rm_material.Add(mtl);
|
||||||
|
}
|
||||||
|
|
||||||
|
PipelineID
|
||||||
};//class SceneDatabase
|
};//class SceneDatabase
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -51,7 +68,9 @@ class RenderableInstance
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
RenderableInstance(Pipeline *p,DescriptorSets *ds,Renderable *r):pipeline(p),desc_sets(ds),render_obj(r){}
|
RenderableInstance(Pipeline *p,DescriptorSets *ds,Renderable *r):pipeline(p),desc_sets(ds),render_obj(r){}
|
||||||
virtual ~RenderableInstance()=default;
|
virtual ~RenderableInstance()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
Pipeline * GetPipeline (){return pipeline;}
|
Pipeline * GetPipeline (){return pipeline;}
|
||||||
DescriptorSets *GetDescriptorSets (){return desc_sets;}
|
DescriptorSets *GetDescriptorSets (){return desc_sets;}
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
#include<hgl/graph/vulkan/VK.h>
|
#include<hgl/graph/vulkan/VK.h>
|
||||||
#include<hgl/io/DataOutputStream.h>
|
#include<hgl/io/DataOutputStream.h>
|
||||||
VK_NAMESPACE_BEGIN
|
VK_NAMESPACE_BEGIN
|
||||||
|
using PipelineID=uint64;
|
||||||
|
|
||||||
class Pipeline
|
class Pipeline
|
||||||
{
|
{
|
||||||
VkDevice device;
|
VkDevice device;
|
||||||
|
@ -79,22 +79,11 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
ResItem *obj=items.GetItem(index);
|
ResItem *obj=items.GetItem(index);
|
||||||
|
|
||||||
//items[index]->count++;
|
++obj->count;
|
||||||
obj->count++;
|
|
||||||
|
|
||||||
// return(items[index]->data);
|
|
||||||
return obj->right;
|
return obj->right;
|
||||||
}
|
}
|
||||||
|
|
||||||
T *data=Create(flag);
|
|
||||||
|
|
||||||
if(data)
|
|
||||||
{
|
|
||||||
items.Add(flag,data);
|
|
||||||
|
|
||||||
return(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,6 @@ namespace hgl
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual T *Create(const F &)=0; ///<资源创建虚拟函数无实现,请特例化实现
|
|
||||||
virtual void Clear(T *obj){delete obj;} ///<资源释放虚拟函数(缺省为直接delete对象)
|
virtual void Clear(T *obj){delete obj;} ///<资源释放虚拟函数(缺省为直接delete对象)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -45,11 +44,32 @@ namespace hgl
|
|||||||
|
|
||||||
virtual bool Add(const F &,T *); ///<添加一个数据
|
virtual bool Add(const F &,T *); ///<添加一个数据
|
||||||
virtual T * Find(const F &); ///<查找一个数据
|
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(const F &,bool zero_clear=false); ///<释放一个数据
|
||||||
virtual void Release(T *,bool zero_clear=false); ///<释放一个数据
|
virtual void Release(T *,bool zero_clear=false); ///<释放一个数据
|
||||||
};//template<typename F,typename T> class ResManage
|
};//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
|
}//namespace hgl
|
||||||
#include<hgl/type/ResManage.cpp>
|
#include<hgl/type/ResManage.cpp>
|
||||||
#endif//HGL_RES_MANAGE_INCLUDE
|
#endif//HGL_RES_MANAGE_INCLUDE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user