diff --git a/ShaderLibrary/GetLocalToWorld.glsl b/ShaderLibrary/GetLocalToWorld.glsl deleted file mode 100644 index 6566dec7..00000000 --- a/ShaderLibrary/GetLocalToWorld.glsl +++ /dev/null @@ -1,4 +0,0 @@ -mat4 GetLocalToWorld() -{ - return l2w.mats[Assign.x]; -} diff --git a/ShaderLibrary/GetMI.glsl b/ShaderLibrary/GetMI.glsl deleted file mode 100644 index faf52b4d..00000000 --- a/ShaderLibrary/GetMI.glsl +++ /dev/null @@ -1,8 +0,0 @@ -MaterialInstance GetMI() -{ -#if ShaderStage == VertexShader - return mtl.mi[Assign.y]; -#else - return mtl.mi[Input.MaterialInstanceID]; -#endif -} diff --git a/ShaderLibrary/HandoverMI.glsl b/ShaderLibrary/HandoverMI.glsl deleted file mode 100644 index b719370a..00000000 --- a/ShaderLibrary/HandoverMI.glsl +++ /dev/null @@ -1,10 +0,0 @@ -void HandoverMI() -{ -#if ShaderStage == VertexShader - Output.MaterialInstanceID=Assign.y; -#elif ShaderStage == GeometryShader - Output.MaterialInstanceID=Input[0].MaterialInstanceID; -#else - Output.MaterialInstanceID=Input.MaterialInstanceID; -#endif -} diff --git a/ShaderLibrary/ShaderHeader.glsl b/ShaderLibrary/ShaderHeader.glsl deleted file mode 100644 index 8810a476..00000000 --- a/ShaderLibrary/ShaderHeader.glsl +++ /dev/null @@ -1,10 +0,0 @@ -#version 460 core - -#define VertexShader 0x01 -#define TessControlShader 0x02 -#define TeseEvalShader 0x04 -#define GeometryShader 0x08 -#define FragmentShader 0x10 -#define ComputeShader 0x20 -#define TaskShader 0x40 -#define MeshShader 0x80 diff --git a/example/2dVector/line.cpp b/example/2dVector/line.cpp index ffed694a..b466f6f7 100644 --- a/example/2dVector/line.cpp +++ b/example/2dVector/line.cpp @@ -143,7 +143,7 @@ public: return(true); } - void Resize(int w,int h)override + void Resize(uint w,uint h)override { cam.width=w; cam.height=h; diff --git a/example/2dVector/roundbox.cpp b/example/2dVector/roundbox.cpp index b27308a8..df838a4f 100644 --- a/example/2dVector/roundbox.cpp +++ b/example/2dVector/roundbox.cpp @@ -165,7 +165,7 @@ public: return(true); } - void Resize(int w,int h)override + void Resize(uint w,uint h)override { cam.width=w; cam.height=h; diff --git a/example/Basic/auto_instance.cpp b/example/Basic/auto_instance.cpp index 388ce7a1..86a33b99 100644 --- a/example/Basic/auto_instance.cpp +++ b/example/Basic/auto_instance.cpp @@ -116,7 +116,7 @@ public: return(true); } - void Resize(int w,int h)override + void Resize(uint w,uint h)override { VulkanApplicationFramework::Resize(w,h); diff --git a/example/Basic/auto_merge_material_instance.cpp b/example/Basic/auto_merge_material_instance.cpp index 2fd6da6f..265a08ef 100644 --- a/example/Basic/auto_merge_material_instance.cpp +++ b/example/Basic/auto_merge_material_instance.cpp @@ -130,7 +130,7 @@ public: return(true); } - void Resize(int w,int h)override + void Resize(uint w,uint h)override { VulkanApplicationFramework::Resize(w,h); diff --git a/example/Basic/draw_triangle_in_NDC.cpp b/example/Basic/draw_triangle_in_NDC.cpp index 663ceea8..5198de23 100644 --- a/example/Basic/draw_triangle_in_NDC.cpp +++ b/example/Basic/draw_triangle_in_NDC.cpp @@ -145,7 +145,7 @@ public: return(true); } - void Resize(int w,int h)override + void Resize(uint w,uint h)override { VulkanApplicationFramework::Resize(w,h); diff --git a/example/Gizmo/Gizmo3DMove.cpp b/example/Gizmo/Gizmo3DMove.cpp index 2799e94b..a975dd45 100644 --- a/example/Gizmo/Gizmo3DMove.cpp +++ b/example/Gizmo/Gizmo3DMove.cpp @@ -26,7 +26,7 @@ private: Material * mtl_vtx_lum =nullptr; MaterialInstance * mi_plane_grid =nullptr; Pipeline * pipeline_vtx_lum =nullptr; - Primitive * prim_plane_grid =nullptr; + Primitive * prim_plane_grid =nullptr; Material * mtl_vtx_color =nullptr; MaterialInstance * mi_line =nullptr; diff --git a/example/Texture/texture_quad.cpp b/example/Texture/texture_quad.cpp index e13fc92d..877ce39a 100644 --- a/example/Texture/texture_quad.cpp +++ b/example/Texture/texture_quad.cpp @@ -112,7 +112,7 @@ public: return(true); } - void Resize(int w,int h)override + void Resize(uint w,uint h)override { VulkanApplicationFramework::Resize(w,h); diff --git a/example/Texture/texture_rect.cpp b/example/Texture/texture_rect.cpp index 3b255c6c..9171ac05 100644 --- a/example/Texture/texture_rect.cpp +++ b/example/Texture/texture_rect.cpp @@ -108,7 +108,7 @@ public: return(true); } - void Resize(int w,int h)override + void Resize(uint w,uint h)override { VulkanApplicationFramework::Resize(w,h); diff --git a/example/Texture/texture_rect_array.cpp b/example/Texture/texture_rect_array.cpp index 4ff7c0d9..72eec86d 100644 --- a/example/Texture/texture_rect_array.cpp +++ b/example/Texture/texture_rect_array.cpp @@ -184,7 +184,7 @@ public: return(true); } - void Resize(int w,int h)override + void Resize(uint w,uint h)override { VulkanApplicationFramework::Resize(w,h); diff --git a/src/ShaderGen/MaterialCreateInfo.cpp b/src/ShaderGen/MaterialCreateInfo.cpp index 20820740..f12968ff 100644 --- a/src/ShaderGen/MaterialCreateInfo.cpp +++ b/src/ShaderGen/MaterialCreateInfo.cpp @@ -9,12 +9,6 @@ using namespace hgl; using namespace hgl::graph; STD_MTL_NAMESPACE_BEGIN - -namespace -{ - const AnsiString *MF_HandoverMI=nullptr; -}//namespace - MaterialCreateInfo::MaterialCreateInfo(const MaterialCreateConfig *mc) { config=mc; @@ -39,9 +33,6 @@ MaterialCreateInfo::MaterialCreateInfo(const MaterialCreateConfig *mc) l2w_shader_stage=0; l2w_ubo=nullptr; } - - if(!MF_HandoverMI) - MF_HandoverMI=LoadShader("HandoverMI"); } bool MaterialCreateInfo::AddStruct(const AnsiString &struct_name,const AnsiString &codes) @@ -255,12 +246,8 @@ bool MaterialCreateInfo::CreateShader() return(false); if(sc->GetShaderStage()AddMaterialInstanceOutput(); - sc->AddFunction(MF_HandoverMI); - } - sc->CreateShader(last); last=sc; diff --git a/src/ShaderGen/ShaderCreateInfo.cpp b/src/ShaderGen/ShaderCreateInfo.cpp index 6862b064..1a604b30 100644 --- a/src/ShaderGen/ShaderCreateInfo.cpp +++ b/src/ShaderGen/ShaderCreateInfo.cpp @@ -9,12 +9,6 @@ namespace hgl{namespace graph{ -namespace -{ - const AnsiString *ShaderFileHeader=nullptr; - const AnsiString *MF_GetMI=nullptr; -}//namespace - ShaderCreateInfo::ShaderCreateInfo(VkShaderStageFlagBits ss,MaterialDescriptorInfo *m) { shader_stage=ss; @@ -25,9 +19,6 @@ ShaderCreateInfo::ShaderCreateInfo(VkShaderStageFlagBits ss,MaterialDescriptorIn define_macro_max_length=0; define_value_max_length=0; - - if(!ShaderFileHeader)ShaderFileHeader =mtl::LoadShader("ShaderHeader"); - if(!MF_GetMI )MF_GetMI =mtl::LoadShader("GetMI"); } ShaderCreateInfo::~ShaderCreateInfo() @@ -163,12 +154,22 @@ bool ShaderCreateInfo::ProcSubpassInput() return(true); } +namespace +{ + constexpr const char MF_GetMI_VS []="\nMaterialInstance GetMI(){return mtl.mi[Assign.y];}\n"; + constexpr const char MF_GetMI_Other []="\nMaterialInstance GetMI(){return mtl.mi[Input.MaterialInstanceID];}\n"; + + constexpr const char MF_HandoverMI_VS[]= "\nvoid HandoverMI(){Output.MaterialInstanceID=Assign.y;}\n"; + constexpr const char MF_HandoverMI_GS[]= "\nvoid HandoverMI(){Output.MaterialInstanceID=Input[0].MaterialInstanceID;}\n"; + constexpr const char MF_HandoverMI_OTHER[]= "\nvoid HandoverMI(){Output.MaterialInstanceID=Input.MaterialInstanceID;}\n"; +}//namespace + void ShaderCreateInfo::SetMaterialInstance(UBODescriptor *ubo,const AnsiString &mi) { sdm->AddUBO(DescriptorSetType::PerMaterial,ubo); sdm->AddStruct(mtl::MaterialInstanceStruct); - AddFunction(MF_GetMI); + AddFunction(shader_stage==VK_SHADER_STAGE_VERTEX_BIT?MF_GetMI_VS:MF_GetMI_Other); mi_codes=mi; } @@ -176,6 +177,10 @@ void ShaderCreateInfo::SetMaterialInstance(UBODescriptor *ubo,const AnsiString & void ShaderCreateInfo::AddMaterialInstanceOutput() { AddOutput(VAT_UINT,mtl::func::MaterialInstanceID,Interpolation::Flat); + + if(shader_stage==VK_SHADER_STAGE_VERTEX_BIT) AddFunction(MF_HandoverMI_VS);else + if(shader_stage==VK_SHADER_STAGE_GEOMETRY_BIT) AddFunction(MF_HandoverMI_GS);else + AddFunction(MF_HandoverMI_OTHER); } void ShaderCreateInfo::SetLocalToWorld(UBODescriptor *ubo) @@ -386,13 +391,21 @@ bool ShaderCreateInfo::ProcSampler() bool ShaderCreateInfo::CreateShader(ShaderCreateInfo *last_sc) { - if(!ShaderFileHeader) - return(false); - if(main_function.IsEmpty()) return(false); - final_shader=ShaderFileHeader->c_str(); + final_shader=R"( +#version 460 core + +#define VertexShader 0x01 +#define TessControlShader 0x02 +#define TeseEvalShader 0x04 +#define GeometryShader 0x08 +#define FragmentShader 0x10 +#define ComputeShader 0x20 +#define TaskShader 0x40 +#define MeshShader 0x80 +)"; { char ss_hex_str[9]; @@ -430,6 +443,7 @@ bool ShaderCreateInfo::CreateShader(ShaderCreateInfo *last_sc) for(const char *str:function_list) final_shader+=str; + final_shader+="\n"; final_shader+=main_function; #ifdef _DEBUG diff --git a/src/ShaderGen/ShaderCreateInfoVertex.cpp b/src/ShaderGen/ShaderCreateInfoVertex.cpp index 235a0331..0c9e894d 100644 --- a/src/ShaderGen/ShaderCreateInfoVertex.cpp +++ b/src/ShaderGen/ShaderCreateInfoVertex.cpp @@ -8,14 +8,8 @@ #include"ShaderLibrary.h" VK_NAMESPACE_BEGIN -namespace -{ - const AnsiString *MF_GetLocalToWorld=nullptr; -}//namespace - ShaderCreateInfoVertex::ShaderCreateInfoVertex(MaterialDescriptorInfo *m):ShaderCreateInfo(VK_SHADER_STAGE_VERTEX_BIT,m) { - if(!MF_GetLocalToWorld)MF_GetLocalToWorld=mtl::LoadShader("GetLocalToWorld"); } int ShaderCreateInfoVertex::AddInput(const VAT &type,const AnsiString &name,const VkVertexInputRate input_rate,const VertexInputGroup &group) @@ -56,6 +50,8 @@ void ShaderCreateInfoVertex::AddAssign() VK_VERTEX_INPUT_RATE_INSTANCE, VertexInputGroup::Assign); + constexpr const char MF_GetLocalToWorld[]="\nmat4 GetLocalToWorld(){return l2w.mats[Assign.x];}\n"; + AddFunction(MF_GetLocalToWorld); }