增加内嵌PureColor3D材质
This commit is contained in:
@@ -25,7 +25,7 @@ public:
|
||||
:MaterialCreateConfig(p)
|
||||
{
|
||||
rt_output.color=1; //输出一个颜色
|
||||
rt_output.depth=true; //不输出深度
|
||||
rt_output.depth=true; //输出深度
|
||||
rt_output.stencil=false; //不输出stencil
|
||||
|
||||
camera=(wc==WithCamera::With);
|
||||
@@ -56,6 +56,7 @@ public:
|
||||
const AnsiString ToHashString() override;
|
||||
};//struct Material3DCreateConfig:public MaterialCreateConfig
|
||||
|
||||
DEFINE_MATERIAL_FACTORY_CLASS(PureColor3D, const Material3DCreateConfig);
|
||||
DEFINE_MATERIAL_FACTORY_CLASS(VertexColor3D, const Material3DCreateConfig);
|
||||
DEFINE_MATERIAL_FACTORY_CLASS(VertexLuminance3D,const Material3DCreateConfig);
|
||||
DEFINE_MATERIAL_FACTORY_CLASS(Gizmo3D, const Material3DCreateConfig);
|
||||
|
75
src/ShaderGen/3d/M_PureColor3D.cpp
Normal file
75
src/ShaderGen/3d/M_PureColor3D.cpp
Normal file
@@ -0,0 +1,75 @@
|
||||
#include"Std3DMaterial.h"
|
||||
#include<hgl/shadergen/MaterialCreateInfo.h>
|
||||
|
||||
STD_MTL_NAMESPACE_BEGIN
|
||||
namespace
|
||||
{
|
||||
constexpr const char mi_codes[]="vec4 Color;"; //材质实例代码
|
||||
constexpr const uint32_t mi_bytes=sizeof(Vector4f); //材质实例数据大小
|
||||
|
||||
constexpr const char vs_main[]=R"(
|
||||
void main()
|
||||
{
|
||||
MaterialInstance mi=GetMI();
|
||||
|
||||
Output.Color=mi.Color;
|
||||
|
||||
gl_Position=GetPosition3D();
|
||||
})";
|
||||
|
||||
//一个shader中输出的所有数据,会被定义在一个名为Output的结构中。所以编写时要用Output.XXXX来使用。
|
||||
//而同时,这个结构在下一个Shader中以Input名称出现,使用时以Input.XXX的形式使用。
|
||||
|
||||
constexpr const char fs_main[]=R"(
|
||||
void main()
|
||||
{
|
||||
FragColor=Input.Color;
|
||||
})";// ^ ^
|
||||
// | |
|
||||
// | +--ps:这里的Input.Color就是上一个Shader中的Output.Color
|
||||
// +--ps:这里的Color就是最终的RT
|
||||
|
||||
class MaterialPureColor3D:public Std3DMaterial
|
||||
{
|
||||
public:
|
||||
|
||||
using Std3DMaterial::Std3DMaterial;
|
||||
~MaterialPureColor3D()=default;
|
||||
|
||||
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override
|
||||
{
|
||||
if(!Std3DMaterial::CustomVertexShader(vsc))
|
||||
return(false);
|
||||
|
||||
vsc->AddOutput(SVT_VEC4,"Color");
|
||||
|
||||
vsc->SetMain(vs_main);
|
||||
return(true);
|
||||
}
|
||||
|
||||
bool CustomFragmentShader(ShaderCreateInfoFragment *fsc) override
|
||||
{
|
||||
fsc->AddOutput(VAT_VEC4,"FragColor"); //Fragment shader的输出等于最终的RT了,所以这个名称其实随便起。
|
||||
|
||||
fsc->SetMain(fs_main);
|
||||
return(true);
|
||||
}
|
||||
|
||||
bool EndCustomShader() override
|
||||
{
|
||||
mci->SetMaterialInstance( mi_codes, //材质实例glsl代码
|
||||
mi_bytes, //材质实例数据大小
|
||||
VK_SHADER_STAGE_VERTEX_BIT); //只在Vertex Shader中使用材质实例最终数据
|
||||
|
||||
return(true);
|
||||
}
|
||||
};//class MaterialPureColor3D:public Std3DMaterial
|
||||
}//namespace
|
||||
|
||||
MaterialCreateInfo *CreatePureColor3D(const VulkanDevAttr *dev_attr,const Material3DCreateConfig *cfg)
|
||||
{
|
||||
MaterialPureColor3D mvc3d(cfg);
|
||||
|
||||
return mvc3d.Create(dev_attr);
|
||||
}
|
||||
STD_MTL_NAMESPACE_END
|
@@ -68,6 +68,7 @@ SET(STD_MTL_3D_SOURCE_FILES ${STD_MTL_HEADER_PATH}/Material3DCreateConfig.h
|
||||
3d/Std3DMaterial.h
|
||||
3d/Std3DMaterial.cpp
|
||||
3d/Std3DMaterialLoader.cpp
|
||||
3d/M_PureColor3D.cpp
|
||||
3d/M_VertexColor3D.cpp
|
||||
3d/M_VertexLum3D.cpp
|
||||
3d/M_BillboardDynamicSize.cpp
|
||||
|
Reference in New Issue
Block a user