初步实现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
|
#pragma once
|
||||||
#define HGL_GRAPH_MTL_CONFIG_INCLUDE
|
|
||||||
|
|
||||||
#include<hgl/graph/mtl/StdMaterial.h>
|
#include<hgl/graph/mtl/StdMaterial.h>
|
||||||
#include<hgl/type/String.h>
|
#include<hgl/type/String.h>
|
||||||
@ -15,7 +14,7 @@ class MaterialCreateInfo;
|
|||||||
*/
|
*/
|
||||||
struct MaterialCreateConfig:public Comparator<MaterialCreateConfig>
|
struct MaterialCreateConfig:public Comparator<MaterialCreateConfig>
|
||||||
{
|
{
|
||||||
const GPUDeviceAttribute *dev_attr;
|
const GPUDeviceAttribute * dev_attr; ///<GPU设备属性(目前仅用于获取UBO/SSBO数值,未来可以考虑干掉)
|
||||||
|
|
||||||
AnsiString mtl_name; ///<材质名称
|
AnsiString mtl_name; ///<材质名称
|
||||||
|
|
||||||
@ -61,4 +60,3 @@ public:
|
|||||||
}
|
}
|
||||||
};//struct MaterialCreateConfig
|
};//struct MaterialCreateConfig
|
||||||
STD_MTL_NAMESPACE_END
|
STD_MTL_NAMESPACE_END
|
||||||
#endif//HGL_GRAPH_MTL_CONFIG_INCLUDE
|
|
||||||
|
@ -2,35 +2,18 @@
|
|||||||
|
|
||||||
#include<hgl/graph/VK.h>
|
#include<hgl/graph/VK.h>
|
||||||
#include<hgl/graph/mtl/StdMaterial.h>
|
#include<hgl/graph/mtl/StdMaterial.h>
|
||||||
#include<hgl/type/IDName.h>
|
|
||||||
#include<hgl/type/String.h>
|
#include<hgl/type/String.h>
|
||||||
|
|
||||||
STD_MTL_NAMESPACE_BEGIN
|
STD_MTL_NAMESPACE_BEGIN
|
||||||
|
|
||||||
enum class MaterialDomain
|
|
||||||
{
|
|
||||||
UI, ///<用户界面,一般2D均使用这种
|
|
||||||
|
|
||||||
Gizmo, ///<Gizmo材质(基本同Surface,但很多数值和处理逻辑会写死)
|
|
||||||
|
|
||||||
Surface, ///<常规的3D表面材质
|
|
||||||
DeferredDecal, ///<延迟贴花材质
|
|
||||||
|
|
||||||
PostProcess, ///<后期处理材质
|
|
||||||
|
|
||||||
ENUM_CLASS_RANGE(UI,PostProcess)
|
|
||||||
};
|
|
||||||
|
|
||||||
class MaterialFactory
|
class MaterialFactory
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
virtual AIDName GetName()const=0;
|
virtual AnsiString GetName()const=0;
|
||||||
|
|
||||||
//virtual const bool GetMaterialName()const=0;
|
//virtual const bool GetMaterialName()const=0;
|
||||||
|
|
||||||
virtual const MaterialDomain GetDomain()const=0;
|
|
||||||
|
|
||||||
//virtual const PrimitiveType supportPrimitive()const=0;
|
//virtual const PrimitiveType supportPrimitive()const=0;
|
||||||
|
|
||||||
//virtual const bool is2D()const=0;
|
//virtual const bool is2D()const=0;
|
||||||
@ -41,13 +24,12 @@ public:
|
|||||||
|
|
||||||
//virtual const CoordinateSystem2D get2DCoordinateSystem()const=0;
|
//virtual const CoordinateSystem2D get2DCoordinateSystem()const=0;
|
||||||
|
|
||||||
virtual MaterialCreateInfo *Create();
|
virtual MaterialCreateInfo *Create(MaterialCreateConfig *);
|
||||||
|
|
||||||
};//class MaterialFactory
|
};//class MaterialFactory
|
||||||
|
|
||||||
bool RegistryMaterialFactory(MaterialFactory *);
|
bool RegistryMaterialFactory(MaterialFactory *);
|
||||||
MaterialFactory *GetMaterialFactory(const AIDName &);
|
MaterialFactory * GetMaterialFactory(const AnsiString &);
|
||||||
void ClearMaterialFactory();
|
|
||||||
|
|
||||||
template<typename T> class RegistryMaterialFactoryClass
|
template<typename T> class RegistryMaterialFactoryClass
|
||||||
{
|
{
|
||||||
@ -61,10 +43,6 @@ public:
|
|||||||
|
|
||||||
#define DEFINE_MATERIAL_FACTORY(name) namespace{static RegistryMaterialFactoryClass<MaterialFactory##name> MaterialFactoryInstance_##name;}
|
#define DEFINE_MATERIAL_FACTORY(name) namespace{static RegistryMaterialFactoryClass<MaterialFactory##name> MaterialFactoryInstance_##name;}
|
||||||
|
|
||||||
struct Material2DCreateConfig;
|
MaterialCreateInfo *CreateMaterialCreateInfo(const AnsiString &,MaterialCreateConfig *cfg=nullptr,const VILConfig *vil_cfg=nullptr);
|
||||||
struct Material3DCreateConfig;
|
|
||||||
|
|
||||||
Material *CreateMaterial2D(const AnsiString &,Material2DCreateConfig *cfg=nullptr);
|
|
||||||
Material *CreateMaterial3D(const AnsiString &,Material3DCreateConfig *cfg=nullptr);
|
|
||||||
|
|
||||||
STD_MTL_NAMESPACE_END
|
STD_MTL_NAMESPACE_END
|
||||||
|
@ -16,6 +16,11 @@ VK_NAMESPACE_BEGIN
|
|||||||
bool InitShaderCompiler();
|
bool InitShaderCompiler();
|
||||||
void CloseShaderCompiler();
|
void CloseShaderCompiler();
|
||||||
|
|
||||||
|
namespace mtl
|
||||||
|
{
|
||||||
|
void ClearMaterialFactory();
|
||||||
|
}
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
static int RENDER_FRAMEWORK_COUNT=0;
|
static int RENDER_FRAMEWORK_COUNT=0;
|
||||||
@ -49,6 +54,7 @@ RenderFramework::~RenderFramework()
|
|||||||
|
|
||||||
if(RENDER_FRAMEWORK_COUNT==0)
|
if(RENDER_FRAMEWORK_COUNT==0)
|
||||||
{
|
{
|
||||||
|
STD_MTL_NAMESPACE::ClearMaterialFactory();
|
||||||
CloseShaderCompiler();
|
CloseShaderCompiler();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -75,9 +75,9 @@ public:
|
|||||||
return "VertexColor2D";
|
return "VertexColor2D";
|
||||||
}
|
}
|
||||||
|
|
||||||
MaterialCreateInfo *Create() override
|
MaterialCreateInfo *Create(MaterialCreateConfig *cfg) override
|
||||||
{
|
{
|
||||||
return CreateVertexColor2D(nullptr);
|
return CreateVertexColor2D((Material2DCreateConfig *)cfg);
|
||||||
}
|
}
|
||||||
};//class MaterialFactoryVertexColor2D:public MaterialFactory
|
};//class MaterialFactoryVertexColor2D:public MaterialFactory
|
||||||
|
|
||||||
|
@ -239,7 +239,7 @@ bool MaterialCreateInfo::CreateShader()
|
|||||||
if(!shader_map.GetValue(i,sc))
|
if(!shader_map.GetValue(i,sc))
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
if(sc->GetShaderStage()<mi_shader_stage)
|
if(static_cast<uint32_t>(sc->GetShaderStage())<mi_shader_stage)
|
||||||
sc->AddMaterialInstanceOutput();
|
sc->AddMaterialInstanceOutput();
|
||||||
|
|
||||||
sc->CreateShader(last);
|
sc->CreateShader(last);
|
||||||
|
@ -6,9 +6,10 @@ STD_MTL_NAMESPACE_BEGIN
|
|||||||
|
|
||||||
namespace
|
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
|
}//namespace
|
||||||
|
|
||||||
bool RegistryMaterialFactory(MaterialFactory *mf)
|
bool RegistryMaterialFactory(MaterialFactory *mf)
|
||||||
@ -16,7 +17,7 @@ bool RegistryMaterialFactory(MaterialFactory *mf)
|
|||||||
if(!mf)
|
if(!mf)
|
||||||
return(false);
|
return(false);
|
||||||
|
|
||||||
const AIDName name=mf->GetName();
|
const AnsiString &name=mf->GetName();
|
||||||
|
|
||||||
if(!material_factory_map)
|
if(!material_factory_map)
|
||||||
{
|
{
|
||||||
@ -28,14 +29,10 @@ bool RegistryMaterialFactory(MaterialFactory *mf)
|
|||||||
|
|
||||||
material_factory_map->insert({name,mf});
|
material_factory_map->insert({name,mf});
|
||||||
|
|
||||||
const MaterialDomain &domain=mf->GetDomain();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return(true);
|
return(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
MaterialFactory *GetMaterialFactory(const AIDName &name)
|
MaterialFactory *GetMaterialFactory(const AnsiString &name)
|
||||||
{
|
{
|
||||||
if(!material_factory_map)
|
if(!material_factory_map)
|
||||||
return(nullptr);
|
return(nullptr);
|
||||||
@ -59,9 +56,17 @@ void ClearMaterialFactory()
|
|||||||
material_factory_map=nullptr;
|
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
|
STD_MTL_NAMESPACE_END
|
||||||
|
Loading…
x
Reference in New Issue
Block a user