diff --git a/example/Vulkan/Atomsphere.cpp b/example/Vulkan/Atomsphere.cpp index c32a8be1..2cefa53d 100644 --- a/example/Vulkan/Atomsphere.cpp +++ b/example/Vulkan/Atomsphere.cpp @@ -4,7 +4,7 @@ #include"VulkanAppFramework.h" #include #include -#include +#include #include #include diff --git a/example/Vulkan/Geometry2D.cpp b/example/Vulkan/Geometry2D.cpp index 173622d7..cbd1b3dc 100644 --- a/example/Vulkan/Geometry2D.cpp +++ b/example/Vulkan/Geometry2D.cpp @@ -7,7 +7,7 @@ #include"VulkanAppFramework.h" #include #include -#include +#include #include #include diff --git a/example/Vulkan/Geometry3D.cpp b/example/Vulkan/Geometry3D.cpp index 0ec5fefb..ae56a859 100644 --- a/example/Vulkan/Geometry3D.cpp +++ b/example/Vulkan/Geometry3D.cpp @@ -3,7 +3,7 @@ #include"VulkanAppFramework.h" #include #include -#include +#include #include #include diff --git a/example/Vulkan/InlineGeometryScene.cpp b/example/Vulkan/InlineGeometryScene.cpp index eca256d5..74665306 100644 --- a/example/Vulkan/InlineGeometryScene.cpp +++ b/example/Vulkan/InlineGeometryScene.cpp @@ -4,7 +4,7 @@ #include"VulkanAppFramework.h" #include #include -#include +#include #include #include diff --git a/example/Vulkan/SceneTree.cpp b/example/Vulkan/SceneTree.cpp index cd1d5fe8..a82cb624 100644 --- a/example/Vulkan/SceneTree.cpp +++ b/example/Vulkan/SceneTree.cpp @@ -4,7 +4,7 @@ #include"VulkanAppFramework.h" #include #include -#include +#include #include #include #include diff --git a/example/Vulkan/VulkanAppFramework.h b/example/Vulkan/VulkanAppFramework.h index 7f12b478..bbced199 100644 --- a/example/Vulkan/VulkanAppFramework.h +++ b/example/Vulkan/VulkanAppFramework.h @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include using namespace hgl; diff --git a/example/Vulkan/first_triangle.cpp b/example/Vulkan/first_triangle.cpp index 8f5b1995..fef7fdc1 100644 --- a/example/Vulkan/first_triangle.cpp +++ b/example/Vulkan/first_triangle.cpp @@ -38,12 +38,12 @@ private: vulkan::Material * material =nullptr; vulkan::MaterialInstance * material_instance =nullptr; vulkan::Renderable * render_obj =nullptr; - vulkan::Buffer * ubo_world_matrix =nullptr; + vulkan::Buffer * ubo_world_matrix =nullptr; vulkan::Pipeline * pipeline =nullptr; - vulkan::VAB * vertex_buffer =nullptr; - vulkan::VAB * color_buffer =nullptr; + vulkan::VAB * vertex_buffer =nullptr; + vulkan::VAB * color_buffer =nullptr; public: diff --git a/inc/hgl/graph/RenderableCreater.h b/inc/hgl/graph/RenderableCreater.h index b5e8e324..c9a45056 100644 --- a/inc/hgl/graph/RenderableCreater.h +++ b/inc/hgl/graph/RenderableCreater.h @@ -1,7 +1,7 @@ #ifndef HGL_GRAPH_RENDERABLE_CREATER_INCLUDE #define HGL_GRAPH_RENDERABLE_CREATER_INCLUDE -#include +#include #include #include namespace hgl @@ -32,7 +32,7 @@ namespace hgl { protected: - SceneDB *db; + vulkan::SceneDB *db; vulkan::Material *mtl; const vulkan::VertexShaderModule *vsm; @@ -50,7 +50,7 @@ namespace hgl public: - RenderableCreater(SceneDB *sdb,vulkan::Material *m); + RenderableCreater(vulkan::SceneDB *sdb,vulkan::Material *m); virtual ~RenderableCreater()=default; virtual bool Init(const uint32 count); ///<初始化,参数为顶点数量 diff --git a/inc/hgl/graph/SceneDB.h b/inc/hgl/graph/SceneDB.h deleted file mode 100644 index ec39f884..00000000 --- a/inc/hgl/graph/SceneDB.h +++ /dev/null @@ -1,112 +0,0 @@ -#ifndef HGL_GRAPH_SCENE_DATABASE_INCLUDE -#define HGL_GRAPH_SCENE_DATABASE_INCLUDE - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -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 rm_material; ///<材质合集 - IDResManage rm_material_instance; ///<材质实例合集 - IDResManage rm_pipeline; ///<管线合集 - IDResManage rm_desc_sets; ///<描述符合集 - IDResManage rm_renderables; ///<可渲染对象合集 - IDResManage rm_buffers; ///<顶点缓冲区合集 - IDResManage rm_samplers; ///<采样器合集 - IDResManage rm_textures; ///<纹理合集 - IDResManage 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 diff --git a/inc/hgl/graph/vulkan/VKDatabase.h b/inc/hgl/graph/vulkan/VKDatabase.h new file mode 100644 index 00000000..d1680c17 --- /dev/null +++ b/inc/hgl/graph/vulkan/VKDatabase.h @@ -0,0 +1,107 @@ +#ifndef HGL_GRAPH_VULKAN_DATABASE_INCLUDE +#define HGL_GRAPH_VULKAN_DATABASE_INCLUDE + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +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 rm_material; ///<材质合集 + IDResManage rm_material_instance; ///<材质实例合集 + IDResManage rm_pipeline; ///<管线合集 + IDResManage rm_desc_sets; ///<描述符合集 + IDResManage rm_renderables; ///<可渲染对象合集 + IDResManage rm_buffers; ///<顶点缓冲区合集 + IDResManage rm_samplers; ///<采样器合集 + IDResManage rm_textures; ///<纹理合集 + IDResManage 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 diff --git a/inc/hgl/graph/vulkan/VKPipeline.h b/inc/hgl/graph/vulkan/VKPipeline.h index bcc04659..f881e946 100644 --- a/inc/hgl/graph/vulkan/VKPipeline.h +++ b/inc/hgl/graph/vulkan/VKPipeline.h @@ -4,8 +4,6 @@ #include #include VK_NAMESPACE_BEGIN -using PipelineID=uint64; - class Pipeline { VkDevice device; diff --git a/src/RenderDevice/Vulkan/CMakeLists.txt b/src/RenderDevice/Vulkan/CMakeLists.txt index 085562d4..150444a0 100644 --- a/src/RenderDevice/Vulkan/CMakeLists.txt +++ b/src/RenderDevice/Vulkan/CMakeLists.txt @@ -1,5 +1,10 @@ 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 VKInstance.cpp) @@ -98,7 +103,8 @@ IF(WIN32) ENDIF() 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_MEMORY_SOURCE} ${VK_DEVICE_SOURCE} diff --git a/src/RenderDevice/Vulkan/VKDatabase.cpp b/src/RenderDevice/Vulkan/VKDatabase.cpp new file mode 100644 index 00000000..96afc1e9 --- /dev/null +++ b/src/RenderDevice/Vulkan/VKDatabase.cpp @@ -0,0 +1,109 @@ +#include +#include +#include + +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 diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 01fbd94e..7cd4babf 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -27,7 +27,6 @@ SET(TILE_SOURCE ${ROOT_INCLUDE_PATH}/hgl/graph/TileData.h SOURCE_GROUP("Tile" FILES ${TILE_SOURCE}) 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/SceneOrient.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 - SceneDB.cpp SceneNode.cpp SceneOrient.cpp InlineGeometry.cpp diff --git a/src/SceneGraph/InlineGeometry.cpp b/src/SceneGraph/InlineGeometry.cpp index 76ed6c1d..4683b700 100644 --- a/src/SceneGraph/InlineGeometry.cpp +++ b/src/SceneGraph/InlineGeometry.cpp @@ -5,14 +5,14 @@ #include #include #include -#include +#include #include namespace hgl { 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); @@ -29,7 +29,7 @@ namespace hgl return rc.Finish(); } - vulkan::Renderable *CreateRenderableGBufferComposition(SceneDB *db,vulkan::Material *mtl) + vulkan::Renderable *CreateRenderableGBufferComposition(vulkan::SceneDB *db,vulkan::Material *mtl) { RectangleCreateInfo rci; @@ -38,7 +38,7 @@ namespace hgl 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); @@ -112,7 +112,7 @@ namespace hgl 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); @@ -137,7 +137,7 @@ namespace hgl 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); @@ -184,7 +184,7 @@ namespace hgl 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 }; 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(); } - 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. /* 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, @@ -396,7 +396,7 @@ namespace hgl * @param numberSlices 切片数 * @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); @@ -472,7 +472,7 @@ namespace hgl 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); @@ -591,7 +591,7 @@ namespace hgl } }//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); @@ -747,7 +747,7 @@ namespace hgl } }//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; @@ -966,7 +966,7 @@ namespace hgl } }//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); @@ -1093,7 +1093,7 @@ namespace hgl 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); @@ -1118,7 +1118,7 @@ namespace hgl 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. /* 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, diff --git a/src/SceneGraph/RenderableCreater.cpp b/src/SceneGraph/RenderableCreater.cpp index 10151dc5..dee895b6 100644 --- a/src/SceneGraph/RenderableCreater.cpp +++ b/src/SceneGraph/RenderableCreater.cpp @@ -5,7 +5,7 @@ namespace hgl { namespace graph { - RenderableCreater::RenderableCreater(SceneDB *sdb,vulkan::Material *m) + RenderableCreater::RenderableCreater(vulkan::SceneDB *sdb,vulkan::Material *m) { db =sdb; mtl =m; diff --git a/src/SceneGraph/SceneDB.cpp b/src/SceneGraph/SceneDB.cpp deleted file mode 100644 index 4349b319..00000000 --- a/src/SceneGraph/SceneDB.cpp +++ /dev/null @@ -1,113 +0,0 @@ -#include -#include -#include - -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