finished StdMaterialLoader, test all examples ok.
This commit is contained in:
parent
3dd308aff1
commit
8a5711154f
2
CMCore
2
CMCore
@ -1 +1 @@
|
||||
Subproject commit 15b86eaf3bf661cff9f21d9b53a334a7b5e358e4
|
||||
Subproject commit 460dc1c5ecfba0f0cef93026be5d25a4f86605b1
|
@ -1 +1 @@
|
||||
Subproject commit b5b5b0b2e7b00ec3d399659573ba40db8ec8e175
|
||||
Subproject commit 88f064043f1402ced42c91ecb34f26a2b229a134
|
@ -23,7 +23,7 @@ Code
|
||||
|
||||
#Fragment
|
||||
|
||||
Sampler2D TextureColor
|
||||
sampler2D TextureColor
|
||||
|
||||
Output
|
||||
{
|
||||
|
@ -52,7 +52,7 @@ Code
|
||||
|
||||
#Fragment
|
||||
|
||||
Sampler2D TextureColor
|
||||
sampler2D TextureColor
|
||||
|
||||
Output
|
||||
{
|
||||
|
@ -61,7 +61,7 @@ Code
|
||||
|
||||
#Fragment
|
||||
|
||||
Sampler2DArray TextureColor
|
||||
sampler2DArray TextureColor
|
||||
|
||||
Output
|
||||
{
|
||||
|
@ -36,7 +36,8 @@ private:
|
||||
|
||||
cfg.local_to_world=true;
|
||||
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreateVertexLuminance3D(&cfg);
|
||||
//AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreateVertexLuminance3D(&cfg);
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::LoadMaterialFromFile("Std3D/VertexLum3D",&cfg);
|
||||
|
||||
material=db->CreateMaterial(mci);
|
||||
if(!material)return(false);
|
||||
|
@ -60,7 +60,8 @@ private:
|
||||
|
||||
cfg.local_to_world=true;
|
||||
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreateVertexLuminance3D(&cfg);
|
||||
//AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreateVertexLuminance3D(&cfg);
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::LoadMaterialFromFile("Std3D/VertexLum3D",&cfg);
|
||||
|
||||
material=db->CreateMaterial(mci);
|
||||
if(!material)return(false);
|
||||
|
@ -56,7 +56,8 @@ private:
|
||||
cfg.coordinate_system=CoordinateSystem2D::NDC;
|
||||
cfg.local_to_world=false;
|
||||
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreatePureTexture2D(&cfg);
|
||||
//AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreatePureTexture2D(&cfg);
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::LoadMaterialFromFile("Std2D/PureTexture2D",&cfg);
|
||||
|
||||
material=db->CreateMaterial(mci);
|
||||
|
||||
|
@ -94,7 +94,8 @@ private:
|
||||
cfg.coordinate_system=CoordinateSystem2D::ZeroToOne;
|
||||
cfg.local_to_world=true;
|
||||
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreateRectTexture2DArray(&cfg);
|
||||
//AutoDelete<mtl::MaterialCreateInfo> mci=mtl::CreateRectTexture2DArray(&cfg);
|
||||
AutoDelete<mtl::MaterialCreateInfo> mci=mtl::LoadMaterialFromFile("Std2D/RectTexture2DArray",&cfg);
|
||||
|
||||
material=db->CreateMaterial(mci);
|
||||
|
||||
|
@ -50,6 +50,6 @@ MaterialCreateInfo *CreateRectTexture2DArray(Material2DCreateConfig *);
|
||||
* @param cfg 材质创建参数
|
||||
* @return 材质创建信息
|
||||
*/
|
||||
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &mtl_name,const Material2DCreateConfig *cfg); ///<从文件加载材质
|
||||
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &mtl_name,Material2DCreateConfig *cfg); ///<从文件加载材质
|
||||
STD_MTL_NAMESPACE_END
|
||||
#endif//HGL_GRAPH_MTL_2D_CREATE_CONFIG_INCLUDE
|
||||
|
@ -38,4 +38,12 @@ MaterialCreateInfo *CreateVertexLuminance3D(const Material3DCreateConfig *);
|
||||
//MaterialCreateInfo *CreatePureTexture2D(const Material2DCreateConfig *);
|
||||
//MaterialCreateInfo *CreateRectTexture2D(Material2DCreateConfig *);
|
||||
//MaterialCreateInfo *CreateRectTexture2DArray(Material2DCreateConfig *);
|
||||
|
||||
/**
|
||||
* 从文件加载材质
|
||||
* @param mtl_name 材质名称
|
||||
* @param cfg 材质创建参数
|
||||
* @return 材质创建信息
|
||||
*/
|
||||
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,Material3DCreateConfig *cfg);
|
||||
STD_MTL_NAMESPACE_END
|
||||
|
@ -39,78 +39,68 @@ namespace
|
||||
return true;
|
||||
}
|
||||
|
||||
material_file::ShaderData *CommonProc(VkShaderStageFlagBits ss,ShaderCreateInfo *sc)
|
||||
{
|
||||
material_file::ShaderData *sd=mfd->shader[ss];
|
||||
|
||||
if(!sd)
|
||||
return(nullptr);
|
||||
|
||||
for(auto &ua:sd->output)
|
||||
sc->AddOutput(ua.vat,ua.name);
|
||||
|
||||
for(auto &s:sd->sampler)
|
||||
mci->AddSampler(ss,DescriptorSetType::PerMaterial,s.type,s.name);
|
||||
|
||||
sc->SetMain(sd->code,sd->code_length); //这里会产生复制这个string,但我不希望产生这个。未来想办法改进
|
||||
|
||||
return sd;
|
||||
}
|
||||
|
||||
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override
|
||||
{
|
||||
if(!Std2DMaterial::CustomVertexShader(vsc))
|
||||
return(false);
|
||||
|
||||
if(mfd->vi.GetCount()>0)
|
||||
{
|
||||
for(auto &ua:mfd->vi)
|
||||
vsc->AddInput(ua.vat,ua.name);
|
||||
}
|
||||
|
||||
material_file::ShaderData *sd=mfd->shader[VK_SHADER_STAGE_VERTEX_BIT];
|
||||
|
||||
if(!sd)
|
||||
return(false);
|
||||
|
||||
for(auto &ua:sd->output)
|
||||
vsc->AddOutput(ua.vat,ua.name);
|
||||
|
||||
vsc->SetMain(sd->code,sd->code_length); //这里会产生复制这个string,但我不希望产生这个。未来想办法改进
|
||||
|
||||
return true;
|
||||
return CommonProc(VK_SHADER_STAGE_VERTEX_BIT,vsc);
|
||||
}
|
||||
|
||||
bool CustomGeometryShader(ShaderCreateInfoGeometry *gsc) override
|
||||
{
|
||||
if(!Std2DMaterial::CustomGeometryShader(gsc))
|
||||
return(false);
|
||||
|
||||
material_file::GeometryShaderData *sd=(material_file::GeometryShaderData *)(mfd->shader[VK_SHADER_STAGE_GEOMETRY_BIT]);
|
||||
material_file::GeometryShaderData *sd=(material_file::GeometryShaderData *)CommonProc(VK_SHADER_STAGE_GEOMETRY_BIT,gsc);
|
||||
|
||||
if(!sd)
|
||||
return(false);
|
||||
|
||||
gsc->SetGeom(sd->input_prim,sd->output_prim,sd->max_vertices);
|
||||
|
||||
for(auto &ua:sd->output)
|
||||
gsc->AddOutput(ua.vat,ua.name);
|
||||
|
||||
gsc->SetMain(sd->code,sd->code_length); //这里会产生复制这个string,但我不希望产生这个。未来想办法改进
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CustomFragmentShader(ShaderCreateInfoFragment *fsc) override
|
||||
{
|
||||
material_file::ShaderData *sd=mfd->shader[VK_SHADER_STAGE_FRAGMENT_BIT];
|
||||
|
||||
if(!sd)
|
||||
return(false);
|
||||
|
||||
for(auto &ua:sd->output)
|
||||
fsc->AddOutput(ua.vat,ua.name);
|
||||
|
||||
fsc->SetMain(sd->code,sd->code_length); //这里会产生复制这个string,但我不希望产生这个。未来想办法改进
|
||||
|
||||
return true;
|
||||
return CommonProc(VK_SHADER_STAGE_FRAGMENT_BIT,fsc);
|
||||
}
|
||||
|
||||
bool EndCustomShader() override{return true;}
|
||||
};//class Std2DMaterialLoader:public Std2DMaterial
|
||||
}//namespace
|
||||
|
||||
material_file::MaterialFileData *LoadMaterialDataFromFile(const AnsiString &mtl_filename);
|
||||
|
||||
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,const Material2DCreateConfig *cfg)
|
||||
MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,Material2DCreateConfig *cfg)
|
||||
{
|
||||
if(name.IsEmpty()||!cfg)
|
||||
return(nullptr);
|
||||
|
||||
material_file::MaterialFileData *mfd=LoadMaterialDataFromFile(name);
|
||||
|
||||
if(!mfd)
|
||||
return nullptr;
|
||||
|
||||
cfg->shader_stage_flag_bit=mfd->shader_stage_flag_bit;
|
||||
|
||||
Std2DMaterialLoader mtl(mfd,cfg);
|
||||
|
||||
return mtl.Create();
|
||||
|
@ -0,0 +1,104 @@
|
||||
#include "MaterialFileData.h"
|
||||
#include "Std3DMaterial.h"
|
||||
#include <hgl/shadergen/MaterialCreateInfo.h>
|
||||
|
||||
STD_MTL_NAMESPACE_BEGIN
|
||||
|
||||
namespace {
|
||||
class Std3DMaterialLoader : public Std3DMaterial {
|
||||
protected:
|
||||
material_file::MaterialFileData* mfd;
|
||||
|
||||
public:
|
||||
Std3DMaterialLoader(material_file::MaterialFileData* data, const Material3DCreateConfig* cfg)
|
||||
: Std3DMaterial(cfg)
|
||||
{
|
||||
mfd = data;
|
||||
}
|
||||
|
||||
~Std3DMaterialLoader()
|
||||
{
|
||||
delete mfd;
|
||||
}
|
||||
|
||||
bool BeginCustomShader() override
|
||||
{
|
||||
if (!Std3DMaterial::BeginCustomShader())
|
||||
return (false);
|
||||
|
||||
if (mfd->mi.mi_bytes > 0) {
|
||||
mci->SetMaterialInstance(mfd->mi.code,
|
||||
mfd->mi.mi_bytes,
|
||||
mfd->mi.shader_stage_flag_bits);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
material_file::ShaderData* CommonProc(VkShaderStageFlagBits ss, ShaderCreateInfo* sc)
|
||||
{
|
||||
material_file::ShaderData* sd = mfd->shader[ss];
|
||||
|
||||
if (!sd)
|
||||
return (nullptr);
|
||||
|
||||
for (auto& ua : sd->output)
|
||||
sc->AddOutput(ua.vat, ua.name);
|
||||
|
||||
for (auto& s : sd->sampler)
|
||||
mci->AddSampler(ss, DescriptorSetType::PerMaterial, s.type, s.name);
|
||||
|
||||
sc->SetMain(sd->code, sd->code_length); // 这里会产生复制这个string,但我不希望产生这个。未来想办法改进
|
||||
|
||||
return sd;
|
||||
}
|
||||
|
||||
bool CustomVertexShader(ShaderCreateInfoVertex* vsc) override
|
||||
{
|
||||
if (!Std3DMaterial::CustomVertexShader(vsc))
|
||||
return (false);
|
||||
|
||||
for (auto& ua : mfd->vi)
|
||||
vsc->AddInput(ua.vat, ua.name);
|
||||
|
||||
return CommonProc(VK_SHADER_STAGE_VERTEX_BIT, vsc);
|
||||
}
|
||||
|
||||
bool CustomGeometryShader(ShaderCreateInfoGeometry* gsc) override
|
||||
{
|
||||
material_file::GeometryShaderData* sd = (material_file::GeometryShaderData*)CommonProc(VK_SHADER_STAGE_GEOMETRY_BIT, gsc);
|
||||
|
||||
if (!sd)
|
||||
return (false);
|
||||
|
||||
gsc->SetGeom(sd->input_prim, sd->output_prim, sd->max_vertices);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CustomFragmentShader(ShaderCreateInfoFragment* fsc) override
|
||||
{
|
||||
return CommonProc(VK_SHADER_STAGE_FRAGMENT_BIT, fsc);
|
||||
}
|
||||
}; // class Std3DMaterialLoader:public Std3DMaterial
|
||||
} // namespace
|
||||
|
||||
material_file::MaterialFileData* LoadMaterialDataFromFile(const AnsiString& mtl_filename);
|
||||
|
||||
MaterialCreateInfo* LoadMaterialFromFile(const AnsiString& name, Material3DCreateConfig* cfg)
|
||||
{
|
||||
if (name.IsEmpty() || !cfg)
|
||||
return (nullptr);
|
||||
|
||||
material_file::MaterialFileData* mfd = LoadMaterialDataFromFile(name);
|
||||
|
||||
if (!mfd)
|
||||
return nullptr;
|
||||
|
||||
cfg->shader_stage_flag_bit = mfd->shader_stage_flag_bit;
|
||||
|
||||
Std3DMaterialLoader mtl(mfd, cfg);
|
||||
|
||||
return mtl.Create();
|
||||
}
|
||||
STD_MTL_NAMESPACE_END
|
Loading…
x
Reference in New Issue
Block a user