diff --git a/ShaderLibrary/Std3D/BlinnPhongPureColor.mtl b/ShaderLibrary/Std3D/BlinnPhongPureColor.mtl index facd8714..a5e7fa5a 100644 --- a/ShaderLibrary/Std3D/BlinnPhongPureColor.mtl +++ b/ShaderLibrary/Std3D/BlinnPhongPureColor.mtl @@ -3,7 +3,16 @@ Name BlinnPhong+HalfLambert shading model only color Reference https://zhuanlan.zhihu.com/p/442023993 Base Std3D -Require LocalToWorld,Camera,Sun +//某些Require并不真的存在.ubo文件,写成一行一个是为了方便未来改成带路径的 +Require LocalToWorld +Require Camera + +UBO +{ + File Sun.ubo + Name sun + Stage Vertex,Fragment +} #MaterialInstance diff --git a/ShaderLibrary/Std3D/Sun.ubo b/ShaderLibrary/Std3D/Sun.ubo new file mode 100644 index 00000000..c1c92cdf --- /dev/null +++ b/ShaderLibrary/Std3D/Sun.ubo @@ -0,0 +1,2 @@ +vec4 direction; +vec4 color; diff --git a/src/ShaderGen/MaterialFileData.h b/src/ShaderGen/MaterialFileData.h index adaa5f91..2456b590 100644 --- a/src/ShaderGen/MaterialFileData.h +++ b/src/ShaderGen/MaterialFileData.h @@ -34,16 +34,27 @@ namespace material_file SamplerType type; }; + struct UBOData + { + char name[SHADER_RESOURCE_NAME_MAX_LENGTH]; + + char filename[HGL_MAX_PATH]; + + uint32_t shader_stage_flag_bits; + }; + + using UBODataList=List; + struct ShaderData { - VkShaderStageFlagBits shader_stage; + VkShaderStageFlagBits shader_stage; - const char *code; - uint code_length; + const char * code; + uint code_length; - List output; + List output; - List sampler; + List sampler; public: @@ -91,6 +102,8 @@ namespace material_file List vi; ///Add(ubo_parse.ubo_data); + + ubo_parse.Clear(); + ubo=false; + } + + return(true); + } + if(hgl::stricmp(text,"Require ",8)==0) { text+=8; @@ -102,6 +209,11 @@ namespace sp=text; } } + else + if(hgl::stricmp(text,"UBO",3)==0) + { + ubo=true; + } return(true); } @@ -195,24 +307,7 @@ namespace else if(hgl::stricmp(text,"Stage ",6)==0) { - const char *ep=text+len; - const char *sp; - - text+=6; - - while(*text==' '||*text=='\t')++text; - - while(textrequire_list)); + parse=new MaterialBlockParse(&(mfd->require_list),&(mfd->ubo_list)); else if(state==MaterialFileBlock::MaterialInstance) parse=new MaterialInstanceBlockParse(&(mfd->mi));