diff --git a/inc/hgl/shadergen/MaterialCreater.h b/inc/hgl/shadergen/MaterialCreater.h index d6fbe130..014b614c 100644 --- a/inc/hgl/shadergen/MaterialCreater.h +++ b/inc/hgl/shadergen/MaterialCreater.h @@ -10,7 +10,10 @@ SHADERGEN_NAMESPACE_BEGIN class MaterialCreater { - uint rt_count; ///<输出的RT数量 +protected: + + uint rt_color_count; ///<输出的RT数量 + bool rt_depth; ///<是否输出深度 uint32_t shader_stage; ///<着色器阶段 @@ -39,7 +42,7 @@ public: public: - MaterialCreater(const uint rc,const uint32 ss=VK_SHADER_STAGE_VERTEX_BIT|VK_SHADER_STAGE_FRAGMENT_BIT); + MaterialCreater(const uint rc,const bool rd,const uint32 ss=VK_SHADER_STAGE_VERTEX_BIT|VK_SHADER_STAGE_FRAGMENT_BIT); ~MaterialCreater()=default; bool AddStruct(const AnsiString &ubo_typename,const AnsiString &codes); @@ -49,4 +52,4 @@ public: bool CompileShader(); };//class MaterialCreater -SHADERGEN_NAMESPACE_END \ No newline at end of file +SHADERGEN_NAMESPACE_END diff --git a/inc/hgl/shadergen/ShaderCreater.h b/inc/hgl/shadergen/ShaderCreater.h index d51edc75..6bdd6a61 100644 --- a/inc/hgl/shadergen/ShaderCreater.h +++ b/inc/hgl/shadergen/ShaderCreater.h @@ -14,7 +14,7 @@ protected: protected: - AnsiString shader_codes; + AnsiString main_codes; AnsiString output_struct; @@ -55,7 +55,7 @@ public: void SetShaderCodes(const AnsiString &str) { - shader_codes=str; + main_codes=str; } const AnsiString &GetOutputStruct()const{return output_struct;} diff --git a/inc/hgl/shadergen/ShaderCreaterVertex.h b/inc/hgl/shadergen/ShaderCreaterVertex.h index f93a22f0..7ab39078 100644 --- a/inc/hgl/shadergen/ShaderCreaterVertex.h +++ b/inc/hgl/shadergen/ShaderCreaterVertex.h @@ -14,6 +14,5 @@ public: int AddInput(const VAT &type,const AnsiString &name); int AddInput(const AnsiString &type,const AnsiString &name); - }; SHADERGEN_NAMESPACE_END diff --git a/src/ShaderGen/MaterialCreater.cpp b/src/ShaderGen/MaterialCreater.cpp index 58918e01..abd68b70 100644 --- a/src/ShaderGen/MaterialCreater.cpp +++ b/src/ShaderGen/MaterialCreater.cpp @@ -4,9 +4,11 @@ using namespace hgl; using namespace hgl::graph; SHADERGEN_NAMESPACE_BEGIN -MaterialCreater::MaterialCreater(const uint rc,const uint32 ss) +MaterialCreater::MaterialCreater(const uint rc,const bool rd,const uint32 ss) { - rt_count=rc; + rt_color_count=rc; + rt_depth=rd; + shader_stage=ss; if(hasVertex ())shader_map.Add(vert=new ShaderCreaterVertex (&mdm));else vert=nullptr; diff --git a/src/ShaderGen/ShaderCreater.cpp b/src/ShaderGen/ShaderCreater.cpp index b4a730f3..7e2bf302 100644 --- a/src/ShaderGen/ShaderCreater.cpp +++ b/src/ShaderGen/ShaderCreater.cpp @@ -1,4 +1,5 @@ #include +#include"GLSLCompiler.h" SHADERGEN_NAMESPACE_BEGIN int ShaderCreater::AddOutput(const VAT &type,const AnsiString &name) @@ -230,16 +231,23 @@ bool ShaderCreater::CreateShader(ShaderCreater *last_sc) ProcOutput(); + final_shader+="\n"; + final_shader+=main_codes; return(true); } bool ShaderCreater::CompileToSPV() { - if(shader_codes.IsEmpty()) + if(main_codes.IsEmpty()) return(false); - + glsl_compiler::SPVData *spv_data=glsl_compiler::Compile(shader_stage,final_shader.c_str()); + + if(!spv_data) + return(false); + + } SHADERGEN_NAMESPACE_END diff --git a/src/ShaderGen/ShaderCreaterFragment.cpp b/src/ShaderGen/ShaderCreaterFragment.cpp index c22d2f9b..01a8d600 100644 --- a/src/ShaderGen/ShaderCreaterFragment.cpp +++ b/src/ShaderGen/ShaderCreaterFragment.cpp @@ -4,7 +4,7 @@ SHADERGEN_NAMESPACE_BEGIN void ShaderCreaterFragment::UseDefaultMain() { - shader_codes="void main()\n{\n"; + main_codes="void main()\n{\n"; const auto &output_list=sdm.GetShaderStageIO().output; @@ -13,16 +13,16 @@ void ShaderCreaterFragment::UseDefaultMain() for(uint i=0;iname; - shader_codes+="=Get"; - shader_codes+=(*o)->name; - shader_codes+="();\n"; + main_codes+="\t"; + main_codes+=(*o)->name; + main_codes+="=Get"; + main_codes+=(*o)->name; + main_codes+="();\n"; ++o; } - shader_codes+="}"; + main_codes+="}"; } bool ShaderCreaterFragment::ProcOutput()