added a standard material that it's VertexColor2DNDC.

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-03-21 21:01:16 +08:00
parent d26cae0086
commit 8bf1ad2a46
6 changed files with 190 additions and 136 deletions

View File

@ -8,7 +8,7 @@
#include<hgl/graph/SceneInfo.h> #include<hgl/graph/SceneInfo.h>
#include<hgl/graph/VKVertexInputConfig.h> #include<hgl/graph/VKVertexInputConfig.h>
#include<hgl/graph/VKRenderablePrimitiveCreater.h> #include<hgl/graph/VKRenderablePrimitiveCreater.h>
#include<hgl/shadergen/MaterialCreateInfo.h> #include<hgl/graph/mtl/2d/VertexColor2DNDC.h>
using namespace hgl; using namespace hgl;
using namespace hgl::graph; using namespace hgl::graph;
@ -98,45 +98,11 @@ private:
bool InitAutoMaterial() bool InitAutoMaterial()
{ {
MaterialCreateInfo mci("VertexColor2DNDC", ///<名称,随便起 auto *mci=mtl::CreateVertexColor2DNDC();
1, ///<最终一个RT输出
false); ///<无深度输出
//vertex部分 material_instance=db->CreateMaterialInstance(mci,&vil_config);
{
ShaderCreateInfoVertex *vsc=mci.GetVS();
vsc->AddInput(VAT_VEC2,VAN::Position); delete mci;
vsc->AddInput(VAT_VEC4,VAN::Color);
vsc->AddOutput(VAT_VEC4,"Color");
vsc->SetShaderCodes(R"(
void main()
{
Output.Color=Color;
gl_Position=vec4(Position,0,1);
})");
}
//fragment部分
{
ShaderCreateInfoFragment *fsc=mci.GetFS();
fsc->AddOutput(VAT_VEC4,"Color");
fsc->SetShaderCodes(R"(
void main()
{
Color=Input.Color;
})");
}
if(!mci.CreateShader())
return(false);
material_instance=db->CreateMaterialInstance(&mci,&vil_config);
return material_instance; return material_instance;
} }

View File

@ -0,0 +1,17 @@
#ifndef HGL_GRAPH_MTL_2D_VERTEX2DNDC_INCLUDE
#define HGL_GRAPH_MTL_2D_VERTEX2DNDC_INCLUDE
namespace hgl
{
namespace graph
{
class MaterialCreateInfo;
namespace mtl
{
MaterialCreateInfo *CreateVertexColor2DNDC();
}//namespace mtl
}//namespace graph
}//namespace hgl
#endif//HGL_GRAPH_MTL_2D_VERTEX2DNDC_INCLUDE

View File

@ -0,0 +1,6 @@
#pragma once
#define STD_MTL_NAMESPACE_BEGIN namespace hgl{namespace graph{namespace mtl{
#define STD_MTL_NAMESPACE_END }}}
#define STD_MTL_NAMESPACE_USING using namespace hgl::graph::mtl

View File

@ -1,104 +1,115 @@
#include<hgl/shadergen/ShaderDescriptorInfo.h> #include<hgl/shadergen/ShaderDescriptorInfo.h>
#include<hgl/CompOperator.h> #include<hgl/CompOperator.h>
namespace hgl{namespace graph{ namespace hgl{namespace graph
using ParamPreciseFlagBits=uint8;
using PPFB=ParamPreciseFlagBits;
constexpr const PPFB PPFB_None =0x00; ///<参数没有出现在任何地方
constexpr const PPFB PPFB_Global =0x01; ///<参数出现在全局(使用一个const值处理)
constexpr const PPFB PPFB_Vertex =0x02; ///<参数出现在顶点(在vertex shader使用一个顶点值处理)
constexpr const PPFB PPFB_Texture =0x04; ///<参数出现在纹理(在fragment shader使用一个纹理处理)
using TextureComponentFlagBits=uint8;
using TCFB=TextureComponentFlagBits;
constexpr const TCFB TCFB_Luminance =0x01; ///<亮度
constexpr const TCFB TCFB_Alpha =0x02; ///<透明度
constexpr const TCFB TCFB_Red =0x04; ///<红色
constexpr const TCFB TCFB_Green =0x08; ///<绿色
constexpr const TCFB TCFB_Blue =0x10; ///<蓝色
constexpr const TCFB TCFB_Cb =0x20; ///<Cb
constexpr const TCFB TCFB_Cr =0x40; ///<Cr
//constexpr const TCFB TCFB_NormalX =0x80;
//constexpr const TCFB TCFB_NormalY =0x100;
//constexpr const TCFB TCFB_NormalZ =0x200;
//constexpr const TCFB TCFB_Metallic =0x400;
//constexpr const TCFB TCFB_Roughness =0x800;
//constexpr const TCFB TCFB_AO =0x1000;
//constexpr const TCFB TCFB_Emissive =0x2000;
//constexpr const TCFB TCFB_Specular =0x4000;
//constexpr const TCFB TCFB_SpecularPower =0x8000;
constexpr const TCFB TCFB_RGB =TCFB_Red|TCFB_Green|TCFB_Blue;
constexpr const TCFB TCFB_RGBA =TCFB_RGB|TCFB_Alpha;
constexpr const TCFB TCFB_YCbCr =TCFB_Luminance|TCFB_Cb|TCFB_Cr;
constexpr const TCFB TCFB_YCbCrAlpha =TCFB_YCbCr|TCFB_Alpha;
constexpr const TCFB TCFB_LumAlpha =TCFB_Luminance|TCFB_Alpha;
constexpr const TCFB TCFB_LumRGB =TCFB_Luminance|TCFB_RGB;
//constexpr const TCFB TCFB_Normal2C =TCFB_NormalX|TCFB_NormalY;
//constexpr const TCFB TCFB_Normal =TCFB_Normal2C|TCFB_NormalZ;
/**
* Shader自动生成器
*/
struct StandardMaterial
{ {
};//struct StandardMaterial using ParamPreciseFlagBits=uint8;
using PPFB=ParamPreciseFlagBits;
/** constexpr const PPFB PPFB_None =0x00; ///<参数没有出现在任何地方
* 2D材质 constexpr const PPFB PPFB_Global =0x01; ///<参数出现在全局(使用一个const值处理)
*/ constexpr const PPFB PPFB_Vertex =0x02; ///<参数出现在顶点(在vertex shader使用一个顶点值处理)
struct Standard2DMaterial:public StandardMaterial constexpr const PPFB PPFB_Texture =0x04; ///<参数出现在纹理(在fragment shader使用一个纹理处理)
{
union using TextureComponentFlagBits=uint8;
using TCFB=TextureComponentFlagBits;
constexpr const TCFB TCFB_Luminance =0x01; ///<亮度
constexpr const TCFB TCFB_Alpha =0x02; ///<透明度
constexpr const TCFB TCFB_Red =0x04; ///<红色
constexpr const TCFB TCFB_Green =0x08; ///<绿色
constexpr const TCFB TCFB_Blue =0x10; ///<蓝色
constexpr const TCFB TCFB_Cb =0x20; ///<Cb
constexpr const TCFB TCFB_Cr =0x40; ///<Cr
//constexpr const TCFB TCFB_NormalX =0x80;
//constexpr const TCFB TCFB_NormalY =0x100;
//constexpr const TCFB TCFB_NormalZ =0x200;
//constexpr const TCFB TCFB_Metallic =0x400;
//constexpr const TCFB TCFB_Roughness =0x800;
//constexpr const TCFB TCFB_AO =0x1000;
//constexpr const TCFB TCFB_Emissive =0x2000;
//constexpr const TCFB TCFB_Specular =0x4000;
//constexpr const TCFB TCFB_SpecularPower =0x8000;
constexpr const TCFB TCFB_RGB =TCFB_Red|TCFB_Green|TCFB_Blue;
constexpr const TCFB TCFB_RGBA =TCFB_RGB|TCFB_Alpha;
constexpr const TCFB TCFB_YCbCr =TCFB_Luminance|TCFB_Cb|TCFB_Cr;
constexpr const TCFB TCFB_YCbCrAlpha =TCFB_YCbCr|TCFB_Alpha;
constexpr const TCFB TCFB_LumAlpha =TCFB_Luminance|TCFB_Alpha;
constexpr const TCFB TCFB_LumRGB =TCFB_Luminance|TCFB_RGB;
//constexpr const TCFB TCFB_Normal2C =TCFB_NormalX|TCFB_NormalY;
//constexpr const TCFB TCFB_Normal =TCFB_Normal2C|TCFB_NormalZ;
/**
* Shader自动生成器
*/
struct StandardMaterial
{ {
struct };//struct StandardMaterial
/**
* 2D材质
*/
struct Standard2DMaterial:public StandardMaterial
{
union
{ {
bool z_test :1; ///<是否进行Z测试 struct
bool z_write :1; ///<是否写入Z值 {
bool z_test :1; ///<是否进行Z测试
bool z_write :1; ///<是否写入Z值
bool ortho_matrix :1; ///<是否使用ortho坐标系 bool ortho_matrix :1; ///<是否使用ortho坐标系
bool position_matrix:1; ///<是否包含pos变换矩阵 bool position_matrix:1; ///<是否包含pos变换矩阵
bool color_uv :1; ///<是否包含颜色纹理坐标 bool color_uv :1; ///<是否包含颜色纹理坐标
bool color_uv_matrix:1; ///<是否包含颜色纹理坐标变换矩阵 bool color_uv_matrix:1; ///<是否包含颜色纹理坐标变换矩阵
bool alpha_uv :1; ///<是否包含透明纹理坐标 bool alpha_uv :1; ///<是否包含透明纹理坐标
bool alpha_uv_matrix:1; ///<是否包含透明纹理坐标变换矩阵 bool alpha_uv_matrix:1; ///<是否包含透明纹理坐标变换矩阵
}; };
uint8 flags; uint8 flags;
}vert; }vert;
union union
{
struct
{ {
bool discard:1; ///<是否使用discard struct
bool blur:1; ///<是否模糊 {
}; bool discard:1; ///<是否使用discard
}frag; bool blur:1; ///<是否模糊
};
}frag;
TCFB color_texture; ///<颜色纹理格式 TCFB color_texture; ///<颜色纹理格式
TCFB alpha_texture; ///<透明纹理格式(即便颜色纹理包含Alpha也有可能存在独立的alpha纹理) TCFB alpha_texture; ///<透明纹理格式(即便颜色纹理包含Alpha也有可能存在独立的alpha纹理)
PPFB color; ///<是否包含颜色缩放系数 PPFB color; ///<是否包含颜色缩放系数
PPFB alpha; ///<是否包含alpha缩放系数 PPFB alpha; ///<是否包含alpha缩放系数
uint8 color_format;
PPFB lum; ///<是否包含亮度调整 PPFB lum; ///<是否包含亮度调整
PPFB hue; ///<是否包含色调调整 PPFB hue; ///<是否包含色调调整
PPFB contrast; ///<是否包含对比度调整 PPFB contrast; ///<是否包含对比度调整
PPFB outline; ///<是否描边 PPFB outline; ///<是否描边
public: public:
CompOperatorMemcmp(const Standard2DMaterial &); CompOperatorMemcmp(const Standard2DMaterial &);
void Reset() void Reset()
{
hgl_zero(*this);
}
};//struct Standard2DMaterial:public StandardMaterial
struct Vertex2DNDCMaterial:public Standard2DMaterial
{ {
hgl_zero(*this); Vertex2DNDCMaterial()
} {
};//struct Standard2DMaterial:public StandardMaterial Reset();
color=PPFB_Vertex;
}
};
}}//namespace hgl::graph }}//namespace hgl::graph

View File

@ -0,0 +1,50 @@
#include<hgl/graph/mtl/StdMaterial.h>
#include<hgl/graph/VKMaterial.h>
#include<hgl/graph/VKDevice.h>
#include<hgl/shadergen/MaterialCreateInfo.h>
STD_MTL_NAMESPACE_BEGIN
MaterialCreateInfo *CreateVertexColor2DNDC()
{
MaterialCreateInfo *mci=new MaterialCreateInfo("VertexColor2DNDC", ///<名称,随便起
1, ///<最终一个RT输出
false); ///<无深度输出
//vertex部分
{
ShaderCreateInfoVertex *vsc=mci->GetVS();
vsc->AddInput(VAT_VEC2,VAN::Position);
vsc->AddInput(VAT_VEC4,VAN::Color);
vsc->AddOutput(VAT_VEC4,"Color");
vsc->SetShaderCodes(R"(
void main()
{
Output.Color=Color;
gl_Position=vec4(Position,0,1);
})");
}
//fragment部分
{
ShaderCreateInfoFragment *fsc=mci->GetFS();
fsc->AddOutput(VAT_VEC4,"Color");
fsc->SetShaderCodes(R"(
void main()
{
Color=Input.Color;
})");
}
if(mci->CreateShader())
return mci;
delete mci;
return(nullptr);
}
STD_MTL_NAMESPACE_END

View File

@ -1,6 +1,5 @@
set(SHADERGEN_INCLUDE_PATH ${ROOT_INCLUDE_PATH}/hgl/shadergen) set(SHADERGEN_INCLUDE_PATH ${ROOT_INCLUDE_PATH}/hgl/shadergen)
SET(SHADER_CREATER_HEADER_FILES ${SHADERGEN_INCLUDE_PATH}/ShaderCreateInfo.h SET(SHADER_CREATER_HEADER_FILES ${SHADERGEN_INCLUDE_PATH}/ShaderCreateInfo.h
${SHADERGEN_INCLUDE_PATH}/ShaderCreateInfoMap.h ${SHADERGEN_INCLUDE_PATH}/ShaderCreateInfoMap.h
${SHADERGEN_INCLUDE_PATH}/ShaderCreateInfoVertex.h ${SHADERGEN_INCLUDE_PATH}/ShaderCreateInfoVertex.h
@ -21,35 +20,40 @@ SET(MATERIAL_CREATE_INFO_SOURCE_FILES MaterialCreateInfo.cpp)
SOURCE_GROUP("Material Create Info" FILES ${MATERIAL_CREATE_INFO_HEADER_FILES} SOURCE_GROUP("Material Create Info" FILES ${MATERIAL_CREATE_INFO_HEADER_FILES}
${MATERIAL_CREATE_INFO_SOURCE_FILES}) ${MATERIAL_CREATE_INFO_SOURCE_FILES})
SET(SHADERGEN_HEADER_FILES ${SHADERGEN_INCLUDE_PATH}/ShaderDescriptorInfo.h SET(DESC_INFO_HEADER_FILES ${SHADERGEN_INCLUDE_PATH}/ShaderDescriptorInfo.h
${SHADERGEN_INCLUDE_PATH}/MaterialDescriptorInfo.h) ${SHADERGEN_INCLUDE_PATH}/MaterialDescriptorInfo.h)
SET(SHADERGEN_SOURCE_FILES SET(DESC_INFO_SOURCE_FILES ShaderDescriptorInfo.cpp
#PMC.cpp MaterialDescriptorInfo.cpp)
# VertexPolicy.cpp
ShaderDescriptorInfo.cpp SOURCE_GROUP("Material Create Info\\Descriptor Info" FILES ${DESC_INFO_HEADER_FILES}
MaterialDescriptorInfo.cpp ${DESC_INFO_SOURCE_FILES})
)
SET(GLSL_COMPILER_SOURCE GLSLCompiler.h SET(GLSL_COMPILER_SOURCE GLSLCompiler.h
GLSLCompiler.cpp) GLSLCompiler.cpp)
SOURCE_GROUP("GLSL Compiler" FILES ${GLSL_COMPILER_SOURCE}) SOURCE_GROUP("GLSL Compiler" FILES ${GLSL_COMPILER_SOURCE})
SOURCE_GROUP("Material Create Info\\Descriptor Info" FILES ${SHADERGEN_HEADER_FILES}
${SHADERGEN_SOURCE_FILES})
SET(STANDARD_MATERIAL_SOURCE ${SHADERGEN_INCLUDE_PATH}/StandardMaterial.h set(STD_MTL_HEADER_PATH ${ROOT_INCLUDE_PATH}/hgl/graph/mtl)
StandardMaterial.cpp)
SET(STD_MTL_2D_HEADER_PATH ${STD_MTL_HEADER_PATH}/2d)
SET(STD_MTL_2D_SOURCE_FILES ${STD_MTL_2D_HEADER_PATH}/VertexColor2DNDC.h
2d/VertexColor2DNDC.cpp)
SET(STANDARD_MATERIAL_SOURCE ${STD_MTL_HEADER_PATH}/StdMaterial.h)
SOURCE_GROUP("Standard Material" FILES ${STANDARD_MATERIAL_SOURCE}) SOURCE_GROUP("Standard Material" FILES ${STANDARD_MATERIAL_SOURCE})
SOURCE_GROUP("Standard Material\\2D" FILES ${STD_MTL_2D_SOURCE_FILES})
add_cm_library(ULRE.ShaderGen "ULRE" ${SHADERGEN_HEADER_FILES} add_cm_library(ULRE.ShaderGen "ULRE" ${DESC_INFO_HEADER_FILES}
${SHADERGEN_SOURCE_FILES} ${DESC_INFO_SOURCE_FILES}
${MATERIAL_CREATE_INFO_HEADER_FILES} ${MATERIAL_CREATE_INFO_HEADER_FILES}
${MATERIAL_CREATE_INFO_SOURCE_FILES} ${MATERIAL_CREATE_INFO_SOURCE_FILES}
${SHADER_CREATER_HEADER_FILES} ${SHADER_CREATER_HEADER_FILES}
${SHADER_CREATER_SOURCE_FILES} ${SHADER_CREATER_SOURCE_FILES}
${GLSL_COMPILER_SOURCE} ${GLSL_COMPILER_SOURCE}
${STANDARD_MATERIAL_SOURCE} ${STANDARD_MATERIAL_SOURCE}
${STD_MTL_2D_SOURCE_FILES}
) )