renamed MaterialInstance to MaterialParameters.

This commit is contained in:
hyzboy 2021-06-16 10:41:04 +08:00
parent 0f42ab3987
commit bc8848afa6
30 changed files with 79 additions and 66 deletions

View File

@ -35,7 +35,7 @@ private:
Camera cam;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
RenderableInstance *render_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr;
GPUBuffer * ubo_color_material =nullptr;

View File

@ -37,7 +37,7 @@ private:
SceneNode render_root;
RenderList render_list;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
Pipeline * pipeline_solid =nullptr;
GPUBuffer * ubo_atomsphere =nullptr;

View File

@ -70,7 +70,7 @@ private:
struct SubpassParam
{
Material * material;
MaterialInstance * material_instance;
MaterialParameters * material_instance;
Pipeline * pipeline_fan;
Pipeline * pipeline_triangles;
};//

View File

@ -27,7 +27,7 @@ class TestApp:public VulkanApplicationFramework
private:
Sampler * sampler =nullptr;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr;
GPUBuffer * ubo_color =nullptr;

View File

@ -39,7 +39,7 @@ class TestApp:public VulkanApplicationFramework
private:
Sampler * sampler =nullptr;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
Renderable * render_obj =nullptr;
RenderableInstance *render_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr;

View File

@ -26,7 +26,7 @@ private:
Camera cam;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
RenderableInstance *renderable_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr;

View File

@ -29,7 +29,7 @@ private:
RenderList render_list;
Material * material =nullptr;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
Renderable * ro_rectangle =nullptr;
Renderable * ro_circle =nullptr;

View File

@ -27,7 +27,7 @@ private:
struct MDP
{
Material * material =nullptr;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
Pipeline * pipeline =nullptr;
}m3d,m2d;

View File

@ -54,7 +54,7 @@ private:
struct MIR
{
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
RenderableInstance *renderable_instance =nullptr;
}mir_nearest,mir_linear,mir_nearest_hq,mir_linear_hq;

View File

@ -41,10 +41,10 @@ private:
RenderList render_list;
Material * material =nullptr;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
Material * axis_material =nullptr;
MaterialInstance * axis_mi =nullptr;
MaterialParameters * axis_mi =nullptr;
PipelineData * pipeline_data =nullptr;
Pipeline * axis_pipeline =nullptr;

View File

@ -15,7 +15,7 @@ class TestApp:public CameraAppFramework
{
Camera cam;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr;
};

View File

@ -38,7 +38,7 @@ private:
Texture2D * texture =nullptr;
Sampler * sampler =nullptr;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
Renderable * render_obj =nullptr;
RenderableInstance *render_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr;

View File

@ -33,7 +33,7 @@ private:
Camera cam;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
RenderableInstance *render_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr;

View File

@ -36,7 +36,7 @@ private:
Camera cam;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
RenderableInstance *renderable_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr;

View File

@ -51,7 +51,7 @@ private:
Texture2D * texture =nullptr;
Sampler * sampler =nullptr;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
RenderableInstance *renderable_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr;
Pipeline * pipeline =nullptr;

View File

@ -36,7 +36,7 @@ private:
SceneNode render_root;
RenderList render_list;
MaterialInstance * material_instance =nullptr;
MaterialParameters * material_instance =nullptr;
RenderableInstance *render_instance =nullptr;
GPUBuffer * ubo_camera_info =nullptr;

View File

@ -36,7 +36,7 @@ namespace hgl
private:
Pipeline * last_pipeline;
MaterialInstance * last_mi;
MaterialParameters * last_mi;
uint32_t last_vbo;
void Render(RenderableInstance *);

View File

@ -20,7 +20,7 @@ namespace hgl
{
using PipelineSets =Sets<Pipeline *>;
using MaterialSets =Sets<Material *>;
using MatInstSets =Sets<MaterialInstance *>;
using MatInstSets =Sets<MaterialParameters *>;
protected:

View File

@ -62,7 +62,7 @@ class ShaderResource;
class ShaderModule;
class VertexShaderModule;
class Material;
class MaterialInstance;
class MaterialParameters;
class PipelineLayout;
struct PipelineData;
enum class InlinePipeline;

View File

@ -75,7 +75,7 @@ public:
public:
MaterialInstance * CreateInstance ();
MaterialParameters * CreateInstance ();
};//class Material
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INCLUDE

View File

@ -1,35 +1,48 @@
#ifndef HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
#define HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
#ifndef HGL_GRAPH_VULKAN_MATERIAL_PARAMETERS_INCLUDE
#define HGL_GRAPH_VULKAN_MATERIAL_PARAMETERS_INCLUDE
#include<hgl/graph/VK.h>
#include<hgl/type/String.h>
VK_NAMESPACE_BEGIN
class MaterialInstance
class MaterialParameters
{
Material *material;
DescriptorSetsType ds_type;
DescriptorSets *descriptor_sets;
private:
friend class Material;
MaterialInstance(Material *,DescriptorSets *);
MaterialParameters(Material *,const DescriptorSetsType &type,DescriptorSets *);
public:
Material * GetMaterial (){return material;}
DescriptorSets *GetDescriptorSets (){return descriptor_sets;}
Material * GetMaterial (){return material;}
const DescriptorSetsType GetType (){return ds_type;}
DescriptorSets * GetDescriptorSets(){return descriptor_sets;}
public:
~MaterialInstance();
#define MP_TYPE_IS(name) const bool is##name()const{return ds_type==DescriptorSetsType::name;}
MP_TYPE_IS(Material)
MP_TYPE_IS(Texture)
MP_TYPE_IS(Values)
MP_TYPE_IS(Renderable)
MP_TYPE_IS(Global)
#undef MP_TYPE_IS
public:
virtual ~MaterialParameters();
bool BindUBO(const AnsiString &name,GPUBuffer *ubo,bool dynamic=false);
bool BindSSBO(const AnsiString &name,GPUBuffer *ubo,bool dynamic=false);
bool BindSampler(const AnsiString &name,Texture *tex,Sampler *sampler);
void Update();
};//class MaterialInstance
};//class MaterialParameters
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_MATERIAL_INSTANCE_INCLUDE
#endif//HGL_GRAPH_VULKAN_MATERIAL_PARAMETERS_INCLUDE

View File

@ -37,7 +37,7 @@ class RenderResource
Map<OSString,Texture *> texture_by_name;
IDResManage<MaterialID, Material> rm_material; ///<材质合集
IDResManage<MaterialInstanceID, MaterialInstance> rm_material_instance; ///<材质实例合集
IDResManage<MaterialInstanceID, MaterialParameters> rm_material_instance; ///<材质实例合集
IDResManage<DescriptorSetsID, DescriptorSets> rm_desc_sets; ///<描述符合集
IDResManage<RenderableID, Renderable> rm_renderables; ///<可渲染对象合集
IDResManage<BufferID, GPUBuffer> rm_buffers; ///<顶点缓冲区合集
@ -53,7 +53,7 @@ public:
public: //Add
MaterialID Add(Material * mtl ){return rm_material.Add(mtl);}
MaterialInstanceID Add(MaterialInstance * mi ){return rm_material_instance.Add(mi);}
MaterialInstanceID Add(MaterialParameters * mi ){return rm_material_instance.Add(mi);}
DescriptorSetsID Add(DescriptorSets * ds ){return rm_desc_sets.Add(ds);}
RenderableID Add(Renderable * r ){return rm_renderables.Add(r);}
BufferID Add(GPUBuffer * buf ){return rm_buffers.Add(buf);}
@ -93,13 +93,13 @@ public: //Material
Material * CreateMaterial(const UTF8String &mtl_name,const OSString &vertex_shader_filename,const OSString &geometry_shader_filename,const OSString &fragment_shader_filename);
Material * CreateMaterial(const OSString &);
MaterialInstance * CreateMaterialInstance(Material *);
MaterialInstance * CreateMaterialInstance(const OSString &);
MaterialParameters * CreateMaterialInstance(Material *);
MaterialParameters * CreateMaterialInstance(const OSString &);
Renderable * CreateRenderable(const uint32_t vertex_count=0);
TextRenderable * CreateTextRenderable(Material *);
RenderableInstance *CreateRenderableInstance(Renderable *r,MaterialInstance *mi,Pipeline *p);
RenderableInstance *CreateRenderableInstance(Renderable *r,MaterialParameters *mi,Pipeline *p);
Sampler * CreateSampler(VkSamplerCreateInfo *sci=nullptr);
@ -110,7 +110,7 @@ public: //texture
public: //Get
Material * GetMaterial (const MaterialID &id){return rm_material.Get(id);}
MaterialInstance * GetMaterialInstance (const MaterialInstanceID &id){return rm_material_instance.Get(id);}
MaterialParameters * GetMaterialInstance (const MaterialInstanceID &id){return rm_material_instance.Get(id);}
DescriptorSets * GetDescSets (const DescriptorSetsID &id){return rm_desc_sets.Get(id);}
Renderable * GetRenderable (const RenderableID &id){return rm_renderables.Get(id);}
GPUBuffer * GetBuffer (const BufferID &id){return rm_buffers.Get(id);}

View File

@ -13,7 +13,7 @@ VK_NAMESPACE_BEGIN
class RenderableInstance ///可渲染对象实例
{
Pipeline * pipeline;
MaterialInstance * mat_inst;
MaterialParameters * mat_inst;
Renderable * render_obj;
DescriptorSets * descriptor_sets; ///<渲染实例专用描述符合集一般用于存LocalToWorld等等
@ -26,16 +26,16 @@ class RenderableInstance
private:
friend RenderableInstance *CreateRenderableInstance(Renderable *,MaterialInstance *,Pipeline *);
friend RenderableInstance *CreateRenderableInstance(Renderable *,MaterialParameters *,Pipeline *);
RenderableInstance(Renderable *,MaterialInstance *,Pipeline *,const uint32_t,VkBuffer *,VkDeviceSize *);
RenderableInstance(Renderable *,MaterialParameters *,Pipeline *,const uint32_t,VkBuffer *,VkDeviceSize *);
public:
virtual ~RenderableInstance();
Pipeline * GetPipeline (){return pipeline;}
MaterialInstance * GetMaterialInstance (){return mat_inst;}
MaterialParameters * GetMaterialInstance (){return mat_inst;}
Renderable * GetRenderable (){return render_obj;}
const AABB & GetBoundingBox ()const{return render_obj->GetBoundingBox();}
@ -95,6 +95,6 @@ public:
CompOperator(const RenderableInstance *,Comp)
};//class RenderableInstance
RenderableInstance *CreateRenderableInstance(Renderable *,MaterialInstance *,Pipeline *);
RenderableInstance *CreateRenderableInstance(Renderable *,MaterialParameters *,Pipeline *);
VK_NAMESPACE_END
#endif//HGL_GRAPH_RENDERABLE_INSTANCE_INCLUDE

View File

@ -55,11 +55,11 @@ enum class DescriptorSetsType
{
//设计使其对应shader中的sets
Material=0, ///<材质中永远不变的参数
MaterialTexture, ///<材质中的纹理参数
MaterialValues, ///<材质中的变量参数
RenderableInstance, ///<渲染实例参数
Global, ///<全局参数
Material=0, ///<材质中永远不变的参数
Texture, ///<材质中的纹理参数
Values, ///<材质中的变量参数
Renderable, ///<渲染实例参数(如Local2World matrix)
Global, ///<全局参数(如太阳光等)
};//
#ifndef VK_DESCRIPTOR_TYPE_BEGIN_RANGE

View File

@ -44,7 +44,7 @@ namespace hgl
}
{
MaterialInstance *mi=ri->GetMaterialInstance();
MaterialParameters *mi=ri->GetMaterialInstance();
if(mi!=last_mi)
{

View File

@ -18,8 +18,8 @@ int Comparator<RenderNodePointer>::compare(const RenderNodePointer &obj_one,cons
int off;
//比较材质
hgl::graph::MaterialInstance *mi1=obj_one->ri->GetMaterialInstance();
hgl::graph::MaterialInstance *mi2=obj_two->ri->GetMaterialInstance();
hgl::graph::MaterialParameters *mi1=obj_one->ri->GetMaterialInstance();
hgl::graph::MaterialParameters *mi2=obj_two->ri->GetMaterialInstance();
off=mi1->GetMaterial()-mi2->GetMaterial();

View File

@ -4,18 +4,18 @@
#include<hgl/graph/VKDescriptorSets.h>
VK_NAMESPACE_BEGIN
MaterialInstance::MaterialInstance(Material *m,DescriptorSets *ds)
MaterialParameters::MaterialParameters(Material *m,DescriptorSets *ds)
{
material=m;
descriptor_sets=ds;
}
MaterialInstance::~MaterialInstance()
MaterialParameters::~MaterialParameters()
{
delete descriptor_sets;
}
bool MaterialInstance::BindUBO(const AnsiString &name,GPUBuffer *ubo,bool dynamic)
bool MaterialParameters::BindUBO(const AnsiString &name,GPUBuffer *ubo,bool dynamic)
{
if(name.IsEmpty()||!ubo)
return(false);
@ -31,7 +31,7 @@ bool MaterialInstance::BindUBO(const AnsiString &name,GPUBuffer *ubo,bool dynami
return(true);
}
bool MaterialInstance::BindSSBO(const AnsiString &name,GPUBuffer *ssbo,bool dynamic)
bool MaterialParameters::BindSSBO(const AnsiString &name,GPUBuffer *ssbo,bool dynamic)
{
if(name.IsEmpty()||!ssbo)
return(false);
@ -47,7 +47,7 @@ bool MaterialInstance::BindSSBO(const AnsiString &name,GPUBuffer *ssbo,bool dyna
return(true);
}
bool MaterialInstance::BindSampler(const AnsiString &name,Texture *tex,Sampler *sampler)
bool MaterialParameters::BindSampler(const AnsiString &name,Texture *tex,Sampler *sampler)
{
if(name.IsEmpty()||!tex||!sampler)
return(false);
@ -63,17 +63,17 @@ bool MaterialInstance::BindSampler(const AnsiString &name,Texture *tex,Sampler *
return(true);
}
void MaterialInstance::Update()
void MaterialParameters::Update()
{
descriptor_sets->Update();
}
MaterialInstance *Material::CreateInstance()
MaterialParameters *Material::CreateInstance()
{
DescriptorSets *ds=CreateMIDescriptorSets();
if(!ds)return(nullptr);
return(new MaterialInstance(this,ds));
return(new MaterialParameters(this,ds));
}
VK_NAMESPACE_END

View File

@ -50,11 +50,11 @@ IndexBuffer *RenderResource::CreateIBO(IndexType index_type,uint32_t count,const
return(buf);
}
MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl)
MaterialParameters *RenderResource::CreateMaterialInstance(Material *mtl)
{
if(!mtl)return(nullptr);
MaterialInstance *mi=mtl->CreateInstance();
MaterialParameters *mi=mtl->CreateInstance();
if(mi)
Add(mi);
@ -62,7 +62,7 @@ MaterialInstance *RenderResource::CreateMaterialInstance(Material *mtl)
return mi;
}
MaterialInstance *RenderResource::CreateMaterialInstance(const OSString &mtl_filename)
MaterialParameters *RenderResource::CreateMaterialInstance(const OSString &mtl_filename)
{
Material *mtl=this->CreateMaterial(mtl_filename);
@ -96,7 +96,7 @@ TextRenderable *RenderResource::CreateTextRenderable(Material *mtl)
return tr;
}
RenderableInstance *RenderResource::CreateRenderableInstance(Renderable *r,MaterialInstance *mi,Pipeline *p)
RenderableInstance *RenderResource::CreateRenderableInstance(Renderable *r,MaterialParameters *mi,Pipeline *p)
{
if(!p||!mi||!r)
return(nullptr);

View File

@ -21,7 +21,7 @@ Pipeline *RenderTarget::CreatePipeline(Material *mtl,const InlinePipeline &ip,co
return p;
}
Pipeline *RenderTarget::CreatePipeline(MaterialInstance *mi,const InlinePipeline &ip,const Prim &prim,const bool prim_restart)
Pipeline *RenderTarget::CreatePipeline(MaterialParameters *mi,const InlinePipeline &ip,const Prim &prim,const bool prim_restart)
{
if(!mi)return(nullptr);
@ -40,7 +40,7 @@ Pipeline *RenderTarget::CreatePipeline(Material *mtl,PipelineData *pd,const Prim
return(p);
}
Pipeline *RenderTarget::CreatePipeline(MaterialInstance *mi,PipelineData *pd,const Prim &prim,const bool prim_restart)
Pipeline *RenderTarget::CreatePipeline(MaterialParameters *mi,PipelineData *pd,const Prim &prim,const bool prim_restart)
{
return CreatePipeline(mi->GetMaterial(),pd,prim,prim_restart);
}
@ -54,7 +54,7 @@ Pipeline *RenderTarget::CreatePipeline(Material *mtl,const OSString &pipeline_fi
return CreatePipeline(mtl,pd,prim,prim_restart);
}
Pipeline *RenderTarget::CreatePipeline(MaterialInstance *mi,const OSString &filename,const Prim &prim,const bool prim_restart)
Pipeline *RenderTarget::CreatePipeline(MaterialParameters *mi,const OSString &filename,const Prim &prim,const bool prim_restart)
{
return CreatePipeline(mi->GetMaterial(),filename,prim,prim_restart);
}

View File

@ -8,7 +8,7 @@ VK_NAMESPACE_BEGIN
using namespace util;
RenderableInstance::RenderableInstance(Renderable *r,MaterialInstance *mi,Pipeline *p,const uint32_t count,VkBuffer *bl,VkDeviceSize *bs)
RenderableInstance::RenderableInstance(Renderable *r,MaterialParameters *mi,Pipeline *p,const uint32_t count,VkBuffer *bl,VkDeviceSize *bs)
{
render_obj=r;
mat_inst=mi;
@ -35,7 +35,7 @@ RenderableInstance::~RenderableInstance()
delete[] buffer_size;
}
RenderableInstance *CreateRenderableInstance(Renderable *r,MaterialInstance *mi,Pipeline *p)
RenderableInstance *CreateRenderableInstance(Renderable *r,MaterialParameters *mi,Pipeline *p)
{
if(!r||!mi||!p)return(nullptr);