2019-05-25 17:46:31 +08:00
|
|
|
|
#include<hgl/graph/SceneDB.h>
|
2019-05-27 15:15:39 +08:00
|
|
|
|
#include<hgl/graph/vulkan/VKDevice.h>
|
2019-05-27 16:54:08 +08:00
|
|
|
|
#include<hgl/graph/RenderableInstance.h>
|
2019-05-25 17:46:31 +08:00
|
|
|
|
|
|
|
|
|
namespace hgl
|
|
|
|
|
{
|
|
|
|
|
namespace graph
|
|
|
|
|
{
|
2020-08-07 21:59:20 +08:00
|
|
|
|
vulkan::VAB *SceneDB::CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode)
|
2019-05-27 15:15:39 +08:00
|
|
|
|
{
|
2020-08-07 21:59:20 +08:00
|
|
|
|
vulkan::VAB *vb=device->CreateVAB(format,count,data,sharing_mode);
|
2019-05-27 15:15:39 +08:00
|
|
|
|
|
|
|
|
|
if(!vb)
|
|
|
|
|
return(nullptr);
|
|
|
|
|
|
|
|
|
|
rm_buffers.Add(vb);
|
|
|
|
|
|
|
|
|
|
return vb;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define SCENE_DB_CREATE_BUFFER(name) vulkan::Buffer *SceneDB::Create##name(VkDeviceSize size,void *data,VkSharingMode sharing_mode) \
|
|
|
|
|
{ \
|
|
|
|
|
vulkan::Buffer *buf=device->Create##name(size,data,sharing_mode); \
|
|
|
|
|
\
|
|
|
|
|
if(!buf)return(nullptr); \
|
|
|
|
|
rm_buffers.Add(buf); \
|
|
|
|
|
return(buf); \
|
|
|
|
|
} \
|
|
|
|
|
\
|
|
|
|
|
vulkan::Buffer *SceneDB::Create##name(VkDeviceSize size,VkSharingMode sharing_mode) \
|
|
|
|
|
{ \
|
|
|
|
|
vulkan::Buffer *buf=device->Create##name(size,sharing_mode); \
|
|
|
|
|
\
|
|
|
|
|
if(!buf)return(nullptr); \
|
|
|
|
|
rm_buffers.Add(buf); \
|
|
|
|
|
return(buf); \
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SCENE_DB_CREATE_BUFFER(UBO)
|
|
|
|
|
SCENE_DB_CREATE_BUFFER(SSBO)
|
|
|
|
|
SCENE_DB_CREATE_BUFFER(INBO)
|
|
|
|
|
|
|
|
|
|
#undef SCENE_DB_CREATE_BUFFER
|
2019-05-27 16:54:08 +08:00
|
|
|
|
|
2019-05-27 22:44:34 +08:00
|
|
|
|
vulkan::IndexBuffer *SceneDB::CreateIBO(VkIndexType index_type,uint32_t count,const void *data,VkSharingMode sharing_mode)
|
|
|
|
|
{
|
|
|
|
|
vulkan::IndexBuffer *buf=device->CreateIBO(index_type,count,data,sharing_mode);
|
|
|
|
|
|
|
|
|
|
if(!buf)return(nullptr);
|
|
|
|
|
rm_buffers.Add(buf);
|
|
|
|
|
return(buf);
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-20 20:00:03 +08:00
|
|
|
|
RenderableInstance *SceneDB::CreateRenderableInstance(vulkan::Pipeline *p,vulkan::MaterialInstance *mi,vulkan::Renderable *r)
|
2019-05-27 16:54:08 +08:00
|
|
|
|
{
|
2020-01-20 20:00:03 +08:00
|
|
|
|
if(!p||!mi||!r)
|
2019-05-27 16:54:08 +08:00
|
|
|
|
return(nullptr);
|
|
|
|
|
|
2020-01-20 20:00:03 +08:00
|
|
|
|
RenderableInstance *ri=new RenderableInstance(p,mi,r);
|
2019-05-27 16:54:08 +08:00
|
|
|
|
|
2020-07-08 17:17:36 +08:00
|
|
|
|
if(ri)
|
|
|
|
|
Add(ri);
|
2019-05-27 16:54:08 +08:00
|
|
|
|
|
|
|
|
|
return ri;
|
|
|
|
|
}
|
2020-07-08 17:17:36 +08:00
|
|
|
|
|
|
|
|
|
vulkan::Sampler *SceneDB::CreateSampler(VkSamplerCreateInfo *sci)
|
|
|
|
|
{
|
|
|
|
|
vulkan::Sampler *s=device->CreateSampler(sci);
|
|
|
|
|
|
|
|
|
|
if(s)
|
|
|
|
|
Add(s);
|
|
|
|
|
|
|
|
|
|
return s;
|
|
|
|
|
}
|
2019-05-25 17:46:31 +08:00
|
|
|
|
}//namespace graph
|
|
|
|
|
}//namespace hgl
|