use VKDatabase instead SceneDB

This commit is contained in:
hyzboy 2020-09-02 18:16:15 +08:00
parent b4ca17e44b
commit 8dbd0b3f2f
17 changed files with 251 additions and 258 deletions

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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;

View File

@ -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:

View File

@ -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); ///<初始化,参数为顶点数量

View File

@ -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

View 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

View File

@ -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;

View File

@ -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}

View 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

View File

@ -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

View File

@ -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,

View File

@ -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;

View File

@ -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