diff --git a/CMSceneGraph b/CMSceneGraph index b10387ad..f5cfe02e 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit b10387ad563ced36feb5cdd8eea3cdaed6e68bf6 +Subproject commit f5cfe02eed045d84ee03a9e32d62029c71fec530 diff --git a/example/Vulkan/Geometry3D.cpp b/example/Vulkan/Geometry3D.cpp index 80f9bbdb..e192fa4e 100644 --- a/example/Vulkan/Geometry3D.cpp +++ b/example/Vulkan/Geometry3D.cpp @@ -21,14 +21,14 @@ class TestApp:public CameraAppFramework private: - SceneNode render_root; - RenderList *render_list=nullptr; + SceneNode render_root; + RenderList * render_list =nullptr; Material * material =nullptr; MaterialInstance * material_instance =nullptr; Pipeline * pipeline =nullptr; - Primitive * ro_plane_grid[3]; + Primitive * ro_plane_grid[3]{}; private: diff --git a/inc/hgl/graph/mtl/MaterialConfig.h b/inc/hgl/graph/mtl/MaterialConfig.h index bdcb9500..cf8e3a37 100644 --- a/inc/hgl/graph/mtl/MaterialConfig.h +++ b/inc/hgl/graph/mtl/MaterialConfig.h @@ -7,7 +7,6 @@ #include STD_MTL_NAMESPACE_BEGIN - class MaterialCreateInfo; /** diff --git a/inc/hgl/shadergen/MaterialCreateInfo.h b/inc/hgl/shadergen/MaterialCreateInfo.h index adee8d20..08d024c3 100644 --- a/inc/hgl/shadergen/MaterialCreateInfo.h +++ b/inc/hgl/shadergen/MaterialCreateInfo.h @@ -52,14 +52,20 @@ public: MaterialCreateInfo(const MaterialConfig *); ~MaterialCreateInfo()=default; - bool SetMaterialInstance(const AnsiString &codes,const uint32_t length) + /** + * 设置材质实例代码与数据长度 + * @param mi_glsl_codes 材质实例GLSL代码 + * @param mi_struct_bytes 单个材质实例数据长度 + * @return 是否设置成功 + */ + bool SetMaterialInstance(const AnsiString &mi_glsl_codes,const uint32_t mi_struct_bytes) { - if(length>0&&codes.Length()<4)return(false); + if(mi_struct_bytes>0&&mi_glsl_codes.Length()<4)return(false); - mi_length=length; + mi_length=mi_struct_bytes; - if(length>0) - mi_codes=codes; + if(mi_struct_bytes>0) + mi_codes=mi_glsl_codes; return(true); } diff --git a/src/SceneGraph/Vulkan/VKDeviceCreater.cpp b/src/SceneGraph/Vulkan/VKDeviceCreater.cpp index ba5f7206..18a228af 100644 --- a/src/SceneGraph/Vulkan/VKDeviceCreater.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceCreater.cpp @@ -65,7 +65,7 @@ namespace // VK_EXT_HDR_METADATA_EXTENSION_NAME, // VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME, // VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME, -// VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, + VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME, // VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME, }; diff --git a/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp b/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp index be324814..79882c7b 100644 --- a/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp +++ b/src/SceneGraph/Vulkan/VKRenderResourceMaterial.cpp @@ -220,7 +220,7 @@ Material *RenderResource::CreateMaterial(const mtl::MaterialCreateInfo *mci) const ShaderCreateInfoVertex *vert=mci->GetVS(); if(vert) - { + { sm=CreateShaderModule( mtl_name+OS_TEXT("?Vertex"), VK_SHADER_STAGE_VERTEX_BIT, vert->GetSPVData(),vert->GetSPVSize()); diff --git a/src/ShaderGen/2d/PureColor2D.cpp b/src/ShaderGen/2d/PureColor2D.cpp new file mode 100644 index 00000000..e78af0e5 --- /dev/null +++ b/src/ShaderGen/2d/PureColor2D.cpp @@ -0,0 +1,57 @@ +#include"Std2DMaterial.h" +#include + +STD_MTL_NAMESPACE_BEGIN +namespace +{ + constexpr const char vs_main[]=R"( +void main() +{ + HandoverMI(); //ӲʵIDһShader + + gl_Position=GetPosition2D(); +})"; + + constexpr const char fs_main[]=R"( + + +void main() +{ + MaterialInstance mi=GetMI(); + + Color=mi.Color; +})"; + + class MaterialPureColor2D:public Std2DMaterial + { + public: + + using Std2DMaterial::Std2DMaterial; + ~MaterialPureColor2D()=default; + + bool CreateVertexShader(ShaderCreateInfoVertex *vsc) override + { + if(!Std2DMaterial::CreateVertexShader(vsc)) + return(false); + + vsc->AddFunction(vs_main); + return(true); + } + + bool CreateFragmentShader(ShaderCreateInfoFragment *fsc) override + { + fsc->AddOutput(VAT_VEC4,"Color"); //Fragment shaderյRTˣʵ + + fsc->AddFunction(fs_main); + return(true); + } + };//class MaterialPureColor2D:public Std2DMaterial +}//namespace + +MaterialCreateInfo *CreatePureColor2D(const Material2DConfig *cfg) +{ + MaterialPureColor2D mpc2d(cfg); + + return mpc2d.Create(); +} +STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/2d/Std2DMaterial.cpp b/src/ShaderGen/2d/Std2DMaterial.cpp index cd7963d2..78151b2c 100644 --- a/src/ShaderGen/2d/Std2DMaterial.cpp +++ b/src/ShaderGen/2d/Std2DMaterial.cpp @@ -39,7 +39,7 @@ bool Std2DMaterial::CreateVertexShader(ShaderCreateInfoVertex *vsc) return(true); } - + MaterialCreateInfo *Std2DMaterial::Create() { if(mci->hasVertex()) diff --git a/src/ShaderGen/2d/VertexColor2D.cpp b/src/ShaderGen/2d/VertexColor2D.cpp index 73f440cb..a3b381b1 100644 --- a/src/ShaderGen/2d/VertexColor2D.cpp +++ b/src/ShaderGen/2d/VertexColor2D.cpp @@ -12,9 +12,8 @@ void main() gl_Position=GetPosition2D(); })"; - //一个shader中所有向下一个shader输出,会被定义在一个名为Output的结构中。 - //而同时,这个Output结构,会在下一个Shader中,以Input名称出现使用。 - //也就是说:在此材质中,VertexShader中的Output等于FragmentShader中的Input + //一个shader中输出的所有数据,会被定义在一个名为Output的结构中。所以编写时要用Output.XXXX来使用。 + //而同时,这个结构在下一个Shader中以Input名称出现,使用时以Input.XXX的形式使用。 constexpr const char fs_main[]=R"( void main() diff --git a/src/ShaderGen/CMakeLists.txt b/src/ShaderGen/CMakeLists.txt index c3ace164..01d024c9 100644 --- a/src/ShaderGen/CMakeLists.txt +++ b/src/ShaderGen/CMakeLists.txt @@ -49,7 +49,8 @@ SET(STD_MTL_2D_HEADER_PATH ${STD_MTL_HEADER_PATH}/2d) SET(STD_MTL_2D_SOURCE_FILES ${STD_MTL_2D_HEADER_PATH}/Material2DConfig.h 2d/Std2DMaterial.h 2d/Std2DMaterial.cpp - 2d/VertexColor2D.cpp) + 2d/VertexColor2D.cpp + 2d/PureColor2D.cpp) SET(STD_MTL_SOURCE ${STD_MTL_HEADER_PATH}/MaterialConfig.h ${STD_MTL_HEADER_PATH}/StdMaterial.h