初步实现CreateMaterialCreateInfo(name,cfg,vil),下一待整合进WorkObject/WorkManager后正式启用。
This commit is contained in:
parent
9be5de0f57
commit
e88facf834
2
CMCore
2
CMCore
@ -1 +1 @@
|
||||
Subproject commit 3f44011ea2894e618c8fdd361e3b7f7260bf7a04
|
||||
Subproject commit b4d1bd17a9a85feb5f13cc6fac201f4f75942f70
|
@ -1,5 +1,4 @@
|
||||
#ifndef HGL_GRAPH_MTL_CONFIG_INCLUDE
|
||||
#define HGL_GRAPH_MTL_CONFIG_INCLUDE
|
||||
#pragma once
|
||||
|
||||
#include<hgl/graph/mtl/StdMaterial.h>
|
||||
#include<hgl/type/String.h>
|
||||
@ -15,17 +14,17 @@ class MaterialCreateInfo;
|
||||
*/
|
||||
struct MaterialCreateConfig:public Comparator<MaterialCreateConfig>
|
||||
{
|
||||
const GPUDeviceAttribute *dev_attr;
|
||||
const GPUDeviceAttribute * dev_attr; ///<GPU设备属性(目前仅用于获取UBO/SSBO数值,未来可以考虑干掉)
|
||||
|
||||
AnsiString mtl_name; ///<材质名称
|
||||
AnsiString mtl_name; ///<材质名称
|
||||
|
||||
bool material_instance; ///<是否包含材质实例
|
||||
bool material_instance; ///<是否包含材质实例
|
||||
|
||||
RenderTargetOutputConfig rt_output; ///<渲染目标输出配置
|
||||
RenderTargetOutputConfig rt_output; ///<渲染目标输出配置
|
||||
|
||||
uint32 shader_stage_flag_bit; ///<需要的shader
|
||||
uint32 shader_stage_flag_bit; ///<需要的shader
|
||||
|
||||
PrimitiveType prim; ///<图元类型
|
||||
PrimitiveType prim; ///<图元类型
|
||||
|
||||
public:
|
||||
|
||||
@ -61,4 +60,3 @@ public:
|
||||
}
|
||||
};//struct MaterialCreateConfig
|
||||
STD_MTL_NAMESPACE_END
|
||||
#endif//HGL_GRAPH_MTL_CONFIG_INCLUDE
|
||||
|
@ -2,35 +2,18 @@
|
||||
|
||||
#include<hgl/graph/VK.h>
|
||||
#include<hgl/graph/mtl/StdMaterial.h>
|
||||
#include<hgl/type/IDName.h>
|
||||
#include<hgl/type/String.h>
|
||||
|
||||
STD_MTL_NAMESPACE_BEGIN
|
||||
|
||||
enum class MaterialDomain
|
||||
{
|
||||
UI, ///<用户界面,一般2D均使用这种
|
||||
|
||||
Gizmo, ///<Gizmo材质(基本同Surface,但很多数值和处理逻辑会写死)
|
||||
|
||||
Surface, ///<常规的3D表面材质
|
||||
DeferredDecal, ///<延迟贴花材质
|
||||
|
||||
PostProcess, ///<后期处理材质
|
||||
|
||||
ENUM_CLASS_RANGE(UI,PostProcess)
|
||||
};
|
||||
|
||||
class MaterialFactory
|
||||
{
|
||||
public:
|
||||
|
||||
virtual AIDName GetName()const=0;
|
||||
virtual AnsiString GetName()const=0;
|
||||
|
||||
//virtual const bool GetMaterialName()const=0;
|
||||
|
||||
virtual const MaterialDomain GetDomain()const=0;
|
||||
|
||||
//virtual const PrimitiveType supportPrimitive()const=0;
|
||||
|
||||
//virtual const bool is2D()const=0;
|
||||
@ -41,13 +24,12 @@ public:
|
||||
|
||||
//virtual const CoordinateSystem2D get2DCoordinateSystem()const=0;
|
||||
|
||||
virtual MaterialCreateInfo *Create();
|
||||
virtual MaterialCreateInfo *Create(MaterialCreateConfig *);
|
||||
|
||||
};//class MaterialFactory
|
||||
|
||||
bool RegistryMaterialFactory(MaterialFactory *);
|
||||
MaterialFactory *GetMaterialFactory(const AIDName &);
|
||||
void ClearMaterialFactory();
|
||||
bool RegistryMaterialFactory(MaterialFactory *);
|
||||
MaterialFactory * GetMaterialFactory(const AnsiString &);
|
||||
|
||||
template<typename T> class RegistryMaterialFactoryClass
|
||||
{
|
||||
@ -61,10 +43,6 @@ public:
|
||||
|
||||
#define DEFINE_MATERIAL_FACTORY(name) namespace{static RegistryMaterialFactoryClass<MaterialFactory##name> MaterialFactoryInstance_##name;}
|
||||
|
||||
struct Material2DCreateConfig;
|
||||
struct Material3DCreateConfig;
|
||||
|
||||
Material *CreateMaterial2D(const AnsiString &,Material2DCreateConfig *cfg=nullptr);
|
||||
Material *CreateMaterial3D(const AnsiString &,Material3DCreateConfig *cfg=nullptr);
|
||||
MaterialCreateInfo *CreateMaterialCreateInfo(const AnsiString &,MaterialCreateConfig *cfg=nullptr,const VILConfig *vil_cfg=nullptr);
|
||||
|
||||
STD_MTL_NAMESPACE_END
|
||||
|
@ -16,6 +16,11 @@ VK_NAMESPACE_BEGIN
|
||||
bool InitShaderCompiler();
|
||||
void CloseShaderCompiler();
|
||||
|
||||
namespace mtl
|
||||
{
|
||||
void ClearMaterialFactory();
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
static int RENDER_FRAMEWORK_COUNT=0;
|
||||
@ -49,6 +54,7 @@ RenderFramework::~RenderFramework()
|
||||
|
||||
if(RENDER_FRAMEWORK_COUNT==0)
|
||||
{
|
||||
STD_MTL_NAMESPACE::ClearMaterialFactory();
|
||||
CloseShaderCompiler();
|
||||
}
|
||||
}
|
||||
|
@ -75,9 +75,9 @@ public:
|
||||
return "VertexColor2D";
|
||||
}
|
||||
|
||||
MaterialCreateInfo *Create() override
|
||||
MaterialCreateInfo *Create(MaterialCreateConfig *cfg) override
|
||||
{
|
||||
return CreateVertexColor2D(nullptr);
|
||||
return CreateVertexColor2D((Material2DCreateConfig *)cfg);
|
||||
}
|
||||
};//class MaterialFactoryVertexColor2D:public MaterialFactory
|
||||
|
||||
|
@ -239,7 +239,7 @@ bool MaterialCreateInfo::CreateShader()
|
||||
if(!shader_map.GetValue(i,sc))
|
||||
return(false);
|
||||
|
||||
if(sc->GetShaderStage()<mi_shader_stage)
|
||||
if(static_cast<uint32_t>(sc->GetShaderStage())<mi_shader_stage)
|
||||
sc->AddMaterialInstanceOutput();
|
||||
|
||||
sc->CreateShader(last);
|
||||
|
@ -6,9 +6,10 @@ STD_MTL_NAMESPACE_BEGIN
|
||||
|
||||
namespace
|
||||
{
|
||||
using MaterialFactoryMap=tsl::robin_map<AIDName,MaterialFactory *>;
|
||||
using MaterialFactoryMap=tsl::robin_map<AnsiString,MaterialFactory *>;
|
||||
using MaterialFactoryMapPtr=MaterialFactoryMap *;
|
||||
|
||||
MaterialFactoryMap *material_factory_map=nullptr;
|
||||
MaterialFactoryMapPtr material_factory_map=nullptr;
|
||||
}//namespace
|
||||
|
||||
bool RegistryMaterialFactory(MaterialFactory *mf)
|
||||
@ -16,7 +17,7 @@ bool RegistryMaterialFactory(MaterialFactory *mf)
|
||||
if(!mf)
|
||||
return(false);
|
||||
|
||||
const AIDName name=mf->GetName();
|
||||
const AnsiString &name=mf->GetName();
|
||||
|
||||
if(!material_factory_map)
|
||||
{
|
||||
@ -28,14 +29,10 @@ bool RegistryMaterialFactory(MaterialFactory *mf)
|
||||
|
||||
material_factory_map->insert({name,mf});
|
||||
|
||||
const MaterialDomain &domain=mf->GetDomain();
|
||||
|
||||
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
MaterialFactory *GetMaterialFactory(const AIDName &name)
|
||||
MaterialFactory *GetMaterialFactory(const AnsiString &name)
|
||||
{
|
||||
if(!material_factory_map)
|
||||
return(nullptr);
|
||||
@ -59,9 +56,17 @@ void ClearMaterialFactory()
|
||||
material_factory_map=nullptr;
|
||||
}
|
||||
|
||||
Material *CreateMaterial2D(const AnsiString &name,Material2DCreateConfig *cfg)
|
||||
MaterialCreateInfo *CreateMaterialCreateInfo(const AnsiString &name,MaterialCreateConfig *cfg,const VILConfig *vil_cfg)
|
||||
{
|
||||
if(name.IsEmpty())
|
||||
return(nullptr);
|
||||
|
||||
MaterialFactory *mf=GetMaterialFactory(name);
|
||||
|
||||
if(!mf)
|
||||
return(nullptr);
|
||||
|
||||
return mf->Create(cfg);
|
||||
}
|
||||
|
||||
STD_MTL_NAMESPACE_END
|
||||
|
Loading…
x
Reference in New Issue
Block a user