use VKDatabase instead SceneDB
This commit is contained in:
parent
b4ca17e44b
commit
8dbd0b3f2f
@ -4,7 +4,7 @@
|
|||||||
#include"VulkanAppFramework.h"
|
#include"VulkanAppFramework.h"
|
||||||
#include<hgl/filesystem/FileSystem.h>
|
#include<hgl/filesystem/FileSystem.h>
|
||||||
#include<hgl/graph/InlineGeometry.h>
|
#include<hgl/graph/InlineGeometry.h>
|
||||||
#include<hgl/graph/SceneDB.h>
|
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||||
#include<hgl/graph/RenderableInstance.h>
|
#include<hgl/graph/RenderableInstance.h>
|
||||||
#include<hgl/graph/RenderList.h>
|
#include<hgl/graph/RenderList.h>
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
#include"VulkanAppFramework.h"
|
#include"VulkanAppFramework.h"
|
||||||
#include<hgl/filesystem/FileSystem.h>
|
#include<hgl/filesystem/FileSystem.h>
|
||||||
#include<hgl/graph/InlineGeometry.h>
|
#include<hgl/graph/InlineGeometry.h>
|
||||||
#include<hgl/graph/SceneDB.h>
|
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||||
#include<hgl/graph/RenderableInstance.h>
|
#include<hgl/graph/RenderableInstance.h>
|
||||||
#include<hgl/graph/RenderList.h>
|
#include<hgl/graph/RenderList.h>
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include"VulkanAppFramework.h"
|
#include"VulkanAppFramework.h"
|
||||||
#include<hgl/filesystem/FileSystem.h>
|
#include<hgl/filesystem/FileSystem.h>
|
||||||
#include<hgl/graph/InlineGeometry.h>
|
#include<hgl/graph/InlineGeometry.h>
|
||||||
#include<hgl/graph/SceneDB.h>
|
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||||
#include<hgl/graph/RenderableInstance.h>
|
#include<hgl/graph/RenderableInstance.h>
|
||||||
#include<hgl/graph/RenderList.h>
|
#include<hgl/graph/RenderList.h>
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include"VulkanAppFramework.h"
|
#include"VulkanAppFramework.h"
|
||||||
#include<hgl/filesystem/FileSystem.h>
|
#include<hgl/filesystem/FileSystem.h>
|
||||||
#include<hgl/graph/InlineGeometry.h>
|
#include<hgl/graph/InlineGeometry.h>
|
||||||
#include<hgl/graph/SceneDB.h>
|
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||||
#include<hgl/graph/RenderableInstance.h>
|
#include<hgl/graph/RenderableInstance.h>
|
||||||
#include<hgl/graph/RenderList.h>
|
#include<hgl/graph/RenderList.h>
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include"VulkanAppFramework.h"
|
#include"VulkanAppFramework.h"
|
||||||
#include<hgl/filesystem/FileSystem.h>
|
#include<hgl/filesystem/FileSystem.h>
|
||||||
#include<hgl/graph/InlineGeometry.h>
|
#include<hgl/graph/InlineGeometry.h>
|
||||||
#include<hgl/graph/SceneDB.h>
|
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||||
#include<hgl/graph/RenderableInstance.h>
|
#include<hgl/graph/RenderableInstance.h>
|
||||||
#include<hgl/graph/RenderList.h>
|
#include<hgl/graph/RenderList.h>
|
||||||
#include<hgl/Time.h>
|
#include<hgl/Time.h>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
#include<hgl/graph/vulkan/VKMaterial.h>
|
#include<hgl/graph/vulkan/VKMaterial.h>
|
||||||
#include<hgl/graph/vulkan/VKMaterialInstance.h>
|
#include<hgl/graph/vulkan/VKMaterialInstance.h>
|
||||||
#include<hgl/graph/vulkan/VKRenderTarget.h>
|
#include<hgl/graph/vulkan/VKRenderTarget.h>
|
||||||
#include<hgl/graph/SceneDB.h>
|
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||||
#include<hgl/graph/RenderList.h>
|
#include<hgl/graph/RenderList.h>
|
||||||
|
|
||||||
using namespace hgl;
|
using namespace hgl;
|
||||||
|
@ -38,12 +38,12 @@ private:
|
|||||||
vulkan::Material * material =nullptr;
|
vulkan::Material * material =nullptr;
|
||||||
vulkan::MaterialInstance * material_instance =nullptr;
|
vulkan::MaterialInstance * material_instance =nullptr;
|
||||||
vulkan::Renderable * render_obj =nullptr;
|
vulkan::Renderable * render_obj =nullptr;
|
||||||
vulkan::Buffer * ubo_world_matrix =nullptr;
|
vulkan::Buffer * ubo_world_matrix =nullptr;
|
||||||
|
|
||||||
vulkan::Pipeline * pipeline =nullptr;
|
vulkan::Pipeline * pipeline =nullptr;
|
||||||
|
|
||||||
vulkan::VAB * vertex_buffer =nullptr;
|
vulkan::VAB * vertex_buffer =nullptr;
|
||||||
vulkan::VAB * color_buffer =nullptr;
|
vulkan::VAB * color_buffer =nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef HGL_GRAPH_RENDERABLE_CREATER_INCLUDE
|
#ifndef HGL_GRAPH_RENDERABLE_CREATER_INCLUDE
|
||||||
#define HGL_GRAPH_RENDERABLE_CREATER_INCLUDE
|
#define HGL_GRAPH_RENDERABLE_CREATER_INCLUDE
|
||||||
|
|
||||||
#include<hgl/graph/SceneDB.h>
|
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||||
#include<hgl/graph/VertexAttribDataAccess.h>
|
#include<hgl/graph/VertexAttribDataAccess.h>
|
||||||
#include<hgl/graph/vulkan/VKShaderModule.h>
|
#include<hgl/graph/vulkan/VKShaderModule.h>
|
||||||
namespace hgl
|
namespace hgl
|
||||||
@ -32,7 +32,7 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
SceneDB *db;
|
vulkan::SceneDB *db;
|
||||||
vulkan::Material *mtl;
|
vulkan::Material *mtl;
|
||||||
|
|
||||||
const vulkan::VertexShaderModule *vsm;
|
const vulkan::VertexShaderModule *vsm;
|
||||||
@ -50,7 +50,7 @@ namespace hgl
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
RenderableCreater(SceneDB *sdb,vulkan::Material *m);
|
RenderableCreater(vulkan::SceneDB *sdb,vulkan::Material *m);
|
||||||
virtual ~RenderableCreater()=default;
|
virtual ~RenderableCreater()=default;
|
||||||
|
|
||||||
virtual bool Init(const uint32 count); ///<初始化,参数为顶点数量
|
virtual bool Init(const uint32 count); ///<初始化,参数为顶点数量
|
||||||
|
@ -1,112 +0,0 @@
|
|||||||
#ifndef HGL_GRAPH_SCENE_DATABASE_INCLUDE
|
|
||||||
#define HGL_GRAPH_SCENE_DATABASE_INCLUDE
|
|
||||||
|
|
||||||
#include<hgl/graph/vulkan/VKMaterial.h>
|
|
||||||
#include<hgl/graph/vulkan/VKPipeline.h>
|
|
||||||
#include<hgl/graph/vulkan/VKDescriptorSets.h>
|
|
||||||
#include<hgl/graph/vulkan/VKRenderable.h>
|
|
||||||
#include<hgl/graph/vulkan/VKBuffer.h>
|
|
||||||
#include<hgl/graph/vulkan/VKSampler.h>
|
|
||||||
#include<hgl/graph/vulkan/VKTexture.h>
|
|
||||||
#include<hgl/graph/vulkan/VKMaterialInstance.h>
|
|
||||||
#include<hgl/graph/VertexAttribData.h>
|
|
||||||
#include<hgl/graph/RenderableInstance.h>
|
|
||||||
#include<hgl/graph/font/TextRenderable.h>
|
|
||||||
#include<hgl/type/ResManage.h>
|
|
||||||
namespace hgl
|
|
||||||
{
|
|
||||||
namespace graph
|
|
||||||
{
|
|
||||||
using MaterialID =int;
|
|
||||||
using MaterialInstanceID =int;
|
|
||||||
using PipelineID =int;
|
|
||||||
using BufferID =int;
|
|
||||||
using DescriptorSetsID =int;
|
|
||||||
using RenderableID =int;
|
|
||||||
using RenderableInstanceID =int;
|
|
||||||
using SamplerID =int;
|
|
||||||
using TextureID =int;
|
|
||||||
|
|
||||||
class VertexAttribData;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 场景DB,用于管理场景内所需的所有数据
|
|
||||||
*/
|
|
||||||
class SceneDB
|
|
||||||
{
|
|
||||||
vulkan::Device *device;
|
|
||||||
|
|
||||||
IDResManage<MaterialID, vulkan::Material> rm_material; ///<材质合集
|
|
||||||
IDResManage<MaterialInstanceID, vulkan::MaterialInstance> rm_material_instance; ///<材质实例合集
|
|
||||||
IDResManage<PipelineID, vulkan::Pipeline> rm_pipeline; ///<管线合集
|
|
||||||
IDResManage<DescriptorSetsID, vulkan::DescriptorSets> rm_desc_sets; ///<描述符合集
|
|
||||||
IDResManage<RenderableID, vulkan::Renderable> rm_renderables; ///<可渲染对象合集
|
|
||||||
IDResManage<BufferID, vulkan::Buffer> rm_buffers; ///<顶点缓冲区合集
|
|
||||||
IDResManage<SamplerID, vulkan::Sampler> rm_samplers; ///<采样器合集
|
|
||||||
IDResManage<TextureID, vulkan::Texture> rm_textures; ///<纹理合集
|
|
||||||
IDResManage<RenderableInstanceID, RenderableInstance> rm_renderable_instances; ///<渲染实例集合集
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
SceneDB(vulkan::Device *dev):device(dev){}
|
|
||||||
virtual ~SceneDB()=default;
|
|
||||||
|
|
||||||
public: //Add
|
|
||||||
|
|
||||||
MaterialID Add(vulkan::Material * mtl ){return rm_material.Add(mtl);}
|
|
||||||
MaterialInstanceID Add(vulkan::MaterialInstance * mi ){return rm_material_instance.Add(mi);}
|
|
||||||
PipelineID Add(vulkan::Pipeline * p ){return rm_pipeline.Add(p);}
|
|
||||||
DescriptorSetsID Add(vulkan::DescriptorSets * ds ){return rm_desc_sets.Add(ds);}
|
|
||||||
RenderableID Add(vulkan::Renderable * r ){return rm_renderables.Add(r);}
|
|
||||||
BufferID Add(vulkan::Buffer * buf ){return rm_buffers.Add(buf);}
|
|
||||||
SamplerID Add(vulkan::Sampler * s ){return rm_samplers.Add(s);}
|
|
||||||
TextureID Add(vulkan::Texture * t ){return rm_textures.Add(t);}
|
|
||||||
RenderableInstanceID Add(RenderableInstance * ri ){return rm_renderable_instances.Add(ri);}
|
|
||||||
|
|
||||||
public: //Create
|
|
||||||
|
|
||||||
vulkan::VAB *CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
|
||||||
vulkan::VAB *CreateVAB(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(format,count,nullptr,sharing_mode);}
|
|
||||||
vulkan::VAB *CreateVAB(const VAD *vad,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(vad->GetVulkanFormat(),vad->GetCount(),vad->GetData(),sharing_mode);}
|
|
||||||
|
|
||||||
#define SCENE_DB_CREATE_FUNC(name) vulkan::Buffer *Create##name(VkDeviceSize size,void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); \
|
|
||||||
vulkan::Buffer *Create##name(VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
|
||||||
|
|
||||||
SCENE_DB_CREATE_FUNC(UBO)
|
|
||||||
SCENE_DB_CREATE_FUNC(SSBO)
|
|
||||||
SCENE_DB_CREATE_FUNC(INBO)
|
|
||||||
|
|
||||||
#undef SCENE_DB_CREATE_FUNC
|
|
||||||
|
|
||||||
|
|
||||||
vulkan::IndexBuffer *CreateIBO(VkIndexType index_type,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
|
||||||
vulkan::IndexBuffer *CreateIBO16(uint32_t count,const uint16 *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT16,count,(void *)data,sharing_mode);}
|
|
||||||
vulkan::IndexBuffer *CreateIBO32(uint32_t count,const uint32 *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT32,count,(void *)data,sharing_mode);}
|
|
||||||
|
|
||||||
vulkan::IndexBuffer *CreateIBO(VkIndexType index_type,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(index_type,count,nullptr,sharing_mode);}
|
|
||||||
vulkan::IndexBuffer *CreateIBO16(uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT16,count,nullptr,sharing_mode);}
|
|
||||||
vulkan::IndexBuffer *CreateIBO32(uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT32,count,nullptr,sharing_mode);}
|
|
||||||
|
|
||||||
vulkan::MaterialInstance *CreateMaterialInstance(vulkan::Material *);
|
|
||||||
vulkan::Renderable *CreateRenderable(vulkan::Material *,const uint32_t vertex_count=0);
|
|
||||||
TextRenderable * CreateTextRenderable(vulkan::Material *);
|
|
||||||
|
|
||||||
RenderableInstance *CreateRenderableInstance(vulkan::Pipeline *p,vulkan::MaterialInstance *mi,vulkan::Renderable *r);
|
|
||||||
|
|
||||||
vulkan::Sampler *CreateSampler(VkSamplerCreateInfo *sci=nullptr);
|
|
||||||
|
|
||||||
public: //Get
|
|
||||||
|
|
||||||
vulkan::Material * GetMaterial (const MaterialID &id){return rm_material.Get(id);}
|
|
||||||
vulkan::MaterialInstance * GetMaterialInstance (const MaterialInstanceID &id){return rm_material_instance.Get(id);}
|
|
||||||
vulkan::Pipeline * GetPipeline (const PipelineID &id){return rm_pipeline.Get(id);}
|
|
||||||
vulkan::DescriptorSets * GetDescSets (const DescriptorSetsID &id){return rm_desc_sets.Get(id);}
|
|
||||||
vulkan::Renderable * GetRenderable (const RenderableID &id){return rm_renderables.Get(id);}
|
|
||||||
vulkan::Buffer * GetBuffer (const BufferID &id){return rm_buffers.Get(id);}
|
|
||||||
vulkan::Sampler * GetSampler (const SamplerID &id){return rm_samplers.Get(id);}
|
|
||||||
vulkan::Texture * GetTexture (const TextureID &id){return rm_textures.Get(id);}
|
|
||||||
RenderableInstance * GetRenderableInstance (const RenderableInstanceID &id){return rm_renderable_instances.Get(id);}
|
|
||||||
};//class SceneDB
|
|
||||||
}//namespace graph
|
|
||||||
}//namespace hgl
|
|
||||||
#endif//HGL_GRAPH_SCENE_DATABASE_INCLUDE
|
|
107
inc/hgl/graph/vulkan/VKDatabase.h
Normal file
107
inc/hgl/graph/vulkan/VKDatabase.h
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
#ifndef HGL_GRAPH_VULKAN_DATABASE_INCLUDE
|
||||||
|
#define HGL_GRAPH_VULKAN_DATABASE_INCLUDE
|
||||||
|
|
||||||
|
#include<hgl/graph/vulkan/VKMaterial.h>
|
||||||
|
#include<hgl/graph/vulkan/VKPipeline.h>
|
||||||
|
#include<hgl/graph/vulkan/VKDescriptorSets.h>
|
||||||
|
#include<hgl/graph/vulkan/VKRenderable.h>
|
||||||
|
#include<hgl/graph/vulkan/VKBuffer.h>
|
||||||
|
#include<hgl/graph/vulkan/VKSampler.h>
|
||||||
|
#include<hgl/graph/vulkan/VKTexture.h>
|
||||||
|
#include<hgl/graph/vulkan/VKMaterialInstance.h>
|
||||||
|
#include<hgl/graph/VertexAttribData.h>
|
||||||
|
#include<hgl/graph/RenderableInstance.h>
|
||||||
|
#include<hgl/graph/font/TextRenderable.h>
|
||||||
|
#include<hgl/type/ResManage.h>
|
||||||
|
VK_NAMESPACE_BEGIN
|
||||||
|
using MaterialID =int;
|
||||||
|
using MaterialInstanceID =int;
|
||||||
|
using PipelineID =int;
|
||||||
|
using BufferID =int;
|
||||||
|
using DescriptorSetsID =int;
|
||||||
|
using RenderableID =int;
|
||||||
|
using RenderableInstanceID =int;
|
||||||
|
using SamplerID =int;
|
||||||
|
using TextureID =int;
|
||||||
|
|
||||||
|
class VertexAttribData;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 场景DB,用于管理场景内所需的所有数据
|
||||||
|
*/
|
||||||
|
class SceneDB
|
||||||
|
{
|
||||||
|
Device *device;
|
||||||
|
|
||||||
|
IDResManage<MaterialID, Material> rm_material; ///<材质合集
|
||||||
|
IDResManage<MaterialInstanceID, MaterialInstance> rm_material_instance; ///<材质实例合集
|
||||||
|
IDResManage<PipelineID, Pipeline> rm_pipeline; ///<管线合集
|
||||||
|
IDResManage<DescriptorSetsID, DescriptorSets> rm_desc_sets; ///<描述符合集
|
||||||
|
IDResManage<RenderableID, Renderable> rm_renderables; ///<可渲染对象合集
|
||||||
|
IDResManage<BufferID, Buffer> rm_buffers; ///<顶点缓冲区合集
|
||||||
|
IDResManage<SamplerID, Sampler> rm_samplers; ///<采样器合集
|
||||||
|
IDResManage<TextureID, Texture> rm_textures; ///<纹理合集
|
||||||
|
IDResManage<RenderableInstanceID, RenderableInstance> rm_renderable_instances; ///<渲染实例集合集
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
SceneDB(Device *dev):device(dev){}
|
||||||
|
virtual ~SceneDB()=default;
|
||||||
|
|
||||||
|
public: //Add
|
||||||
|
|
||||||
|
MaterialID Add(Material * mtl ){return rm_material.Add(mtl);}
|
||||||
|
MaterialInstanceID Add(MaterialInstance * mi ){return rm_material_instance.Add(mi);}
|
||||||
|
PipelineID Add(Pipeline * p ){return rm_pipeline.Add(p);}
|
||||||
|
DescriptorSetsID Add(DescriptorSets * ds ){return rm_desc_sets.Add(ds);}
|
||||||
|
RenderableID Add(Renderable * r ){return rm_renderables.Add(r);}
|
||||||
|
BufferID Add(Buffer * buf ){return rm_buffers.Add(buf);}
|
||||||
|
SamplerID Add(Sampler * s ){return rm_samplers.Add(s);}
|
||||||
|
TextureID Add(Texture * t ){return rm_textures.Add(t);}
|
||||||
|
RenderableInstanceID Add(RenderableInstance *ri ){return rm_renderable_instances.Add(ri);}
|
||||||
|
|
||||||
|
public: //Create
|
||||||
|
|
||||||
|
VAB *CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
||||||
|
VAB *CreateVAB(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(format,count,nullptr,sharing_mode);}
|
||||||
|
VAB *CreateVAB(const VAD *vad,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVAB(vad->GetVulkanFormat(),vad->GetCount(),vad->GetData(),sharing_mode);}
|
||||||
|
|
||||||
|
#define SCENE_DB_CREATE_FUNC(name) Buffer *Create##name(VkDeviceSize size,void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); \
|
||||||
|
Buffer *Create##name(VkDeviceSize size,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
||||||
|
|
||||||
|
SCENE_DB_CREATE_FUNC(UBO)
|
||||||
|
SCENE_DB_CREATE_FUNC(SSBO)
|
||||||
|
SCENE_DB_CREATE_FUNC(INBO)
|
||||||
|
|
||||||
|
#undef SCENE_DB_CREATE_FUNC
|
||||||
|
|
||||||
|
IndexBuffer *CreateIBO(VkIndexType index_type,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
|
||||||
|
IndexBuffer *CreateIBO16(uint32_t count,const uint16 *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT16,count,(void *)data,sharing_mode);}
|
||||||
|
IndexBuffer *CreateIBO32(uint32_t count,const uint32 *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT32,count,(void *)data,sharing_mode);}
|
||||||
|
|
||||||
|
IndexBuffer *CreateIBO(VkIndexType index_type,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(index_type,count,nullptr,sharing_mode);}
|
||||||
|
IndexBuffer *CreateIBO16(uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT16,count,nullptr,sharing_mode);}
|
||||||
|
IndexBuffer *CreateIBO32(uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateIBO(VK_INDEX_TYPE_UINT32,count,nullptr,sharing_mode);}
|
||||||
|
|
||||||
|
MaterialInstance * CreateMaterialInstance(Material *);
|
||||||
|
Renderable * CreateRenderable(Material *,const uint32_t vertex_count=0);
|
||||||
|
TextRenderable * CreateTextRenderable(Material *);
|
||||||
|
|
||||||
|
RenderableInstance *CreateRenderableInstance(Pipeline *p,MaterialInstance *mi,Renderable *r);
|
||||||
|
|
||||||
|
Sampler * CreateSampler(VkSamplerCreateInfo *sci=nullptr);
|
||||||
|
|
||||||
|
public: //Get
|
||||||
|
|
||||||
|
Material * GetMaterial (const MaterialID &id){return rm_material.Get(id);}
|
||||||
|
MaterialInstance * GetMaterialInstance (const MaterialInstanceID &id){return rm_material_instance.Get(id);}
|
||||||
|
Pipeline * GetPipeline (const PipelineID &id){return rm_pipeline.Get(id);}
|
||||||
|
DescriptorSets * GetDescSets (const DescriptorSetsID &id){return rm_desc_sets.Get(id);}
|
||||||
|
Renderable * GetRenderable (const RenderableID &id){return rm_renderables.Get(id);}
|
||||||
|
Buffer * GetBuffer (const BufferID &id){return rm_buffers.Get(id);}
|
||||||
|
Sampler * GetSampler (const SamplerID &id){return rm_samplers.Get(id);}
|
||||||
|
Texture * GetTexture (const TextureID &id){return rm_textures.Get(id);}
|
||||||
|
RenderableInstance *GetRenderableInstance (const RenderableInstanceID &id){return rm_renderable_instances.Get(id);}
|
||||||
|
};//class SceneDB
|
||||||
|
VK_NAMESPACE_END
|
||||||
|
#endif//HGL_GRAPH_VULKAN_DATABASE_INCLUDE
|
@ -4,8 +4,6 @@
|
|||||||
#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;
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
set(RD_INCLUDE_PATH ${ROOT_INCLUDE_PATH}/hgl/graph/vulkan)
|
set(RD_INCLUDE_PATH ${ROOT_INCLUDE_PATH}/hgl/graph/vulkan)
|
||||||
|
|
||||||
|
SET(VK_DB_SOURCE ${RD_INCLUDE_PATH}/VKDatabase.h
|
||||||
|
VKDatabase.cpp)
|
||||||
|
|
||||||
|
SOURCE_GROUP("Database" FILES ${VK_DB_SOURCE})
|
||||||
|
|
||||||
SET(VK_INST_SOURCE ${RD_INCLUDE_PATH}/VKInstance.h
|
SET(VK_INST_SOURCE ${RD_INCLUDE_PATH}/VKInstance.h
|
||||||
VKInstance.cpp)
|
VKInstance.cpp)
|
||||||
|
|
||||||
@ -98,7 +103,8 @@ IF(WIN32)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF(WIN32)
|
ENDIF(WIN32)
|
||||||
|
|
||||||
add_cm_library(ULRE.RenderDevice.Vulkan "ULRE" ${VK_INST_SOURCE}
|
add_cm_library(ULRE.RenderDevice.Vulkan "ULRE" ${VK_DB_SOURCE}
|
||||||
|
${VK_INST_SOURCE}
|
||||||
${VK_DEBUG_SOURCE}
|
${VK_DEBUG_SOURCE}
|
||||||
${VK_MEMORY_SOURCE}
|
${VK_MEMORY_SOURCE}
|
||||||
${VK_DEVICE_SOURCE}
|
${VK_DEVICE_SOURCE}
|
||||||
|
109
src/RenderDevice/Vulkan/VKDatabase.cpp
Normal file
109
src/RenderDevice/Vulkan/VKDatabase.cpp
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||||
|
#include<hgl/graph/vulkan/VKDevice.h>
|
||||||
|
#include<hgl/graph/RenderableInstance.h>
|
||||||
|
|
||||||
|
VK_NAMESPACE_BEGIN
|
||||||
|
VAB *SceneDB::CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode)
|
||||||
|
{
|
||||||
|
VAB *vb=device->CreateVAB(format,count,data,sharing_mode);
|
||||||
|
|
||||||
|
if(!vb)
|
||||||
|
return(nullptr);
|
||||||
|
|
||||||
|
rm_buffers.Add(vb);
|
||||||
|
|
||||||
|
return vb;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define SCENE_DB_CREATE_BUFFER(name) Buffer *SceneDB::Create##name(VkDeviceSize size,void *data,VkSharingMode sharing_mode) \
|
||||||
|
{ \
|
||||||
|
Buffer *buf=device->Create##name(size,data,sharing_mode); \
|
||||||
|
\
|
||||||
|
if(!buf)return(nullptr); \
|
||||||
|
rm_buffers.Add(buf); \
|
||||||
|
return(buf); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
Buffer *SceneDB::Create##name(VkDeviceSize size,VkSharingMode sharing_mode) \
|
||||||
|
{ \
|
||||||
|
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
|
||||||
|
|
||||||
|
IndexBuffer *SceneDB::CreateIBO(VkIndexType index_type,uint32_t count,const void *data,VkSharingMode sharing_mode)
|
||||||
|
{
|
||||||
|
IndexBuffer *buf=device->CreateIBO(index_type,count,data,sharing_mode);
|
||||||
|
|
||||||
|
if(!buf)return(nullptr);
|
||||||
|
rm_buffers.Add(buf);
|
||||||
|
return(buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
MaterialInstance *SceneDB::CreateMaterialInstance(Material *mtl)
|
||||||
|
{
|
||||||
|
if(!mtl)return(nullptr);
|
||||||
|
|
||||||
|
MaterialInstance *mi=mtl->CreateInstance();
|
||||||
|
|
||||||
|
if(mi)
|
||||||
|
Add(mi);
|
||||||
|
|
||||||
|
return mi;
|
||||||
|
}
|
||||||
|
|
||||||
|
Renderable *SceneDB::CreateRenderable(Material *mtl,const uint32_t vertex_count)
|
||||||
|
{
|
||||||
|
if(!mtl)return(nullptr);
|
||||||
|
|
||||||
|
Renderable *ro=mtl->CreateRenderable(vertex_count);
|
||||||
|
|
||||||
|
if(ro)
|
||||||
|
Add(ro);
|
||||||
|
|
||||||
|
return ro;
|
||||||
|
}
|
||||||
|
|
||||||
|
TextRenderable *SceneDB::CreateTextRenderable(Material *mtl)
|
||||||
|
{
|
||||||
|
if(!mtl)return(nullptr);
|
||||||
|
|
||||||
|
TextRenderable *tr=new TextRenderable(device,mtl);
|
||||||
|
|
||||||
|
if(tr)
|
||||||
|
Add(tr);
|
||||||
|
|
||||||
|
return tr;
|
||||||
|
}
|
||||||
|
|
||||||
|
RenderableInstance *SceneDB::CreateRenderableInstance(Pipeline *p,MaterialInstance *mi,Renderable *r)
|
||||||
|
{
|
||||||
|
if(!p||!mi||!r)
|
||||||
|
return(nullptr);
|
||||||
|
|
||||||
|
RenderableInstance *ri=new RenderableInstance(p,mi,r);
|
||||||
|
|
||||||
|
if(ri)
|
||||||
|
Add(ri);
|
||||||
|
|
||||||
|
return ri;
|
||||||
|
}
|
||||||
|
|
||||||
|
Sampler *SceneDB::CreateSampler(VkSamplerCreateInfo *sci)
|
||||||
|
{
|
||||||
|
Sampler *s=device->CreateSampler(sci);
|
||||||
|
|
||||||
|
if(s)
|
||||||
|
Add(s);
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
VK_NAMESPACE_END
|
@ -27,7 +27,6 @@ SET(TILE_SOURCE ${ROOT_INCLUDE_PATH}/hgl/graph/TileData.h
|
|||||||
SOURCE_GROUP("Tile" FILES ${TILE_SOURCE})
|
SOURCE_GROUP("Tile" FILES ${TILE_SOURCE})
|
||||||
|
|
||||||
SET(SCENE_GRAPH_HEADER ${ROOT_INCLUDE_PATH}/hgl/graph/Light.h
|
SET(SCENE_GRAPH_HEADER ${ROOT_INCLUDE_PATH}/hgl/graph/Light.h
|
||||||
${ROOT_INCLUDE_PATH}/hgl/graph/SceneDB.h
|
|
||||||
${ROOT_INCLUDE_PATH}/hgl/graph/SceneNode.h
|
${ROOT_INCLUDE_PATH}/hgl/graph/SceneNode.h
|
||||||
${ROOT_INCLUDE_PATH}/hgl/graph/SceneOrient.h
|
${ROOT_INCLUDE_PATH}/hgl/graph/SceneOrient.h
|
||||||
${ROOT_INCLUDE_PATH}/hgl/graph/RenderableInstance.h
|
${ROOT_INCLUDE_PATH}/hgl/graph/RenderableInstance.h
|
||||||
@ -39,7 +38,6 @@ SET(SCENE_GRAPH_HEADER ${ROOT_INCLUDE_PATH}/hgl/graph/Light.h
|
|||||||
)
|
)
|
||||||
|
|
||||||
SET(SCENE_GRAPH_SOURCE RenderList.cpp
|
SET(SCENE_GRAPH_SOURCE RenderList.cpp
|
||||||
SceneDB.cpp
|
|
||||||
SceneNode.cpp
|
SceneNode.cpp
|
||||||
SceneOrient.cpp
|
SceneOrient.cpp
|
||||||
InlineGeometry.cpp
|
InlineGeometry.cpp
|
||||||
|
@ -5,14 +5,14 @@
|
|||||||
#include<hgl/graph/VertexAttribDataAccess.h>
|
#include<hgl/graph/VertexAttribDataAccess.h>
|
||||||
#include<hgl/graph/vulkan/VKDevice.h>
|
#include<hgl/graph/vulkan/VKDevice.h>
|
||||||
#include<hgl/graph/vulkan/VKShaderModule.h>
|
#include<hgl/graph/vulkan/VKShaderModule.h>
|
||||||
#include<hgl/graph/SceneDB.h>
|
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||||
#include<hgl/graph/RenderableCreater.h>
|
#include<hgl/graph/RenderableCreater.h>
|
||||||
|
|
||||||
namespace hgl
|
namespace hgl
|
||||||
{
|
{
|
||||||
namespace graph
|
namespace graph
|
||||||
{
|
{
|
||||||
vulkan::Renderable *CreateRenderableRectangle(SceneDB *db,vulkan::Material *mtl,const RectangleCreateInfo *rci)
|
vulkan::Renderable *CreateRenderableRectangle(vulkan::SceneDB *db,vulkan::Material *mtl,const RectangleCreateInfo *rci)
|
||||||
{
|
{
|
||||||
RenderableCreater rc(db,mtl);
|
RenderableCreater rc(db,mtl);
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ namespace hgl
|
|||||||
return rc.Finish();
|
return rc.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableGBufferComposition(SceneDB *db,vulkan::Material *mtl)
|
vulkan::Renderable *CreateRenderableGBufferComposition(vulkan::SceneDB *db,vulkan::Material *mtl)
|
||||||
{
|
{
|
||||||
RectangleCreateInfo rci;
|
RectangleCreateInfo rci;
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ namespace hgl
|
|||||||
return CreateRenderableRectangle(db,mtl,&rci);
|
return CreateRenderableRectangle(db,mtl,&rci);
|
||||||
}
|
}
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableRoundRectangle(SceneDB *db,vulkan::Material *mtl,const RoundRectangleCreateInfo *rci)
|
vulkan::Renderable *CreateRenderableRoundRectangle(vulkan::SceneDB *db,vulkan::Material *mtl,const RoundRectangleCreateInfo *rci)
|
||||||
{
|
{
|
||||||
RenderableCreater rc(db,mtl);
|
RenderableCreater rc(db,mtl);
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ namespace hgl
|
|||||||
return rc.Finish();
|
return rc.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableCircle(SceneDB *db,vulkan::Material *mtl,const CircleCreateInfo *cci)
|
vulkan::Renderable *CreateRenderableCircle(vulkan::SceneDB *db,vulkan::Material *mtl,const CircleCreateInfo *cci)
|
||||||
{
|
{
|
||||||
RenderableCreater rc(db,mtl);
|
RenderableCreater rc(db,mtl);
|
||||||
|
|
||||||
@ -137,7 +137,7 @@ namespace hgl
|
|||||||
return rc.Finish();
|
return rc.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderablePlaneGrid(SceneDB *db,vulkan::Material *mtl,const PlaneGridCreateInfo *pgci)
|
vulkan::Renderable *CreateRenderablePlaneGrid(vulkan::SceneDB *db,vulkan::Material *mtl,const PlaneGridCreateInfo *pgci)
|
||||||
{
|
{
|
||||||
RenderableCreater rc(db,mtl);
|
RenderableCreater rc(db,mtl);
|
||||||
|
|
||||||
@ -184,7 +184,7 @@ namespace hgl
|
|||||||
return rc.Finish();
|
return rc.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderablePlane(SceneDB *db,vulkan::Material *mtl,const PlaneCreateInfo *pci)
|
vulkan::Renderable *CreateRenderablePlane(vulkan::SceneDB *db,vulkan::Material *mtl,const PlaneCreateInfo *pci)
|
||||||
{
|
{
|
||||||
const float xy_vertices [] = { -0.5f,-0.5f,0.0f, +0.5f,-0.5f,0.0f, +0.5f,+0.5f,0.0f, -0.5f,+0.5f,0.0f };
|
const float xy_vertices [] = { -0.5f,-0.5f,0.0f, +0.5f,-0.5f,0.0f, +0.5f,+0.5f,0.0f, -0.5f,+0.5f,0.0f };
|
||||||
float xy_tex_coord[] = { 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f };
|
float xy_tex_coord[] = { 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f };
|
||||||
@ -225,7 +225,7 @@ namespace hgl
|
|||||||
return rc.Finish();
|
return rc.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableCube(SceneDB *db,vulkan::Material *mtl,const CubeCreateInfo *cci)
|
vulkan::Renderable *CreateRenderableCube(vulkan::SceneDB *db,vulkan::Material *mtl,const CubeCreateInfo *cci)
|
||||||
{ // Points of a cube.
|
{ // Points of a cube.
|
||||||
/* 4 5 */ const float points[]={ -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, +0.5f, +0.5f, -0.5f, +0.5f, +0.5f, -0.5f, -0.5f, -0.5f, +0.5f, -0.5f, -0.5f, +0.5f, +0.5f,
|
/* 4 5 */ const float points[]={ -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, +0.5f, +0.5f, -0.5f, +0.5f, +0.5f, -0.5f, -0.5f, -0.5f, +0.5f, -0.5f, -0.5f, +0.5f, +0.5f,
|
||||||
/* *------------* */ +0.5f, +0.5f, +0.5f, +0.5f, +0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, +0.5f, -0.5f, +0.5f, +0.5f, -0.5f, +0.5f, -0.5f, -0.5f,
|
/* *------------* */ +0.5f, +0.5f, +0.5f, +0.5f, +0.5f, -0.5f, -0.5f, -0.5f, -0.5f, -0.5f, +0.5f, -0.5f, +0.5f, +0.5f, -0.5f, +0.5f, -0.5f, -0.5f,
|
||||||
@ -396,7 +396,7 @@ namespace hgl
|
|||||||
* @param numberSlices 切片数
|
* @param numberSlices 切片数
|
||||||
* @return 可渲染数据
|
* @return 可渲染数据
|
||||||
*/
|
*/
|
||||||
vulkan::Renderable *CreateRenderableSphere(SceneDB *db,vulkan::Material *mtl,const uint numberSlices)
|
vulkan::Renderable *CreateRenderableSphere(vulkan::SceneDB *db,vulkan::Material *mtl,const uint numberSlices)
|
||||||
{
|
{
|
||||||
RenderableCreater rc(db,mtl);
|
RenderableCreater rc(db,mtl);
|
||||||
|
|
||||||
@ -472,7 +472,7 @@ namespace hgl
|
|||||||
return rc.Finish();
|
return rc.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableDome(SceneDB *db,vulkan::Material *mtl,const DomeCreateInfo *dci)
|
vulkan::Renderable *CreateRenderableDome(vulkan::SceneDB *db,vulkan::Material *mtl,const DomeCreateInfo *dci)
|
||||||
{
|
{
|
||||||
RenderableCreater rc(db,mtl);
|
RenderableCreater rc(db,mtl);
|
||||||
|
|
||||||
@ -591,7 +591,7 @@ namespace hgl
|
|||||||
}
|
}
|
||||||
}//namespace
|
}//namespace
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableTorus(SceneDB *db,vulkan::Material *mtl,const TorusCreateInfo *tci)
|
vulkan::Renderable *CreateRenderableTorus(vulkan::SceneDB *db,vulkan::Material *mtl,const TorusCreateInfo *tci)
|
||||||
{
|
{
|
||||||
RenderableCreater rc(db,mtl);
|
RenderableCreater rc(db,mtl);
|
||||||
|
|
||||||
@ -747,7 +747,7 @@ namespace hgl
|
|||||||
}
|
}
|
||||||
}//namespace
|
}//namespace
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableCylinder(SceneDB *db,vulkan::Material *mtl,const CylinderCreateInfo *cci)
|
vulkan::Renderable *CreateRenderableCylinder(vulkan::SceneDB *db,vulkan::Material *mtl,const CylinderCreateInfo *cci)
|
||||||
{
|
{
|
||||||
uint numberIndices = cci->numberSlices * 3 * 2 + cci->numberSlices * 6;
|
uint numberIndices = cci->numberSlices * 3 * 2 + cci->numberSlices * 6;
|
||||||
|
|
||||||
@ -966,7 +966,7 @@ namespace hgl
|
|||||||
}
|
}
|
||||||
}//namespace
|
}//namespace
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableCone(SceneDB *db,vulkan::Material *mtl,const ConeCreateInfo *cci)
|
vulkan::Renderable *CreateRenderableCone(vulkan::SceneDB *db,vulkan::Material *mtl,const ConeCreateInfo *cci)
|
||||||
{
|
{
|
||||||
RenderableCreater rc(db,mtl);
|
RenderableCreater rc(db,mtl);
|
||||||
|
|
||||||
@ -1093,7 +1093,7 @@ namespace hgl
|
|||||||
return rc.Finish();
|
return rc.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableAxis(SceneDB *db,vulkan::Material *mtl,const AxisCreateInfo *aci)
|
vulkan::Renderable *CreateRenderableAxis(vulkan::SceneDB *db,vulkan::Material *mtl,const AxisCreateInfo *aci)
|
||||||
{
|
{
|
||||||
RenderableCreater rc(db,mtl);
|
RenderableCreater rc(db,mtl);
|
||||||
|
|
||||||
@ -1118,7 +1118,7 @@ namespace hgl
|
|||||||
return rc.Finish();
|
return rc.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
vulkan::Renderable *CreateRenderableBoundingBox(SceneDB *db,vulkan::Material *mtl,const CubeCreateInfo *cci)
|
vulkan::Renderable *CreateRenderableBoundingBox(vulkan::SceneDB *db,vulkan::Material *mtl,const CubeCreateInfo *cci)
|
||||||
{
|
{
|
||||||
// Points of a cube.
|
// Points of a cube.
|
||||||
/* 4 5 */ const float points[]={ -0.5,-0.5, 0.5, 0.5,-0.5,0.5, 0.5,-0.5,-0.5, -0.5,-0.5,-0.5,
|
/* 4 5 */ const float points[]={ -0.5,-0.5, 0.5, 0.5,-0.5,0.5, 0.5,-0.5,-0.5, -0.5,-0.5,-0.5,
|
||||||
|
@ -5,7 +5,7 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
namespace graph
|
namespace graph
|
||||||
{
|
{
|
||||||
RenderableCreater::RenderableCreater(SceneDB *sdb,vulkan::Material *m)
|
RenderableCreater::RenderableCreater(vulkan::SceneDB *sdb,vulkan::Material *m)
|
||||||
{
|
{
|
||||||
db =sdb;
|
db =sdb;
|
||||||
mtl =m;
|
mtl =m;
|
||||||
|
@ -1,113 +0,0 @@
|
|||||||
#include<hgl/graph/SceneDB.h>
|
|
||||||
#include<hgl/graph/vulkan/VKDevice.h>
|
|
||||||
#include<hgl/graph/RenderableInstance.h>
|
|
||||||
|
|
||||||
namespace hgl
|
|
||||||
{
|
|
||||||
namespace graph
|
|
||||||
{
|
|
||||||
vulkan::VAB *SceneDB::CreateVAB(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode)
|
|
||||||
{
|
|
||||||
vulkan::VAB *vb=device->CreateVAB(format,count,data,sharing_mode);
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
vulkan::MaterialInstance *SceneDB::CreateMaterialInstance(vulkan::Material *mtl)
|
|
||||||
{
|
|
||||||
if(!mtl)return(nullptr);
|
|
||||||
|
|
||||||
vulkan::MaterialInstance *mi=mtl->CreateInstance();
|
|
||||||
|
|
||||||
if(mi)
|
|
||||||
Add(mi);
|
|
||||||
|
|
||||||
return mi;
|
|
||||||
}
|
|
||||||
|
|
||||||
vulkan::Renderable *SceneDB::CreateRenderable(vulkan::Material *mtl,const uint32_t vertex_count)
|
|
||||||
{
|
|
||||||
if(!mtl)return(nullptr);
|
|
||||||
|
|
||||||
vulkan::Renderable *ro=mtl->CreateRenderable(vertex_count);
|
|
||||||
|
|
||||||
if(ro)
|
|
||||||
Add(ro);
|
|
||||||
|
|
||||||
return ro;
|
|
||||||
}
|
|
||||||
|
|
||||||
TextRenderable *SceneDB::CreateTextRenderable(vulkan::Material *mtl)
|
|
||||||
{
|
|
||||||
if(!mtl)return(nullptr);
|
|
||||||
|
|
||||||
TextRenderable *tr=new TextRenderable(device,mtl);
|
|
||||||
|
|
||||||
if(tr)
|
|
||||||
Add(tr);
|
|
||||||
|
|
||||||
return tr;
|
|
||||||
}
|
|
||||||
|
|
||||||
RenderableInstance *SceneDB::CreateRenderableInstance(vulkan::Pipeline *p,vulkan::MaterialInstance *mi,vulkan::Renderable *r)
|
|
||||||
{
|
|
||||||
if(!p||!mi||!r)
|
|
||||||
return(nullptr);
|
|
||||||
|
|
||||||
RenderableInstance *ri=new RenderableInstance(p,mi,r);
|
|
||||||
|
|
||||||
if(ri)
|
|
||||||
Add(ri);
|
|
||||||
|
|
||||||
return ri;
|
|
||||||
}
|
|
||||||
|
|
||||||
vulkan::Sampler *SceneDB::CreateSampler(VkSamplerCreateInfo *sci)
|
|
||||||
{
|
|
||||||
vulkan::Sampler *s=device->CreateSampler(sci);
|
|
||||||
|
|
||||||
if(s)
|
|
||||||
Add(s);
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
}//namespace graph
|
|
||||||
}//namespace hgl
|
|
Loading…
x
Reference in New Issue
Block a user