diff --git a/inc/hgl/graph/mtl/Material2DCreateConfig.h b/inc/hgl/graph/mtl/Material2DCreateConfig.h index 67c563d8..93c1ff0e 100644 --- a/inc/hgl/graph/mtl/Material2DCreateConfig.h +++ b/inc/hgl/graph/mtl/Material2DCreateConfig.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include @@ -51,6 +51,8 @@ public: return off; } + + const AnsiString ToHashString() override; };//struct Material2DCreateConfig:public MaterialCreateConfig DEFINE_MATERIAL_FACTORY_CLASS(VertexColor2D, const Material2DCreateConfig) diff --git a/inc/hgl/graph/mtl/Material3DCreateConfig.h b/inc/hgl/graph/mtl/Material3DCreateConfig.h index a4151b41..a84051ef 100644 --- a/inc/hgl/graph/mtl/Material3DCreateConfig.h +++ b/inc/hgl/graph/mtl/Material3DCreateConfig.h @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include @@ -49,6 +49,8 @@ public: return off; } + + const AnsiString ToHashString() override; };//struct Material3DCreateConfig:public MaterialCreateConfig DEFINE_MATERIAL_FACTORY_CLASS(VertexColor3D, const Material3DCreateConfig); diff --git a/inc/hgl/graph/mtl/MaterialConfig.h b/inc/hgl/graph/mtl/MaterialCreateConfig.h similarity index 96% rename from inc/hgl/graph/mtl/MaterialConfig.h rename to inc/hgl/graph/mtl/MaterialCreateConfig.h index 9d072147..a3e4a8eb 100644 --- a/inc/hgl/graph/mtl/MaterialConfig.h +++ b/inc/hgl/graph/mtl/MaterialCreateConfig.h @@ -52,5 +52,7 @@ public: return off; } + + virtual const AnsiString ToHashString(); };//struct MaterialCreateConfig STD_MTL_NAMESPACE_END diff --git a/inc/hgl/shadergen/MaterialCreateInfo.h b/inc/hgl/shadergen/MaterialCreateInfo.h index 90db7945..fc888305 100644 --- a/inc/hgl/shadergen/MaterialCreateInfo.h +++ b/inc/hgl/shadergen/MaterialCreateInfo.h @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/ShaderGen/MaterialCreateConfig.cpp b/src/ShaderGen/MaterialCreateConfig.cpp new file mode 100644 index 00000000..6ae70ed0 --- /dev/null +++ b/src/ShaderGen/MaterialCreateConfig.cpp @@ -0,0 +1,72 @@ +#include +#include +#include + +STD_MTL_NAMESPACE_BEGIN +const AnsiString MaterialCreateConfig::ToHashString() +{ + AnsiString hash; + + char str[16]; + char *p=str; + + *p='M';++p; + + if(material_instance){*p='I';++p;} + + *p='_';++p; + + *p='0'+rt_output.color;++p; + + if(rt_output.depth){*p='D';++p;} + if(rt_output.stencil){*p='S';++p;} + + *p='_';++p; + + if(shader_stage_flag_bit&VK_SHADER_STAGE_VERTEX_BIT){*p='V';++p;} + if(shader_stage_flag_bit&VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT){*p='T';++p;} //tc/te有一个就行了 + if(shader_stage_flag_bit&VK_SHADER_STAGE_GEOMETRY_BIT){*p='G';++p;} + if(shader_stage_flag_bit&VK_SHADER_STAGE_FRAGMENT_BIT){*p='F';++p;} + if(shader_stage_flag_bit&VK_SHADER_STAGE_COMPUTE_BIT){*p='C';++p;} + if(shader_stage_flag_bit&VK_SHADER_STAGE_MESH_BIT_EXT){*p='M';++p;} //mesh/task有一个就行了 + *p='_';++p; + + *p=0; + + hash=p; + hash+=GetPrimName(prim); + + return hash; +} + +const AnsiString Material2DCreateConfig::ToHashString() +{ + AnsiString hash=MaterialCreateConfig::ToHashString(); + + hash+=GetCoordinateSystem2DName(coordinate_system); + + if(local_to_world) + hash+="_L2W"; + + hash+="_"; + hash+=GetVertexAttribName(&position_format); + + return hash; +} + +const AnsiString Material3DCreateConfig::ToHashString() +{ + AnsiString hash=MaterialCreateConfig::ToHashString(); + + if(camera) + hash+="_Camera"; + + if(local_to_world) + hash+="_L2W"; + + hash+="_"; + hash+=GetVertexAttribName(&position_format); + + return hash; +} +STD_MTL_NAMESPACE_END