maybe finished, all examples test OK!
This commit is contained in:
parent
2f49e80122
commit
56b8798122
@ -1 +1 @@
|
||||
Subproject commit b0955107a7d55ec050cb8cec2378ffbacd228096
|
||||
Subproject commit 3bc0658d28e30457907003d85151b3b46083af53
|
@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include<hgl/type/String.h>
|
||||
#include<hgl/type/List.h>
|
||||
#include<hgl/graph/VertexAttrib.h>
|
||||
#include<hgl/graph/VKInterpolation.h>
|
||||
#include<hgl/graph/VKSamplerType.h>
|
||||
@ -380,6 +381,8 @@ namespace hgl
|
||||
Interpolation interpolation; //插值方式
|
||||
};
|
||||
|
||||
using SVList=List<ShaderVariable>;
|
||||
|
||||
struct ShaderVariableArray
|
||||
{
|
||||
uint count;
|
||||
@ -531,9 +534,11 @@ namespace hgl
|
||||
|
||||
if(sv->interpolation!=Interpolation::Smooth)
|
||||
{
|
||||
output_string+=InterpolationName[size_t(sv->interpolation)];
|
||||
|
||||
output_string+=" ";
|
||||
if(RangeCheck(sv->interpolation))
|
||||
{
|
||||
output_string+=InterpolationName[size_t(sv->interpolation)];
|
||||
output_string+=" ";
|
||||
}
|
||||
}
|
||||
|
||||
output_string+=sv->type.GetTypename();
|
||||
|
@ -25,6 +25,7 @@ public:
|
||||
ShaderCreateInfoFragment(MaterialDescriptorInfo *m):ShaderCreateInfo(){ShaderCreateInfo::Init(&fsdi,m);}
|
||||
~ShaderCreateInfoFragment()=default;
|
||||
|
||||
int AddOutput(VIAList &);
|
||||
int AddOutput(const graph::VAType &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth);
|
||||
int AddOutput(const AnsiString &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth);
|
||||
};
|
||||
|
@ -26,6 +26,7 @@ public:
|
||||
|
||||
bool SetGeom(const Prim &ip,const Prim &op,const uint32_t mv);
|
||||
|
||||
int AddOutput(SVList &);
|
||||
int AddOutput(const ShaderVariableType &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth);
|
||||
void AddMaterialInstanceOutput() override;
|
||||
|
||||
|
@ -19,6 +19,8 @@ namespace hgl
|
||||
|
||||
public:
|
||||
|
||||
VIAArray &GetInput(){return vsdi.GetInput();}
|
||||
|
||||
ShaderDescriptorInfo *GetSDI()override{return &vsdi;}
|
||||
|
||||
public:
|
||||
@ -26,11 +28,13 @@ namespace hgl
|
||||
ShaderCreateInfoVertex(MaterialDescriptorInfo *m):ShaderCreateInfo(){ShaderCreateInfo::Init(&vsdi,m);}
|
||||
~ShaderCreateInfoVertex()override=default;
|
||||
|
||||
int AddInput(VIAList &);
|
||||
int AddInput(const graph::VAType &type,const AnsiString &name,const VkVertexInputRate input_rate=VK_VERTEX_INPUT_RATE_VERTEX,const VertexInputGroup &group=VertexInputGroup::Basic);
|
||||
int AddInput(const AnsiString &type,const AnsiString &name,const VkVertexInputRate input_rate=VK_VERTEX_INPUT_RATE_VERTEX,const VertexInputGroup &group=VertexInputGroup::Basic);
|
||||
|
||||
int hasInput(const char *);
|
||||
|
||||
int AddOutput(SVList &);
|
||||
int AddOutput(const SVType &type,const AnsiString &name,Interpolation inter=Interpolation::Smooth);
|
||||
void AddMaterialInstanceOutput() override;
|
||||
|
||||
|
@ -123,7 +123,7 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci)
|
||||
ShaderCreateInfoVertex *vert=mci->GetVS();
|
||||
|
||||
if(vert)
|
||||
mtl->vertex_input=GetVertexInput(vert->sdi->GetShaderStageIO().input);
|
||||
mtl->vertex_input=GetVertexInput(vert->GetInput());
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -37,7 +37,7 @@ void main()
|
||||
|
||||
vsc->AddInput(VAT_VEC2,VAN::TexCoord);
|
||||
|
||||
vsc->AddOutput(VAT_VEC2,"TexCoord");
|
||||
vsc->AddOutput(SVT_VEC2,"TexCoord");
|
||||
|
||||
vsc->SetMain(vs_main);
|
||||
return(true);
|
||||
|
@ -54,7 +54,7 @@ void main()
|
||||
|
||||
vsc->AddInput(VAT_VEC4,VAN::TexCoord);
|
||||
|
||||
vsc->AddOutput(VAT_VEC4,"TexCoord");
|
||||
vsc->AddOutput(SVT_VEC4,"TexCoord");
|
||||
|
||||
vsc->SetMain(vs_main);
|
||||
return(true);
|
||||
@ -64,7 +64,7 @@ void main()
|
||||
{
|
||||
gsc->SetGeom(Prim::Points,Prim::TriangleStrip,4);
|
||||
|
||||
gsc->AddOutput(VAT_VEC2,"TexCoord");
|
||||
gsc->AddOutput(SVT_VEC2,"TexCoord");
|
||||
|
||||
gsc->SetMain(gs_main);
|
||||
return(true);
|
||||
|
@ -61,7 +61,7 @@ void main()
|
||||
|
||||
vsc->AddInput(VAT_VEC4,VAN::TexCoord);
|
||||
|
||||
vsc->AddOutput(VAT_VEC4,"TexCoord");
|
||||
vsc->AddOutput(SVT_VEC4,"TexCoord");
|
||||
|
||||
vsc->SetMain(vs_main);
|
||||
return(true);
|
||||
@ -71,7 +71,7 @@ void main()
|
||||
{
|
||||
gsc->SetGeom(Prim::Points,Prim::TriangleStrip,4);
|
||||
|
||||
gsc->AddOutput(VAT_VEC2,"TexCoord");
|
||||
gsc->AddOutput(SVT_VEC2,"TexCoord");
|
||||
|
||||
gsc->SetMain(gs_main);
|
||||
return(true);
|
||||
|
@ -38,7 +38,7 @@ void main()
|
||||
|
||||
vsc->AddInput(VAT_VEC4,VAN::Color);
|
||||
|
||||
vsc->AddOutput(VAT_VEC4,"Color");
|
||||
vsc->AddOutput(SVT_VEC4,"Color");
|
||||
|
||||
vsc->SetMain(vs_main);
|
||||
return(true);
|
||||
|
@ -53,15 +53,15 @@ namespace
|
||||
return true;
|
||||
}
|
||||
|
||||
material_file::ShaderData *CommonProc(VkShaderStageFlagBits ss,ShaderCreateInfo *sc)
|
||||
template<VkShaderStageFlagBits ss,typename SD,typename SCI>
|
||||
SD *CommonProc(SCI *sc)
|
||||
{
|
||||
material_file::ShaderData *sd=mfd->shader[ss];
|
||||
SD *sd=(SD *)(mfd->shader[ss]);
|
||||
|
||||
if(!sd)
|
||||
return(nullptr);
|
||||
|
||||
for(auto &ua:sd->output)
|
||||
sc->AddOutput(ua.vat,ua.name);
|
||||
sc->AddOutput(sd->output);
|
||||
|
||||
for(auto &s:sd->sampler)
|
||||
mci->AddSampler(ss,DescriptorSetType::PerMaterial,s.type,s.name);
|
||||
@ -73,18 +73,17 @@ namespace
|
||||
|
||||
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override
|
||||
{
|
||||
for(auto &ua:mfd->vi)
|
||||
vsc->AddInput(ua.vat,ua.name);
|
||||
vsc->AddInput(mfd->via);
|
||||
|
||||
if(!Std2DMaterial::CustomVertexShader(vsc))
|
||||
return(false);
|
||||
|
||||
return CommonProc(VK_SHADER_STAGE_VERTEX_BIT,vsc);
|
||||
return CommonProc<VK_SHADER_STAGE_VERTEX_BIT,material_file::VertexShaderData,ShaderCreateInfoVertex>(vsc);
|
||||
}
|
||||
|
||||
bool CustomGeometryShader(ShaderCreateInfoGeometry *gsc) override
|
||||
{
|
||||
material_file::GeometryShaderData *sd=(material_file::GeometryShaderData *)CommonProc(VK_SHADER_STAGE_GEOMETRY_BIT,gsc);
|
||||
material_file::GeometryShaderData *sd=CommonProc<VK_SHADER_STAGE_GEOMETRY_BIT,material_file::GeometryShaderData,ShaderCreateInfoGeometry>(gsc);
|
||||
|
||||
if(!sd)
|
||||
return(false);
|
||||
@ -96,7 +95,7 @@ namespace
|
||||
|
||||
bool CustomFragmentShader(ShaderCreateInfoFragment *fsc) override
|
||||
{
|
||||
return CommonProc(VK_SHADER_STAGE_FRAGMENT_BIT,fsc);
|
||||
return CommonProc<VK_SHADER_STAGE_FRAGMENT_BIT,material_file::FragmentShaderData,ShaderCreateInfoFragment>(fsc);
|
||||
}
|
||||
};//class Std2DMaterialLoader:public Std2DMaterial
|
||||
}//namespace
|
||||
|
@ -57,7 +57,7 @@ void main()
|
||||
if(!Std3DMaterial::CustomVertexShader(vsc))
|
||||
return(false);
|
||||
|
||||
vsc->AddOutput(VAT_UINT,"l2w_id",Interpolation::Flat);
|
||||
vsc->AddOutput(SVT_UINT,"l2w_id",Interpolation::Flat);
|
||||
|
||||
vsc->SetMain(vs_main);
|
||||
return(true);
|
||||
@ -67,7 +67,7 @@ void main()
|
||||
{
|
||||
gsc->SetGeom(Prim::Points,Prim::TriangleStrip,4);
|
||||
|
||||
gsc->AddOutput(VAT_VEC2,"TexCoord");
|
||||
gsc->AddOutput(SVT_VEC2,"TexCoord");
|
||||
|
||||
gsc->SetMain(gs_main);
|
||||
return(true);
|
||||
|
@ -59,7 +59,7 @@ void main()
|
||||
if(!Std3DMaterial::CustomVertexShader(vsc))
|
||||
return(false);
|
||||
|
||||
vsc->AddOutput(VAT_VEC2,"BillboardSize");
|
||||
vsc->AddOutput(SVT_VEC2,"BillboardSize");
|
||||
|
||||
vsc->SetMain(vs_main);
|
||||
return(true);
|
||||
@ -69,7 +69,7 @@ void main()
|
||||
{
|
||||
gsc->SetGeom(Prim::Points,Prim::TriangleStrip,4);
|
||||
|
||||
gsc->AddOutput(VAT_VEC2,"TexCoord");
|
||||
gsc->AddOutput(SVT_VEC2,"TexCoord");
|
||||
|
||||
gsc->SetMain(gs_main);
|
||||
return(true);
|
||||
|
@ -38,7 +38,7 @@ void main()
|
||||
|
||||
vsc->AddInput(VAT_VEC4,VAN::Color);
|
||||
|
||||
vsc->AddOutput(VAT_VEC4,"Color");
|
||||
vsc->AddOutput(SVT_VEC4,"Color");
|
||||
|
||||
vsc->SetMain(vs_main);
|
||||
return(true);
|
||||
|
@ -43,7 +43,7 @@ void main()
|
||||
|
||||
vsc->AddInput(VAT_FLOAT,VAN::Luminance);
|
||||
|
||||
vsc->AddOutput(VAT_VEC4,"Color");
|
||||
vsc->AddOutput(SVT_VEC4,"Color");
|
||||
|
||||
vsc->SetMain(vs_main);
|
||||
return(true);
|
||||
|
@ -54,15 +54,15 @@ namespace
|
||||
return true;
|
||||
}
|
||||
|
||||
material_file::ShaderData *CommonProc(VkShaderStageFlagBits ss,ShaderCreateInfo *sc)
|
||||
template<VkShaderStageFlagBits ss,typename SD,typename SCI>
|
||||
SD *CommonProc(SCI *sc)
|
||||
{
|
||||
material_file::ShaderData *sd=mfd->shader[ss];
|
||||
SD *sd=(SD *)(mfd->shader[ss]);
|
||||
|
||||
if(!sd)
|
||||
return (nullptr);
|
||||
|
||||
for(auto &ua:sd->output)
|
||||
sc->AddOutput(ua.vat,ua.name);
|
||||
sc->AddOutput(sd->output);
|
||||
|
||||
for(auto &s:sd->sampler)
|
||||
mci->AddSampler(ss,DescriptorSetType::PerMaterial,s.type,s.name);
|
||||
@ -74,18 +74,17 @@ namespace
|
||||
|
||||
bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override
|
||||
{
|
||||
for(auto &ua:mfd->vi)
|
||||
vsc->AddInput(ua.vat,ua.name);
|
||||
vsc->AddInput(mfd->via);
|
||||
|
||||
if(!Std3DMaterial::CustomVertexShader(vsc))
|
||||
return (false);
|
||||
|
||||
return CommonProc(VK_SHADER_STAGE_VERTEX_BIT,vsc);
|
||||
return CommonProc<VK_SHADER_STAGE_VERTEX_BIT,material_file::VertexShaderData,ShaderCreateInfoVertex>(vsc);
|
||||
}
|
||||
|
||||
bool CustomGeometryShader(ShaderCreateInfoGeometry *gsc) override
|
||||
{
|
||||
material_file::GeometryShaderData *sd=(material_file::GeometryShaderData *)CommonProc(VK_SHADER_STAGE_GEOMETRY_BIT,gsc);
|
||||
material_file::GeometryShaderData *sd=CommonProc<VK_SHADER_STAGE_GEOMETRY_BIT,material_file::GeometryShaderData,ShaderCreateInfoGeometry>(gsc);
|
||||
|
||||
if(!sd)
|
||||
return (false);
|
||||
@ -97,7 +96,7 @@ namespace
|
||||
|
||||
bool CustomFragmentShader(ShaderCreateInfoFragment *fsc) override
|
||||
{
|
||||
return CommonProc(VK_SHADER_STAGE_FRAGMENT_BIT,fsc);
|
||||
return CommonProc<VK_SHADER_STAGE_FRAGMENT_BIT,material_file::FragmentShaderData,ShaderCreateInfoFragment>(fsc);
|
||||
}
|
||||
}; // class Std3DMaterialLoader:public Std3DMaterial
|
||||
} // namespace
|
||||
|
@ -68,19 +68,17 @@ namespace material_file
|
||||
}
|
||||
|
||||
const VkShaderStageFlagBits GetShaderStage()const{return shader_stage;}
|
||||
|
||||
virtual void AddOutput(const ShaderVariable &sv);
|
||||
};
|
||||
|
||||
struct VertexShaderData:public ShaderData
|
||||
{
|
||||
List<ShaderVariable> output;
|
||||
SVList output;
|
||||
|
||||
VertexShaderData():ShaderData(VK_SHADER_STAGE_VERTEX_BIT){}
|
||||
|
||||
public:
|
||||
|
||||
void AddOutput(const ShaderVariable &sv)override{output.Add(sv);}
|
||||
void AddOutput(const ShaderVariable &sv){output.Add(sv);}
|
||||
};
|
||||
|
||||
struct GeometryShaderData:public ShaderData
|
||||
@ -89,7 +87,7 @@ namespace material_file
|
||||
Prim output_prim;
|
||||
uint max_vertices=0;
|
||||
|
||||
List<ShaderVariable> output;
|
||||
SVList output;
|
||||
|
||||
public:
|
||||
|
||||
@ -97,18 +95,16 @@ namespace material_file
|
||||
|
||||
public:
|
||||
|
||||
void AddOutput(const ShaderVariable &sv)override{output.Add(sv);}
|
||||
void AddOutput(const ShaderVariable &sv){output.Add(sv);}
|
||||
};
|
||||
|
||||
struct FragmentShaderData:public ShaderData
|
||||
{
|
||||
List<VIA> output;
|
||||
VIAList output;
|
||||
|
||||
FragmentShaderData():ShaderData(VK_SHADER_STAGE_FRAGMENT_BIT){}
|
||||
|
||||
public:
|
||||
|
||||
void AddOutput(const ShaderVariable &sv)override{}
|
||||
void AddOutput(const VIA &via){output.Add(via);}
|
||||
};
|
||||
|
||||
using ShaderDataMap=ObjectMap<VkShaderStageFlagBits,ShaderData>;
|
||||
@ -131,7 +127,7 @@ namespace material_file
|
||||
|
||||
MaterialInstanceData mi{};
|
||||
|
||||
List<VIA> via; ///<Vertex Input
|
||||
VIAList via; ///<Vertex Input
|
||||
|
||||
UBODataList ubo_list;
|
||||
|
||||
|
@ -346,12 +346,37 @@ namespace
|
||||
}
|
||||
};//struct MaterialInstanceBlockParse
|
||||
|
||||
bool ParseVertexInputAttrib(VIA *via,const char *str)
|
||||
bool ParseInterpolation(Interpolation *inter,const char *name)
|
||||
{
|
||||
if(!inter)return(false);
|
||||
if(!name||!*name)return(false);
|
||||
|
||||
for(int i=(int)Interpolation::Smooth;i<(int)Interpolation::Flat;i++)
|
||||
if(!strcmp(name,InterpolationName[i],sizeof(InterpolationName[i])))
|
||||
{
|
||||
*inter=Interpolation(i);
|
||||
return(true);
|
||||
}
|
||||
|
||||
return(false);
|
||||
}
|
||||
|
||||
bool ParseOutputItem(VIA *via,const char *str)
|
||||
{
|
||||
const char *sp;
|
||||
|
||||
while(*str==' '||*str=='\t')++str;
|
||||
|
||||
if(ParseInterpolation(&(via->interpolation),str))
|
||||
{
|
||||
while(*str!=' '&&*str!='\t')++str;
|
||||
while(*str==' '||*str=='\t')++str;
|
||||
}
|
||||
else
|
||||
{
|
||||
via->interpolation=Interpolation::Smooth;
|
||||
}
|
||||
|
||||
VAType vat;
|
||||
|
||||
if(!ParseVertexAttribType(&(vat),str))
|
||||
@ -372,12 +397,22 @@ namespace
|
||||
return(true);
|
||||
}
|
||||
|
||||
bool ParseUniformAttrib(ShaderVariable *sv,const char *str)
|
||||
bool ParseOutputItem(ShaderVariable *sv,const char *str)
|
||||
{
|
||||
const char *sp;
|
||||
|
||||
while(*str==' '||*str=='\t')++str;
|
||||
|
||||
if(ParseInterpolation(&(sv->interpolation),str))
|
||||
{
|
||||
while(*str!=' '&&*str!='\t')++str;
|
||||
while(*str==' '||*str=='\t')++str;
|
||||
}
|
||||
else
|
||||
{
|
||||
sv->interpolation=Interpolation::Smooth;
|
||||
}
|
||||
|
||||
if(!sv->type.ParseTypeString(str))
|
||||
return(false);
|
||||
|
||||
@ -411,16 +446,17 @@ namespace
|
||||
|
||||
VIA via;
|
||||
|
||||
if(ParseVertexInputAttrib(&via,text))
|
||||
if(ParseOutputItem(&via,text))
|
||||
via_list->Add(via);
|
||||
|
||||
return(true);
|
||||
}
|
||||
};//struct VertexInputBlockParse
|
||||
|
||||
template<typename SD,typename OIT>
|
||||
struct ShaderBlockParse:public TextParse
|
||||
{
|
||||
ShaderData * shader_data=nullptr;
|
||||
SD * shader_data=nullptr;
|
||||
|
||||
bool output=false;
|
||||
|
||||
@ -429,7 +465,7 @@ namespace
|
||||
|
||||
public:
|
||||
|
||||
ShaderBlockParse(ShaderData *sd)
|
||||
ShaderBlockParse(SD *sd)
|
||||
{
|
||||
shader_data=sd;
|
||||
}
|
||||
@ -460,10 +496,10 @@ namespace
|
||||
return(true);
|
||||
}
|
||||
|
||||
ShaderVariable sv;
|
||||
OIT output_item;
|
||||
|
||||
if(ParseUniformAttrib(&sv,text))
|
||||
shader_data->AddOutput(sv);
|
||||
if(ParseOutputItem(&output_item,text))
|
||||
shader_data->AddOutput(output_item);
|
||||
}
|
||||
|
||||
if(hgl::stricmp(text,"Code",4)==0)
|
||||
@ -507,7 +543,10 @@ namespace
|
||||
}
|
||||
};//struct ShaderBlockParse
|
||||
|
||||
struct GeometryShaderBlockParse:public ShaderBlockParse
|
||||
using VertexShaderBlockParse=ShaderBlockParse<VertexShaderData,ShaderVariable>;
|
||||
using FragmentShaderBlockParse=ShaderBlockParse<FragmentShaderData,VIA>;
|
||||
|
||||
struct GeometryShaderBlockParse:public ShaderBlockParse<GeometryShaderData,ShaderVariable>
|
||||
{
|
||||
GeometryShaderData *gsd=nullptr;
|
||||
|
||||
@ -576,7 +615,6 @@ namespace
|
||||
|
||||
return(true);
|
||||
}
|
||||
|
||||
};//struct GeometryShaderBlockParse
|
||||
|
||||
struct MaterialTextParse:public TextParse
|
||||
@ -620,7 +658,7 @@ namespace
|
||||
parse=new MaterialInstanceBlockParse(&(mfd->mi));
|
||||
else
|
||||
if(state==MaterialFileBlock::VertexInput)
|
||||
parse=new VertexInputBlockParse(&(mfd->vi));
|
||||
parse=new VertexInputBlockParse(&(mfd->via));
|
||||
else
|
||||
if(state>=MaterialFileBlock::Vertex
|
||||
&&state<=MaterialFileBlock::Fragment)
|
||||
@ -629,23 +667,23 @@ namespace
|
||||
|
||||
if(state==MaterialFileBlock::Vertex)
|
||||
{
|
||||
sd=new ShaderData(VK_SHADER_STAGE_VERTEX_BIT);
|
||||
sd=new VertexShaderData();
|
||||
|
||||
parse=new ShaderBlockParse(sd);
|
||||
parse=new VertexShaderBlockParse((VertexShaderData *)sd);
|
||||
}
|
||||
else
|
||||
if(state==MaterialFileBlock::Geometry)
|
||||
{
|
||||
sd=new GeometryShaderData(VK_SHADER_STAGE_GEOMETRY_BIT);
|
||||
sd=new GeometryShaderData();
|
||||
|
||||
parse=new GeometryShaderBlockParse((GeometryShaderData *)sd);
|
||||
}
|
||||
else
|
||||
if(state==MaterialFileBlock::Fragment)
|
||||
{
|
||||
sd=new ShaderData(VK_SHADER_STAGE_FRAGMENT_BIT);
|
||||
sd=new FragmentShaderData();
|
||||
|
||||
parse=new ShaderBlockParse(sd);
|
||||
parse=new FragmentShaderBlockParse((FragmentShaderData *)sd);
|
||||
}
|
||||
|
||||
if(!sd)
|
||||
|
@ -3,6 +3,23 @@
|
||||
|
||||
namespace hgl{namespace graph{
|
||||
|
||||
int ShaderCreateInfoFragment::AddOutput(VIAList &via_list)
|
||||
{
|
||||
int count=0;
|
||||
|
||||
for(VIA &via:via_list)
|
||||
{
|
||||
//都输出了,没这些值
|
||||
//via.input_rate=VK_VERTEX_INPUT_RATE_VERTEX;
|
||||
//via.group=VertexInputGroup::Basic;
|
||||
|
||||
if(fsdi.AddOutput(via))
|
||||
++count;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
int ShaderCreateInfoFragment::AddOutput(const VAType &type,const AnsiString &name,Interpolation inter)
|
||||
{
|
||||
VertexInputAttribute via;
|
||||
|
@ -26,6 +26,21 @@ namespace hgl
|
||||
AddFunction(mtl::func::MF_HandoverMI_GS);
|
||||
}
|
||||
|
||||
int ShaderCreateInfoGeometry::AddOutput(SVList &sv_list)
|
||||
{
|
||||
int count=0;
|
||||
|
||||
for(ShaderVariable &sv:sv_list)
|
||||
{
|
||||
sv.interpolation=Interpolation::Smooth;
|
||||
|
||||
if(gsdi.AddOutput(sv))
|
||||
++count;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
int ShaderCreateInfoGeometry::AddOutput(const SVType &type,const AnsiString &name,Interpolation inter)
|
||||
{
|
||||
ShaderVariable sv;
|
||||
|
@ -14,9 +14,25 @@ void ShaderCreateInfoVertex::AddMaterialInstanceOutput()
|
||||
AddFunction(mtl::func::MF_HandoverMI_VS);
|
||||
}
|
||||
|
||||
int ShaderCreateInfoVertex::AddInput(VIAList &via_list)
|
||||
{
|
||||
int count=0;
|
||||
|
||||
for(VIA &via:via_list)
|
||||
{
|
||||
via.input_rate=VK_VERTEX_INPUT_RATE_VERTEX;
|
||||
via.group=VertexInputGroup::Basic;
|
||||
|
||||
if(vsdi.AddInput(via))
|
||||
++count;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
int ShaderCreateInfoVertex::AddInput(const VAType &type,const AnsiString &name,const VkVertexInputRate input_rate,const VertexInputGroup &group)
|
||||
{
|
||||
VertexInputAttribute via;
|
||||
VIA via;
|
||||
|
||||
hgl::strcpy(via.name,sizeof(via.name),name.c_str());
|
||||
|
||||
@ -26,6 +42,8 @@ int ShaderCreateInfoVertex::AddInput(const VAType &type,const AnsiString &name,c
|
||||
via.input_rate =input_rate;
|
||||
via.group =group;
|
||||
|
||||
via.interpolation =Interpolation::Smooth;
|
||||
|
||||
return vsdi.AddInput(via);
|
||||
}
|
||||
|
||||
@ -44,6 +62,21 @@ int ShaderCreateInfoVertex::hasInput(const char *name)
|
||||
return vsdi.hasInput(name);
|
||||
}
|
||||
|
||||
int ShaderCreateInfoVertex::AddOutput(SVList &sv_list)
|
||||
{
|
||||
int count=0;
|
||||
|
||||
for(ShaderVariable &sv:sv_list)
|
||||
{
|
||||
sv.interpolation=Interpolation::Smooth;
|
||||
|
||||
if(vsdi.AddOutput(sv))
|
||||
++count;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
int ShaderCreateInfoVertex::AddOutput(const SVType &type,const AnsiString &name,Interpolation inter)
|
||||
{
|
||||
ShaderVariable sv;
|
||||
|
@ -265,5 +265,7 @@ bool ShaderVariableType::ParseTypeString(const char *str)
|
||||
base_type=SVBaseType::AtomicCounter;
|
||||
return(true);
|
||||
}
|
||||
|
||||
return(false);
|
||||
}
|
||||
VK_NAMESPACE_END
|
||||
|
Loading…
x
Reference in New Issue
Block a user