diff --git a/CMSceneGraph b/CMSceneGraph index 28e59c27..32472ad3 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit 28e59c2777ed5e0535ec0ba6b77577aa3a9b148f +Subproject commit 32472ad33cf7a8f36a9aadb90ef84b406c585f1c diff --git a/example/Vulkan/texture_rect.cpp b/example/Vulkan/texture_rect.cpp index 98def86c..c8f3d2aa 100644 --- a/example/Vulkan/texture_rect.cpp +++ b/example/Vulkan/texture_rect.cpp @@ -39,6 +39,7 @@ private: Texture2D * texture =nullptr; Sampler * sampler =nullptr; + Material * material =nullptr; MaterialInstance * material_instance =nullptr; Renderable * render_obj =nullptr; Pipeline * pipeline =nullptr; @@ -54,13 +55,13 @@ private: AutoDelete mci=mtl::CreateRectTexture2D(&cfg); - material_instance=db->CreateMaterialInstance(mci); + material=db->CreateMaterial(mci); - if(!material_instance) + if(!material) return(false); // pipeline=db->CreatePipeline(material_instance,sc_render_target,OS_TEXT("res/pipeline/solid2d")); - pipeline=CreatePipeline(material_instance,InlinePipeline::Solid2D,Prim::SolidRectangles); //等同上一行,为Framework重载,默认使用swapchain的render target + pipeline=CreatePipeline(material,InlinePipeline::Solid2D,Prim::SolidRectangles); //等同上一行,为Framework重载,默认使用swapchain的render target if(!pipeline) return(false); @@ -70,12 +71,14 @@ private: sampler=db->CreateSampler(); - if(!material_instance->BindImageSampler(DescriptorSetType::PerMaterial, ///<描述符合集 - mtl::SamplerName::Color, ///<采样器名称 - texture, ///<纹理 - sampler)) ///<采样器 + if(!material->BindImageSampler( DescriptorSetType::PerMaterial, ///<描述符合集 + mtl::SamplerName::Color, ///<采样器名称 + texture, ///<纹理 + sampler)) ///<采样器 return(false); + material_instance=db->CreateMaterialInstance(material); + return(true); } diff --git a/inc/hgl/graph/VKMaterialParameters.h b/inc/hgl/graph/VKMaterialParameters.h index 2de75d44..f943b28e 100644 --- a/inc/hgl/graph/VKMaterialParameters.h +++ b/inc/hgl/graph/VKMaterialParameters.h @@ -34,7 +34,6 @@ public: #define MP_TYPE_IS(name) const bool is##name()const{return set_type==DescriptorSetType::name;} MP_TYPE_IS(Instance) - MP_TYPE_IS(MaterialInstance) MP_TYPE_IS(PerMaterial) MP_TYPE_IS(PerFrame) MP_TYPE_IS(Global) diff --git a/src/SceneGraph/RenderAssignBuffer.cpp b/src/SceneGraph/RenderAssignBuffer.cpp index 7f04643b..51d9675a 100644 --- a/src/SceneGraph/RenderAssignBuffer.cpp +++ b/src/SceneGraph/RenderAssignBuffer.cpp @@ -36,7 +36,7 @@ void RenderAssignBuffer::Bind(MaterialInstance *mi)const Material *mtl=mi->GetMaterial(); mtl->BindUBO(DescriptorSetType::PerFrame,mtl::SBS_LocalToWorld.name,ubo_l2w); - mtl->BindUBO(DescriptorSetType::MaterialInstance,mtl::SBS_MaterialInstance.name,ubo_mi); + mtl->BindUBO(DescriptorSetType::PerMaterial,mtl::SBS_MaterialInstance.name,ubo_mi); } void RenderAssignBuffer::Clear() diff --git a/src/ShaderGen/MaterialCreateInfo.cpp b/src/ShaderGen/MaterialCreateInfo.cpp index a67561dd..9b1a0ed0 100644 --- a/src/ShaderGen/MaterialCreateInfo.cpp +++ b/src/ShaderGen/MaterialCreateInfo.cpp @@ -166,7 +166,7 @@ bool MaterialCreateInfo::SetMaterialInstance(const AnsiString &glsl_codes,const hgl::strcpy(mi_ubo->name,DESCRIPTOR_NAME_MAX_LENGTH,SBS_MaterialInstance.name); mi_ubo->stage_flag=shader_stage_flag_bits; - mdi.AddUBO(shader_stage_flag_bits,DescriptorSetType::MaterialInstance,mi_ubo); + mdi.AddUBO(shader_stage_flag_bits,DescriptorSetType::PerMaterial,mi_ubo); const AnsiString MI_MAX_COUNT=AnsiString::numberOf(mi_max_count); diff --git a/src/ShaderGen/ShaderCreateInfo.cpp b/src/ShaderGen/ShaderCreateInfo.cpp index b59f7f2b..d3e948ca 100644 --- a/src/ShaderGen/ShaderCreateInfo.cpp +++ b/src/ShaderGen/ShaderCreateInfo.cpp @@ -155,7 +155,7 @@ bool ShaderCreateInfo::ProcSubpassInput() void ShaderCreateInfo::SetMaterialInstance(UBODescriptor *ubo,const AnsiString &mi) { - sdm->AddUBO(DescriptorSetType::MaterialInstance,ubo); + sdm->AddUBO(DescriptorSetType::PerMaterial,ubo); sdm->AddStruct(mtl::MaterialInstanceStruct); if(shader_stage==VK_SHADER_STAGE_VERTEX_BIT)