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);
|
||||
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);
|
||||
@ -200,15 +207,13 @@ private:
|
||||
{
|
||||
ubo_light=db->CreateUBO(sizeof(PhongLight),&light);
|
||||
ubo_phong=db->CreateUBO(sizeof(PhongMaterial),&phong);
|
||||
|
||||
|
||||
material_instance->BindUBO("light",ubo_light);
|
||||
material_instance->BindUBO("phong",ubo_phong);
|
||||
|
||||
if(!material_instance->BindUBO("camera",GetCameraInfoBuffer()))
|
||||
return(false);
|
||||
|
||||
material_instance->BindUBO("fs_light",ubo_light);
|
||||
|
||||
material_instance->Update();
|
||||
|
||||
if(!axis_mi->BindUBO("camera",GetCameraInfoBuffer()))
|
||||
@ -222,19 +227,20 @@ private:
|
||||
{
|
||||
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)
|
||||
{
|
||||
auto ri=db->CreateRenderableInstance(r,material_instance,pl);
|
||||
|
||||
render_root.Add(ri,mat);
|
||||
render_root.CreateSubNode(mat,ri);
|
||||
}
|
||||
|
||||
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_cube ,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));
|
||||
|
||||
render_root.RefreshMatrix();
|
||||
render_root.ExpendToList(&render_list);
|
||||
render_list.Expend(GetCameraInfo(),&render_root);
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
@ -357,6 +357,11 @@ public:
|
||||
ubo_camera_info->Write(&camera->info);
|
||||
}
|
||||
|
||||
const CameraInfo &GetCameraInfo()
|
||||
{
|
||||
return camera->info;
|
||||
}
|
||||
|
||||
GPUBuffer *GetCameraInfoBuffer()
|
||||
{
|
||||
return ubo_camera_info;
|
||||
|
@ -35,11 +35,7 @@ namespace hgl
|
||||
{
|
||||
ubo_offset_alignment=device->GetUBOAlign();
|
||||
|
||||
uint32_t unit_size=sizeof(T);
|
||||
|
||||
const uint32_t align_size=ubo_offset_alignment-1;
|
||||
|
||||
unit_size=(unit_size+align_size)&(~align_size);
|
||||
const uint32_t unit_size=hgl_align<uint32_t>(sizeof(T),ubo_offset_alignment);
|
||||
|
||||
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);
|
||||
|
@ -41,11 +41,9 @@ public:
|
||||
|
||||
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 GetSSBO (const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, name);}
|
||||
const int GetUBODynamic (const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, 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 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,bool dynamic)const{return GetBinding(dynamic?VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,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);}
|
||||
};//class MaterialDescriptorSets
|
||||
|
@ -21,7 +21,7 @@ bool MaterialParameters::BindUBO(const AnsiString &name,GPUBuffer *ubo,bool dyna
|
||||
if(name.IsEmpty()||!ubo)
|
||||
return(false);
|
||||
|
||||
const int index=dynamic?mds->GetUBODynamic(name):mds->GetUBO(name);
|
||||
const int index=mds->GetUBO(name,dynamic);
|
||||
|
||||
if(index<0)
|
||||
return(false);
|
||||
@ -37,7 +37,7 @@ bool MaterialParameters::BindSSBO(const AnsiString &name,GPUBuffer *ssbo,bool dy
|
||||
if(name.IsEmpty()||!ssbo)
|
||||
return(false);
|
||||
|
||||
const int index=dynamic?mds->GetSSBODynamic(name):mds->GetSSBO(name);
|
||||
const int index=mds->GetSSBO(name,dynamic);
|
||||
|
||||
if(index<0)
|
||||
return(false);
|
||||
|
Loading…
x
Reference in New Issue
Block a user