From 110c141073c56795309024bb975142b2d85078df Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Thu, 4 May 2023 19:08:13 +0800 Subject: [PATCH] ShaderCreateInfoVertex supported VertexInputGroup and VertexInputRate --- inc/hgl/shadergen/ShaderCreateInfoVertex.h | 48 +++++++++++++++++----- src/ShaderGen/ShaderCreateInfoVertex.cpp | 9 ++-- 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/inc/hgl/shadergen/ShaderCreateInfoVertex.h b/inc/hgl/shadergen/ShaderCreateInfoVertex.h index c694cf95..3bf66e67 100644 --- a/inc/hgl/shadergen/ShaderCreateInfoVertex.h +++ b/inc/hgl/shadergen/ShaderCreateInfoVertex.h @@ -3,18 +3,44 @@ #include #include - -namespace hgl{namespace graph{ -class ShaderCreateInfoVertex:public ShaderCreateInfo +namespace hgl { - bool ProcInput(ShaderCreateInfo *) override; + namespace graph + { + class ShaderCreateInfoVertex:public ShaderCreateInfo + { + bool ProcInput(ShaderCreateInfo *) override; -public: + public: - ShaderCreateInfoVertex(MaterialDescriptorInfo *m):ShaderCreateInfo(VK_SHADER_STAGE_VERTEX_BIT,m){} - ~ShaderCreateInfoVertex()=default; + 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;ibasetype=(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 *)