diff --git a/example/Vulkan/first_triangle.cpp b/example/Vulkan/first_triangle.cpp index 4deb9db6..a5344e5f 100644 --- a/example/Vulkan/first_triangle.cpp +++ b/example/Vulkan/first_triangle.cpp @@ -8,7 +8,7 @@ #include #include #include -#include +#include using namespace hgl; using namespace hgl::graph; @@ -98,45 +98,11 @@ private: bool InitAutoMaterial() { - MaterialCreateInfo mci("VertexColor2DNDC", ///<名称,随便起 - 1, ///<最终一个RT输出 - false); ///<无深度输出 + auto *mci=mtl::CreateVertexColor2DNDC(); - //vertex部分 - { - ShaderCreateInfoVertex *vsc=mci.GetVS(); + material_instance=db->CreateMaterialInstance(mci,&vil_config); - 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(false); - - material_instance=db->CreateMaterialInstance(&mci,&vil_config); + delete mci; return material_instance; } diff --git a/inc/hgl/graph/mtl/2d/VertexColor2DNDC.h b/inc/hgl/graph/mtl/2d/VertexColor2DNDC.h new file mode 100644 index 00000000..2d40d155 --- /dev/null +++ b/inc/hgl/graph/mtl/2d/VertexColor2DNDC.h @@ -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 diff --git a/inc/hgl/graph/mtl/StdMaterial.h b/inc/hgl/graph/mtl/StdMaterial.h new file mode 100644 index 00000000..6834ff34 --- /dev/null +++ b/inc/hgl/graph/mtl/StdMaterial.h @@ -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 diff --git a/inc/hgl/shadergen/StandardMaterial.h b/inc/hgl/shadergen/StandardMaterial.h index f75a8fe0..819c9aac 100644 --- a/inc/hgl/shadergen/StandardMaterial.h +++ b/inc/hgl/shadergen/StandardMaterial.h @@ -1,104 +1,115 @@ #include #include -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; /// +#include +#include +#include + +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 diff --git a/src/ShaderGen/CMakeLists.txt b/src/ShaderGen/CMakeLists.txt index e73fce9b..71987361 100644 --- a/src/ShaderGen/CMakeLists.txt +++ b/src/ShaderGen/CMakeLists.txt @@ -1,6 +1,5 @@ set(SHADERGEN_INCLUDE_PATH ${ROOT_INCLUDE_PATH}/hgl/shadergen) - SET(SHADER_CREATER_HEADER_FILES ${SHADERGEN_INCLUDE_PATH}/ShaderCreateInfo.h ${SHADERGEN_INCLUDE_PATH}/ShaderCreateInfoMap.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} ${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) -SET(SHADERGEN_SOURCE_FILES -#PMC.cpp -# VertexPolicy.cpp - ShaderDescriptorInfo.cpp - MaterialDescriptorInfo.cpp -) +SET(DESC_INFO_SOURCE_FILES ShaderDescriptorInfo.cpp + MaterialDescriptorInfo.cpp) + +SOURCE_GROUP("Material Create Info\\Descriptor Info" FILES ${DESC_INFO_HEADER_FILES} + ${DESC_INFO_SOURCE_FILES}) SET(GLSL_COMPILER_SOURCE GLSLCompiler.h GLSLCompiler.cpp) 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 - StandardMaterial.cpp) +set(STD_MTL_HEADER_PATH ${ROOT_INCLUDE_PATH}/hgl/graph/mtl) + +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\\2D" FILES ${STD_MTL_2D_SOURCE_FILES}) -add_cm_library(ULRE.ShaderGen "ULRE" ${SHADERGEN_HEADER_FILES} - ${SHADERGEN_SOURCE_FILES} +add_cm_library(ULRE.ShaderGen "ULRE" ${DESC_INFO_HEADER_FILES} + ${DESC_INFO_SOURCE_FILES} ${MATERIAL_CREATE_INFO_HEADER_FILES} ${MATERIAL_CREATE_INFO_SOURCE_FILES} ${SHADER_CREATER_HEADER_FILES} ${SHADER_CREATER_SOURCE_FILES} ${GLSL_COMPILER_SOURCE} ${STANDARD_MATERIAL_SOURCE} + ${STD_MTL_2D_SOURCE_FILES} )