add Samplers/Texture in SceneDB.h/.cpp
This commit is contained in:
parent
c0ff164720
commit
af1510b6fc
@ -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())
|
||||||
|
@ -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
|
||||||
|
@ -58,9 +58,20 @@ namespace hgl
|
|||||||
|
|
||||||
RenderableInstance *ri=new RenderableInstance(p,mi,r);
|
RenderableInstance *ri=new RenderableInstance(p,mi,r);
|
||||||
|
|
||||||
Add(ri);
|
if(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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user