added PureColor2D.cpp

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-05-19 22:22:55 +08:00
parent 198fe55216
commit c485941342
10 changed files with 79 additions and 17 deletions

@ -1 +1 @@
Subproject commit b10387ad563ced36feb5cdd8eea3cdaed6e68bf6
Subproject commit f5cfe02eed045d84ee03a9e32d62029c71fec530

View File

@ -21,14 +21,14 @@ class TestApp:public CameraAppFramework
private:
SceneNode render_root;
RenderList *render_list=nullptr;
SceneNode render_root;
RenderList * render_list =nullptr;
Material * material =nullptr;
MaterialInstance * material_instance =nullptr;
Pipeline * pipeline =nullptr;
Primitive * ro_plane_grid[3];
Primitive * ro_plane_grid[3]{};
private:

View File

@ -7,7 +7,6 @@
#include<hgl/graph/VK.h>
STD_MTL_NAMESPACE_BEGIN
class MaterialCreateInfo;
/**

View File

@ -52,14 +52,20 @@ public:
MaterialCreateInfo(const MaterialConfig *);
~MaterialCreateInfo()=default;
bool SetMaterialInstance(const AnsiString &codes,const uint32_t length)
/**
*
* @param mi_glsl_codes GLSL代码
* @param mi_struct_bytes
* @return
*/
bool SetMaterialInstance(const AnsiString &mi_glsl_codes,const uint32_t mi_struct_bytes)
{
if(length>0&&codes.Length()<4)return(false);
if(mi_struct_bytes>0&&mi_glsl_codes.Length()<4)return(false);
mi_length=length;
mi_length=mi_struct_bytes;
if(length>0)
mi_codes=codes;
if(mi_struct_bytes>0)
mi_codes=mi_glsl_codes;
return(true);
}

View File

@ -65,7 +65,7 @@ namespace
// VK_EXT_HDR_METADATA_EXTENSION_NAME,
// VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME,
// VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME,
// VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME,
VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME,
// VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME,
};

View File

@ -220,7 +220,7 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
const ShaderCreateInfoVertex *vert=mci->GetVS();
if(vert)
{
{
sm=CreateShaderModule( mtl_name+OS_TEXT("?Vertex"),
VK_SHADER_STAGE_VERTEX_BIT,
vert->GetSPVData(),vert->GetSPVSize());

View File

@ -0,0 +1,57 @@
#include"Std2DMaterial.h"
#include<hgl/shadergen/MaterialCreateInfo.h>
STD_MTL_NAMESPACE_BEGIN
namespace
{
constexpr const char vs_main[]=R"(
void main()
{
HandoverMI(); //交接材质实例ID给下一个Shader
gl_Position=GetPosition2D();
})";
constexpr const char fs_main[]=R"(
void main()
{
MaterialInstance mi=GetMI();
Color=mi.Color;
})";
class MaterialPureColor2D:public Std2DMaterial
{
public:
using Std2DMaterial::Std2DMaterial;
~MaterialPureColor2D()=default;
bool CreateVertexShader(ShaderCreateInfoVertex *vsc) override
{
if(!Std2DMaterial::CreateVertexShader(vsc))
return(false);
vsc->AddFunction(vs_main);
return(true);
}
bool CreateFragmentShader(ShaderCreateInfoFragment *fsc) override
{
fsc->AddOutput(VAT_VEC4,"Color"); //Fragment shader的输出等于最终的RT了所以这个名称其实随便起。
fsc->AddFunction(fs_main);
return(true);
}
};//class MaterialPureColor2D:public Std2DMaterial
}//namespace
MaterialCreateInfo *CreatePureColor2D(const Material2DConfig *cfg)
{
MaterialPureColor2D mpc2d(cfg);
return mpc2d.Create();
}
STD_MTL_NAMESPACE_END

View File

@ -39,7 +39,7 @@ bool Std2DMaterial::CreateVertexShader(ShaderCreateInfoVertex *vsc)
return(true);
}
MaterialCreateInfo *Std2DMaterial::Create()
{
if(mci->hasVertex())

View File

@ -12,9 +12,8 @@ void main()
gl_Position=GetPosition2D();
})";
//一个shader中所有向下一个shader输出会被定义在一个名为Output的结构中。
//而同时这个Output结构会在下一个Shader中以Input名称出现使用。
//也就是说在此材质中VertexShader中的Output等于FragmentShader中的Input
//一个shader中输出的所有数据会被定义在一个名为Output的结构中。所以编写时要用Output.XXXX来使用。
//而同时这个结构在下一个Shader中以Input名称出现使用时以Input.XXX的形式使用。
constexpr const char fs_main[]=R"(
void main()

View File

@ -49,7 +49,8 @@ SET(STD_MTL_2D_HEADER_PATH ${STD_MTL_HEADER_PATH}/2d)
SET(STD_MTL_2D_SOURCE_FILES ${STD_MTL_2D_HEADER_PATH}/Material2DConfig.h
2d/Std2DMaterial.h
2d/Std2DMaterial.cpp
2d/VertexColor2D.cpp)
2d/VertexColor2D.cpp
2d/PureColor2D.cpp)
SET(STD_MTL_SOURCE ${STD_MTL_HEADER_PATH}/MaterialConfig.h
${STD_MTL_HEADER_PATH}/StdMaterial.h