ShaderCreateInfoVertex supported VertexInputGroup and VertexInputRate

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-05-04 19:08:13 +08:00
parent b9bd4f6c4b
commit 110c141073
2 changed files with 43 additions and 14 deletions

View File

@ -3,8 +3,10 @@
#include<hgl/shadergen/ShaderCreateInfo.h>
#include<hgl/graph/VKShaderStage.h>
namespace hgl{namespace graph{
namespace hgl
{
namespace graph
{
class ShaderCreateInfoVertex:public ShaderCreateInfo
{
bool ProcInput(ShaderCreateInfo *) override;
@ -14,7 +16,31 @@ public:
ShaderCreateInfoVertex(MaterialDescriptorInfo *m):ShaderCreateInfo(VK_SHADER_STAGE_VERTEX_BIT,m){}
~ShaderCreateInfoVertex()=default;
int AddInput(const graph::VAT &type,const AnsiString &name);
int AddInput(const AnsiString &type,const AnsiString &name);
};
}}//namespace hgl::graph
int AddInput(const graph::VAT &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);
void AddBone()
{
VAT id {VertexAttribType::BaseType::UInt,4};
VAT weight {VertexAttribType::BaseType::Float,4};
AddInput(id, VAN::BoneID, VK_VERTEX_INPUT_RATE_VERTEX,VertexInputGroup::Bone);
AddInput(weight,VAN::BoneWeight,VK_VERTEX_INPUT_RATE_VERTEX,VertexInputGroup::Bone);
}
void AddLocalToWorld(const uint count)
{
VAT l2w{VertexAttribType::BaseType::Float,4};
char name[]= "LocalToWorld_?";
for(uint i=0;i<count;i++)
{
name[sizeof(name)-2]='0'+i;
AddInput(l2w,name,VK_VERTEX_INPUT_RATE_INSTANCE,VertexInputGroup::LocalToWorld);
}
}
};//class ShaderCreateInfoVertex:public ShaderCreateInfo
}//namespace graph
}//namespace hgl::graph

View File

@ -9,7 +9,7 @@ namespace hgl{namespace graph{
using namespace hgl;
using namespace hgl::graph;
int ShaderCreateInfoVertex::AddInput(const VAT &type,const AnsiString &name)
int ShaderCreateInfoVertex::AddInput(const VAT &type,const AnsiString &name,const VkVertexInputRate input_rate,const VertexInputGroup &group)
{
ShaderAttribute *ss=new ShaderAttribute;
@ -18,17 +18,20 @@ int ShaderCreateInfoVertex::AddInput(const VAT &type,const AnsiString &name)
ss->basetype=(uint8) type.basetype;
ss->vec_size= type.vec_size;
ss->input_rate =input_rate;
ss->group =group;
return sdm->AddInput(ss);
}
int ShaderCreateInfoVertex::AddInput(const AnsiString &type,const AnsiString &name)
int ShaderCreateInfoVertex::AddInput(const AnsiString &type,const AnsiString &name,const VkVertexInputRate input_rate,const VertexInputGroup &group)
{
VAT vat;
if(!ParseVertexAttribType(&vat,type))
return(-2);
return AddInput(vat,name);
return AddInput(vat,name,input_rate,group);
}
bool ShaderCreateInfoVertex::ProcInput(ShaderCreateInfo *)