use VKDatabase instead SceneDB
This commit is contained in:
parent
b4ca17e44b
commit
8dbd0b3f2f
@ -4,7 +4,7 @@
|
||||
#include"VulkanAppFramework.h"
|
||||
#include<hgl/filesystem/FileSystem.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/RenderList.h>
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
#include"VulkanAppFramework.h"
|
||||
#include<hgl/filesystem/FileSystem.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/RenderList.h>
|
||||
|
||||
|
@ -3,7 +3,7 @@
|
||||
#include"VulkanAppFramework.h"
|
||||
#include<hgl/filesystem/FileSystem.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/RenderList.h>
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include"VulkanAppFramework.h"
|
||||
#include<hgl/filesystem/FileSystem.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/RenderList.h>
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include"VulkanAppFramework.h"
|
||||
#include<hgl/filesystem/FileSystem.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/RenderList.h>
|
||||
#include<hgl/Time.h>
|
||||
|
@ -18,7 +18,7 @@
|
||||
#include<hgl/graph/vulkan/VKMaterial.h>
|
||||
#include<hgl/graph/vulkan/VKMaterialInstance.h>
|
||||
#include<hgl/graph/vulkan/VKRenderTarget.h>
|
||||
#include<hgl/graph/SceneDB.h>
|
||||
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||
#include<hgl/graph/RenderList.h>
|
||||
|
||||
using namespace hgl;
|
||||
|
@ -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:
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#ifndef 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/vulkan/VKShaderModule.h>
|
||||
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); ///<初始化,参数为顶点数量
|
||||
|
@ -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/io/DataOutputStream.h>
|
||||
VK_NAMESPACE_BEGIN
|
||||
using PipelineID=uint64;
|
||||
|
||||
class Pipeline
|
||||
{
|
||||
VkDevice device;
|
||||
|
@ -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}
|
||||
|
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})
|
||||
|
||||
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
|
||||
|
@ -5,14 +5,14 @@
|
||||
#include<hgl/graph/VertexAttribDataAccess.h>
|
||||
#include<hgl/graph/vulkan/VKDevice.h>
|
||||
#include<hgl/graph/vulkan/VKShaderModule.h>
|
||||
#include<hgl/graph/SceneDB.h>
|
||||
#include<hgl/graph/vulkan/VKDatabase.h>
|
||||
#include<hgl/graph/RenderableCreater.h>
|
||||
|
||||
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,
|
||||
|
@ -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;
|
||||
|
@ -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