merged GetUBO/GetUBODynamic and GetSSBO/GetSSBODynamic at MaterialDescriptorSets
This commit is contained in:
parent
3117b9673e
commit
d3afabc170
2
CMCore
2
CMCore
@ -1 +1 @@
|
|||||||
Subproject commit 7cdc507194cdbb90aeda83948a712af7c767fd3e
|
Subproject commit 2493989c5e830bd954c326772b4410580e975c8d
|
@ -125,8 +125,15 @@ private:
|
|||||||
material_instance=db->CreateMaterialInstance(material);
|
material_instance=db->CreateMaterialInstance(material);
|
||||||
if(!material_instance)return(false);
|
if(!material_instance)return(false);
|
||||||
|
|
||||||
material_instance->BindSampler("TexColor" ,texture.color, texture.sampler);
|
{
|
||||||
material_instance->BindSampler("TexNormal" ,texture.normal, texture.sampler);
|
MaterialParameters *mp_texture=material_instance->GetMP(DescriptorSetType::Value);
|
||||||
|
|
||||||
|
if(!mp_texture)
|
||||||
|
return(false);
|
||||||
|
|
||||||
|
mp_texture->BindSampler("TexColor" ,texture.color, texture.sampler);
|
||||||
|
mp_texture->BindSampler("TexNormal" ,texture.normal, texture.sampler);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pipeline_data=GetPipelineData(InlinePipeline::Solid3D);
|
pipeline_data=GetPipelineData(InlinePipeline::Solid3D);
|
||||||
@ -200,15 +207,13 @@ private:
|
|||||||
{
|
{
|
||||||
ubo_light=db->CreateUBO(sizeof(PhongLight),&light);
|
ubo_light=db->CreateUBO(sizeof(PhongLight),&light);
|
||||||
ubo_phong=db->CreateUBO(sizeof(PhongMaterial),&phong);
|
ubo_phong=db->CreateUBO(sizeof(PhongMaterial),&phong);
|
||||||
|
|
||||||
material_instance->BindUBO("light",ubo_light);
|
material_instance->BindUBO("light",ubo_light);
|
||||||
material_instance->BindUBO("phong",ubo_phong);
|
material_instance->BindUBO("phong",ubo_phong);
|
||||||
|
|
||||||
if(!material_instance->BindUBO("camera",GetCameraInfoBuffer()))
|
if(!material_instance->BindUBO("camera",GetCameraInfoBuffer()))
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
material_instance->BindUBO("fs_light",ubo_light);
|
|
||||||
|
|
||||||
material_instance->Update();
|
material_instance->Update();
|
||||||
|
|
||||||
if(!axis_mi->BindUBO("camera",GetCameraInfoBuffer()))
|
if(!axis_mi->BindUBO("camera",GetCameraInfoBuffer()))
|
||||||
@ -222,19 +227,20 @@ private:
|
|||||||
{
|
{
|
||||||
auto ri=db->CreateRenderableInstance(r,material_instance,pl);
|
auto ri=db->CreateRenderableInstance(r,material_instance,pl);
|
||||||
|
|
||||||
render_root.Add(ri);
|
render_root.CreateSubNode(ri);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Add(Renderable *r,Pipeline *pl,const Matrix4f &mat)
|
void Add(Renderable *r,Pipeline *pl,const Matrix4f &mat)
|
||||||
{
|
{
|
||||||
auto ri=db->CreateRenderableInstance(r,material_instance,pl);
|
auto ri=db->CreateRenderableInstance(r,material_instance,pl);
|
||||||
|
|
||||||
render_root.Add(ri,mat);
|
render_root.CreateSubNode(mat,ri);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InitScene()
|
bool InitScene()
|
||||||
{
|
{
|
||||||
render_root.Add(db->CreateRenderableInstance(ro_axis,axis_mi,axis_pipeline));
|
render_root.CreateSubNode(db->CreateRenderableInstance(ro_axis,axis_mi,axis_pipeline));
|
||||||
|
|
||||||
Add(ro_torus ,pipeline_solid);
|
Add(ro_torus ,pipeline_solid);
|
||||||
Add(ro_cube ,pipeline_solid,translate(-10, 0, 5)*scale(10,10,10));
|
Add(ro_cube ,pipeline_solid,translate(-10, 0, 5)*scale(10,10,10));
|
||||||
Add(ro_sphere ,pipeline_solid,translate( 10, 0, 5)*scale(10,10,10));
|
Add(ro_sphere ,pipeline_solid,translate( 10, 0, 5)*scale(10,10,10));
|
||||||
@ -242,7 +248,7 @@ private:
|
|||||||
Add(ro_cone ,pipeline_solid,translate( 0,-16, 0));
|
Add(ro_cone ,pipeline_solid,translate( 0,-16, 0));
|
||||||
|
|
||||||
render_root.RefreshMatrix();
|
render_root.RefreshMatrix();
|
||||||
render_root.ExpendToList(&render_list);
|
render_list.Expend(GetCameraInfo(),&render_root);
|
||||||
|
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
@ -357,6 +357,11 @@ public:
|
|||||||
ubo_camera_info->Write(&camera->info);
|
ubo_camera_info->Write(&camera->info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CameraInfo &GetCameraInfo()
|
||||||
|
{
|
||||||
|
return camera->info;
|
||||||
|
}
|
||||||
|
|
||||||
GPUBuffer *GetCameraInfoBuffer()
|
GPUBuffer *GetCameraInfoBuffer()
|
||||||
{
|
{
|
||||||
return ubo_camera_info;
|
return ubo_camera_info;
|
||||||
|
@ -35,11 +35,7 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
ubo_offset_alignment=device->GetUBOAlign();
|
ubo_offset_alignment=device->GetUBOAlign();
|
||||||
|
|
||||||
uint32_t unit_size=sizeof(T);
|
const uint32_t unit_size=hgl_align<uint32_t>(sizeof(T),ubo_offset_alignment);
|
||||||
|
|
||||||
const uint32_t align_size=ubo_offset_alignment-1;
|
|
||||||
|
|
||||||
unit_size=(unit_size+align_size)&(~align_size);
|
|
||||||
|
|
||||||
vk_ma=new VKMemoryAllocator(device,buffer_usage_flags,unit_size); // construct function is going to set AllocUnitSize by minUniformOffsetAlignment
|
vk_ma=new VKMemoryAllocator(device,buffer_usage_flags,unit_size); // construct function is going to set AllocUnitSize by minUniformOffsetAlignment
|
||||||
MemoryBlock *mb=new MemoryBlock(vk_ma);
|
MemoryBlock *mb=new MemoryBlock(vk_ma);
|
||||||
|
@ -41,11 +41,9 @@ public:
|
|||||||
|
|
||||||
const int GetBinding(const VkDescriptorType &desc_type,const AnsiString &name)const;
|
const int GetBinding(const VkDescriptorType &desc_type,const AnsiString &name)const;
|
||||||
|
|
||||||
const int GetUBO (const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, name);}
|
const int GetUBO (const AnsiString &name,bool dynamic)const{return GetBinding(dynamic?VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,name);}
|
||||||
const int GetSSBO (const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, name);}
|
const int GetSSBO (const AnsiString &name,bool dynamic)const{return GetBinding(dynamic?VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,name);}
|
||||||
const int GetUBODynamic (const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, name);}
|
const int GetSampler (const AnsiString &name )const{return GetBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, name);}
|
||||||
const int GetSSBODynamic(const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, name);}
|
|
||||||
const int GetSampler (const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, name);}
|
|
||||||
|
|
||||||
const DescriptorSetLayoutCreateInfo *GetBinding(const DescriptorSetType &type)const{return sds+size_t(type);}
|
const DescriptorSetLayoutCreateInfo *GetBinding(const DescriptorSetType &type)const{return sds+size_t(type);}
|
||||||
};//class MaterialDescriptorSets
|
};//class MaterialDescriptorSets
|
||||||
|
@ -21,7 +21,7 @@ bool MaterialParameters::BindUBO(const AnsiString &name,GPUBuffer *ubo,bool dyna
|
|||||||
if(name.IsEmpty()||!ubo)
|
if(name.IsEmpty()||!ubo)
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
const int index=dynamic?mds->GetUBODynamic(name):mds->GetUBO(name);
|
const int index=mds->GetUBO(name,dynamic);
|
||||||
|
|
||||||
if(index<0)
|
if(index<0)
|
||||||
return(false);
|
return(false);
|
||||||
@ -37,7 +37,7 @@ bool MaterialParameters::BindSSBO(const AnsiString &name,GPUBuffer *ssbo,bool dy
|
|||||||
if(name.IsEmpty()||!ssbo)
|
if(name.IsEmpty()||!ssbo)
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
const int index=dynamic?mds->GetSSBODynamic(name):mds->GetSSBO(name);
|
const int index=mds->GetSSBO(name,dynamic);
|
||||||
|
|
||||||
if(index<0)
|
if(index<0)
|
||||||
return(false);
|
return(false);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user