add Samplers/Texture in SceneDB.h/.cpp

This commit is contained in:
hyzboy 2020-07-08 17:17:36 +08:00
parent c0ff164720
commit af1510b6fc
3 changed files with 40 additions and 26 deletions

View File

@ -17,7 +17,7 @@ constexpr uint32_t SCREEN_SIZE=512;
constexpr uint32_t VERTEX_COUNT=1; constexpr uint32_t VERTEX_COUNT=1;
constexpr float BORDER=0.1; constexpr float BORDER=0.1f;
constexpr float vertex_data[4]= constexpr float vertex_data[4]=
{ {
@ -48,21 +48,6 @@ private:
vulkan::VertexBuffer * vertex_buffer =nullptr; vulkan::VertexBuffer * vertex_buffer =nullptr;
vulkan::VertexBuffer * tex_coord_buffer =nullptr; vulkan::VertexBuffer * tex_coord_buffer =nullptr;
public:
~TestApp()
{
SAFE_CLEAR(tex_coord_buffer);
SAFE_CLEAR(vertex_buffer);
SAFE_CLEAR(pipeline);
SAFE_CLEAR(ubo_mvp);
SAFE_CLEAR(render_obj);
SAFE_CLEAR(material_instance);
SAFE_CLEAR(sampler);
SAFE_CLEAR(texture);
SAFE_CLEAR(material);
}
private: private:
bool InitMaterial() bool InitMaterial()
@ -78,12 +63,16 @@ private:
texture=vulkan::CreateTextureFromFile(device,OS_TEXT("res/image/lena.Tex2D")); texture=vulkan::CreateTextureFromFile(device,OS_TEXT("res/image/lena.Tex2D"));
sampler=device->CreateSampler(); sampler=db->CreateSampler();
material_instance->BindSampler("tex",texture,sampler); material_instance->BindSampler("tex",texture,sampler);
material_instance->BindUBO("world",ubo_mvp); material_instance->BindUBO("world",ubo_mvp);
material_instance->Update(); material_instance->Update();
db->Add(material);
db->Add(material_instance);
db->Add(texture);
db->Add(render_obj);
return(true); return(true);
} }
@ -96,7 +85,7 @@ private:
cam.Refresh(); cam.Refresh();
ubo_mvp=device->CreateUBO(sizeof(WorldMatrix),&cam.matrix); ubo_mvp=db->CreateUBO(sizeof(WorldMatrix),&cam.matrix);
if(!ubo_mvp) if(!ubo_mvp)
return(false); return(false);
@ -106,8 +95,8 @@ private:
void InitVBO() void InitVBO()
{ {
vertex_buffer =device->CreateVBO(FMT_RGBA32F,VERTEX_COUNT,vertex_data); vertex_buffer =db->CreateVBO(FMT_RGBA32F,VERTEX_COUNT,vertex_data);
tex_coord_buffer=device->CreateVBO(FMT_RGBA32F,VERTEX_COUNT,tex_coord_data); tex_coord_buffer=db->CreateVBO(FMT_RGBA32F,VERTEX_COUNT,tex_coord_data);
render_obj->Set("Vertex",vertex_buffer); render_obj->Set("Vertex",vertex_buffer);
render_obj->Set("TexCoord",tex_coord_buffer); render_obj->Set("TexCoord",tex_coord_buffer);
@ -122,6 +111,7 @@ private:
pipeline=pipeline_creater->Create(); pipeline=pipeline_creater->Create();
db->Add(pipeline);
return pipeline; return pipeline;
} }
@ -163,11 +153,6 @@ public:
int main(int,char **) int main(int,char **)
{ {
#ifdef _DEBUG
if(!vulkan::CheckStrideBytesByFormat())
return 0xff;
#endif//
TestApp app; TestApp app;
if(!app.Init()) if(!app.Init())

View File

@ -6,6 +6,8 @@
#include<hgl/graph/vulkan/VKDescriptorSets.h> #include<hgl/graph/vulkan/VKDescriptorSets.h>
#include<hgl/graph/vulkan/VKRenderable.h> #include<hgl/graph/vulkan/VKRenderable.h>
#include<hgl/graph/vulkan/VKBuffer.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/vulkan/VKMaterialInstance.h>
#include<hgl/graph/VertexBufferCreater.h> #include<hgl/graph/VertexBufferCreater.h>
#include<hgl/graph/RenderableInstance.h> #include<hgl/graph/RenderableInstance.h>
@ -21,6 +23,8 @@ namespace hgl
using DescriptorSetsID =int; using DescriptorSetsID =int;
using RenderableID =int; using RenderableID =int;
using RenderableInstanceID =int; using RenderableInstanceID =int;
using SamplerID =int;
using TextureID =int;
class VertexBufferCreater; class VertexBufferCreater;
@ -37,6 +41,8 @@ namespace hgl
IDResManage<DescriptorSetsID, vulkan::DescriptorSets> rm_desc_sets; ///<描述符合集 IDResManage<DescriptorSetsID, vulkan::DescriptorSets> rm_desc_sets; ///<描述符合集
IDResManage<RenderableID, vulkan::Renderable> rm_renderables; ///<可渲染对象合集 IDResManage<RenderableID, vulkan::Renderable> rm_renderables; ///<可渲染对象合集
IDResManage<BufferID, vulkan::Buffer> rm_buffers; ///<顶点缓冲区合集 IDResManage<BufferID, vulkan::Buffer> rm_buffers; ///<顶点缓冲区合集
IDResManage<SamplerID, vulkan::Sampler> rm_samplers; ///<采样器合集
IDResManage<TextureID, vulkan::Texture> rm_textures; ///<纹理合集
IDResManage<RenderableInstanceID, RenderableInstance> rm_renderable_instances; ///<渲染实例集合集 IDResManage<RenderableInstanceID, RenderableInstance> rm_renderable_instances; ///<渲染实例集合集
public: public:
@ -44,14 +50,20 @@ namespace hgl
SceneDB(vulkan::Device *dev):device(dev){} SceneDB(vulkan::Device *dev):device(dev){}
virtual ~SceneDB()=default; virtual ~SceneDB()=default;
public: //Add
MaterialID Add(vulkan::Material * mtl ){return rm_material.Add(mtl);} MaterialID Add(vulkan::Material * mtl ){return rm_material.Add(mtl);}
MaterialInstanceID Add(vulkan::MaterialInstance * mi ){return rm_material_instance.Add(mi);} MaterialInstanceID Add(vulkan::MaterialInstance * mi ){return rm_material_instance.Add(mi);}
PipelineID Add(vulkan::Pipeline * p ){return rm_pipeline.Add(p);} PipelineID Add(vulkan::Pipeline * p ){return rm_pipeline.Add(p);}
DescriptorSetsID Add(vulkan::DescriptorSets * ds ){return rm_desc_sets.Add(ds);} DescriptorSetsID Add(vulkan::DescriptorSets * ds ){return rm_desc_sets.Add(ds);}
RenderableID Add(vulkan::Renderable * r ){return rm_renderables.Add(r);} RenderableID Add(vulkan::Renderable * r ){return rm_renderables.Add(r);}
BufferID Add(vulkan::Buffer * buf ){return rm_buffers.Add(buf);} 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);} RenderableInstanceID Add(RenderableInstance * ri ){return rm_renderable_instances.Add(ri);}
public: //Create
vulkan::VertexBuffer *CreateVBO(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE); vulkan::VertexBuffer *CreateVBO(VkFormat format,uint32_t count,const void *data,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE);
vulkan::VertexBuffer *CreateVBO(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(format,count,nullptr,sharing_mode);} vulkan::VertexBuffer *CreateVBO(VkFormat format,uint32_t count,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(format,count,nullptr,sharing_mode);}
vulkan::VertexBuffer *CreateVBO(const VertexBufferCreater *vbc,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(vbc->GetDataType(),vbc->GetCount(),vbc->GetData(),sharing_mode);} vulkan::VertexBuffer *CreateVBO(const VertexBufferCreater *vbc,VkSharingMode sharing_mode=VK_SHARING_MODE_EXCLUSIVE){return CreateVBO(vbc->GetDataType(),vbc->GetCount(),vbc->GetData(),sharing_mode);}
@ -76,12 +88,18 @@ namespace hgl
RenderableInstance * CreateRenderableInstance(vulkan::Pipeline *p,vulkan::MaterialInstance *mi,vulkan::Renderable *r); 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::Material * GetMaterial (const MaterialID &id){return rm_material.Get(id);}
vulkan::MaterialInstance * GetMaterialInstance (const MaterialInstanceID &id){return rm_material_instance.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::Pipeline * GetPipeline (const PipelineID &id){return rm_pipeline.Get(id);}
vulkan::DescriptorSets * GetDescSets (const DescriptorSetsID &id){return rm_desc_sets.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::Renderable * GetRenderable (const RenderableID &id){return rm_renderables.Get(id);}
vulkan::Buffer * GetBuffer (const BufferID &id){return rm_buffers.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);} RenderableInstance * GetRenderableInstance (const RenderableInstanceID &id){return rm_renderable_instances.Get(id);}
};//class SceneDB };//class SceneDB
}//namespace graph }//namespace graph

View File

@ -58,9 +58,20 @@ namespace hgl
RenderableInstance *ri=new RenderableInstance(p,mi,r); RenderableInstance *ri=new RenderableInstance(p,mi,r);
if(ri)
Add(ri); Add(ri);
return ri; return ri;
} }
vulkan::Sampler *SceneDB::CreateSampler(VkSamplerCreateInfo *sci)
{
vulkan::Sampler *s=device->CreateSampler(sci);
if(s)
Add(s);
return s;
}
}//namespace graph }//namespace graph
}//namespace hgl }//namespace hgl