From 6c7f9ea9d14a1efe97826063665b793805813d2b Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Wed, 27 Sep 2023 20:31:46 +0800 Subject: [PATCH] perpare it for VertexColor3D material. --- CMSceneGraph | 2 +- example/Basic/CMakeLists.txt | 2 +- example/CMakeLists.txt | 2 + example/Gizmo/CMakeLists.txt | 13 ++++ .../Geometry3D.cpp => Gizmo/PlaneGrid3D.cpp} | 0 example/Texture/CMakeLists.txt | 2 +- inc/hgl/graph/mtl/2d/Material2DCreateConfig.h | 11 +--- inc/hgl/graph/mtl/3d/Material3DCreateConfig.h | 33 +++++++++++ inc/hgl/graph/mtl/MaterialConfig.h | 6 +- inc/hgl/graph/mtl/SamplerName.h | 15 +++++ src/ShaderGen/2d/M_PureTexture2D.cpp | 1 + src/ShaderGen/2d/M_RectTexture2D.cpp | 1 + src/ShaderGen/2d/M_RectTexture2DArray.cpp | 1 + src/ShaderGen/3d/Std3DMaterial.cpp | 59 +++++++++++++++++++ src/ShaderGen/3d/Std3DMaterial.h | 47 +++++++++++++++ src/ShaderGen/CMakeLists.txt | 10 ++++ 16 files changed, 191 insertions(+), 14 deletions(-) create mode 100644 example/Gizmo/CMakeLists.txt rename example/{Vulkan/Geometry3D.cpp => Gizmo/PlaneGrid3D.cpp} (100%) create mode 100644 inc/hgl/graph/mtl/3d/Material3DCreateConfig.h create mode 100644 inc/hgl/graph/mtl/SamplerName.h create mode 100644 src/ShaderGen/3d/Std3DMaterial.cpp create mode 100644 src/ShaderGen/3d/Std3DMaterial.h diff --git a/CMSceneGraph b/CMSceneGraph index a11148b3..2c10960e 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit a11148b38dd39d25aa6a4493c0028c482c8a5d2b +Subproject commit 2c10960ec30766ccafb2612e81cb88a89307c633 diff --git a/example/Basic/CMakeLists.txt b/example/Basic/CMakeLists.txt index 9b790d43..5a17a5f0 100644 --- a/example/Basic/CMakeLists.txt +++ b/example/Basic/CMakeLists.txt @@ -7,7 +7,7 @@ set_property(TARGET ${name} PROPERTY VS_DPI_AWARE "PerMonitor") ENDIF() - set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Vulkan/Basic") + set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Basic") endmacro() CreateProject(01_draw_triangle_in_NDC draw_triangle_in_NDC.cpp) diff --git a/example/CMakeLists.txt b/example/CMakeLists.txt index d5982618..291fdd77 100644 --- a/example/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -4,6 +4,8 @@ SET(VULKAN_APP_FRAMEWORK ${CMAKE_CURRENT_SOURCE_DIR}/common/VulkanAppFramework.h add_subdirectory(Basic) add_subdirectory(Texture) +add_subdirectory(Gizmo) + add_subdirectory(Vulkan) add_subdirectory(2dVector) add_subdirectory(GUI) diff --git a/example/Gizmo/CMakeLists.txt b/example/Gizmo/CMakeLists.txt new file mode 100644 index 00000000..d77b9b94 --- /dev/null +++ b/example/Gizmo/CMakeLists.txt @@ -0,0 +1,13 @@ +macro(CreateProject name) + add_executable(${name} ${ARGN} ${VULKAN_APP_FRAMEWORK}) + target_link_libraries(${name} ${ULRE}) + + IF(MSVC) + set_target_properties(${name} PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY ${ULRE_RUNTIME_PATH}) + set_property(TARGET ${name} PROPERTY VS_DPI_AWARE "PerMonitor") + ENDIF() + + set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Gizmo") +endmacro() + +CreateProject(PlaneGrid3D PlaneGrid3D.cpp) diff --git a/example/Vulkan/Geometry3D.cpp b/example/Gizmo/PlaneGrid3D.cpp similarity index 100% rename from example/Vulkan/Geometry3D.cpp rename to example/Gizmo/PlaneGrid3D.cpp diff --git a/example/Texture/CMakeLists.txt b/example/Texture/CMakeLists.txt index 302fac09..2a244f02 100644 --- a/example/Texture/CMakeLists.txt +++ b/example/Texture/CMakeLists.txt @@ -7,7 +7,7 @@ set_property(TARGET ${name} PROPERTY VS_DPI_AWARE "PerMonitor") ENDIF() - set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Vulkan/Texture") + set_property(TARGET ${name} PROPERTY FOLDER "ULRE/Example/Texture") endmacro() CreateProject(05_texture_format texture_format_list.cpp) diff --git a/inc/hgl/graph/mtl/2d/Material2DCreateConfig.h b/inc/hgl/graph/mtl/2d/Material2DCreateConfig.h index f7f48f0d..ddc62e0a 100644 --- a/inc/hgl/graph/mtl/2d/Material2DCreateConfig.h +++ b/inc/hgl/graph/mtl/2d/Material2DCreateConfig.h @@ -8,8 +8,6 @@ STD_MTL_NAMESPACE_BEGIN struct Material2DCreateConfig:public MaterialCreateConfig { - Prim prim; ///<图元类型 - CoordinateSystem2D coordinate_system; ///<使用的坐标系 bool local_to_world; ///<包含LocalToWorld矩阵 @@ -18,10 +16,8 @@ struct Material2DCreateConfig:public MaterialCreateConfig public: - Material2DCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const Prim &p):MaterialCreateConfig(da,name) + Material2DCreateConfig(const GPUDeviceAttribute *da,const AnsiString &name,const Prim &p):MaterialCreateConfig(da,name,p) { - prim=p; - rt_output.color=1; //输出一个颜色 rt_output.depth=false; //不输出深度 rt_output.stencil=false; //不输出stencil @@ -37,11 +33,6 @@ public: } };//struct Material2DCreateConfig:public MaterialCreateConfig -namespace SamplerName -{ - constexpr const char Color[]="TextureColor"; -} - MaterialCreateInfo *CreateVertexColor2D(const Material2DCreateConfig *); MaterialCreateInfo *CreatePureColor2D(const Material2DCreateConfig *); MaterialCreateInfo *CreatePureTexture2D(const Material2DCreateConfig *); diff --git a/inc/hgl/graph/mtl/3d/Material3DCreateConfig.h b/inc/hgl/graph/mtl/3d/Material3DCreateConfig.h new file mode 100644 index 00000000..7fb0162e --- /dev/null +++ b/inc/hgl/graph/mtl/3d/Material3DCreateConfig.h @@ -0,0 +1,33 @@ +#pragma once + +#include +#include +#include + +STD_MTL_NAMESPACE_BEGIN +struct Material3DCreateConfig:public MaterialCreateConfig +{ + bool local_to_world; ///<包含LocalToWorld矩阵 + + VAT position_format; /// #include +#include STD_MTL_NAMESPACE_BEGIN namespace diff --git a/src/ShaderGen/2d/M_RectTexture2D.cpp b/src/ShaderGen/2d/M_RectTexture2D.cpp index e8b4b82a..b2529fd1 100644 --- a/src/ShaderGen/2d/M_RectTexture2D.cpp +++ b/src/ShaderGen/2d/M_RectTexture2D.cpp @@ -2,6 +2,7 @@ #include #include #include +#include STD_MTL_NAMESPACE_BEGIN namespace diff --git a/src/ShaderGen/2d/M_RectTexture2DArray.cpp b/src/ShaderGen/2d/M_RectTexture2DArray.cpp index f82bcdb1..96885e87 100644 --- a/src/ShaderGen/2d/M_RectTexture2DArray.cpp +++ b/src/ShaderGen/2d/M_RectTexture2DArray.cpp @@ -3,6 +3,7 @@ #include #include"common/MFRectPrimitive.h" #include +#include STD_MTL_NAMESPACE_BEGIN namespace diff --git a/src/ShaderGen/3d/Std3DMaterial.cpp b/src/ShaderGen/3d/Std3DMaterial.cpp new file mode 100644 index 00000000..27013a37 --- /dev/null +++ b/src/ShaderGen/3d/Std3DMaterial.cpp @@ -0,0 +1,59 @@ +#include"Std3DMaterial.h" +#include +#include +#include +#include"common/MFGetPosition.h" +#include"common/MFRectPrimitive.h" + +STD_MTL_NAMESPACE_BEGIN +Std3DMaterial::Std3DMaterial(const Material3DCreateConfig *c) +{ + mci=new MaterialCreateInfo(c); + + cfg=c; +} + +bool Std3DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc) +{ + vsc->AddInput(cfg->position_format,VAN::Position); + + if(cfg->local_to_world) + { + mci->SetLocalToWorld(VK_SHADER_STAGE_ALL_GRAPHICS); + + vsc->AddAssign(); + } + + mci->AddUBO(VK_SHADER_STAGE_VERTEX_BIT, + DescriptorSetType::Global, + SBS_ViewportInfo); + + return(true); +} + +MaterialCreateInfo *Std3DMaterial::Create() +{ + if(!BeginCustomShader()) + return(nullptr); + + if(mci->hasVertex()) + if(!CustomVertexShader(mci->GetVS())) + return(nullptr); + + if(mci->hasGeometry()) + if(!CustomGeometryShader(mci->GetGS())) + return(nullptr); + + if(mci->hasFragment()) + if(!CustomFragmentShader(mci->GetFS())) + return(nullptr); + + if(!EndCustomShader()) + return(false); + + if(!mci->CreateShader()) + return(nullptr); + + return(mci); +} +STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/3d/Std3DMaterial.h b/src/ShaderGen/3d/Std3DMaterial.h new file mode 100644 index 00000000..646e3313 --- /dev/null +++ b/src/ShaderGen/3d/Std3DMaterial.h @@ -0,0 +1,47 @@ +#pragma once + +#include + +namespace hgl +{ + namespace graph + { + struct GPUDeviceAttribute; + + class ShaderCreateInfoVertex; + class ShaderCreateInfoGeometry; + class ShaderCreateInfoFragment; + + namespace mtl + { + class MaterialCreateInfo; + struct Material3DCreateConfig; + + class Std3DMaterial + { + protected: + + const Material3DCreateConfig *cfg; + + MaterialCreateInfo *mci; + + protected: + + virtual bool BeginCustomShader(){return true;/*some work before creating shader*/}; + + virtual bool CustomVertexShader(ShaderCreateInfoVertex *); + virtual bool CustomGeometryShader(ShaderCreateInfoGeometry *){return false;} + virtual bool CustomFragmentShader(ShaderCreateInfoFragment *)=0; + + virtual bool EndCustomShader(){return true;/*some work after creating shader*/}; + + public: + + Std3DMaterial(const Material3DCreateConfig *); + virtual ~Std3DMaterial()=default; + + virtual MaterialCreateInfo *Create(); + };//class Std3DMaterial + }//namespace mtl + }//namespace graph +}//namespace hgl diff --git a/src/ShaderGen/CMakeLists.txt b/src/ShaderGen/CMakeLists.txt index a4b70456..3cd06e3d 100644 --- a/src/ShaderGen/CMakeLists.txt +++ b/src/ShaderGen/CMakeLists.txt @@ -37,6 +37,7 @@ SOURCE_GROUP("GLSL Compiler" FILES ${GLSL_COMPILER_SOURCE}) set(STD_MTL_HEADER_PATH ${ROOT_INCLUDE_PATH}/hgl/graph/mtl) SET(SHADERGEN_COMMON_FILES ${STD_MTL_HEADER_PATH}/UBOCommon.h + ${STD_MTL_HEADER_PATH}/SamplerName.h common/MFCommon.h common/MFGetPosition.h) @@ -56,6 +57,13 @@ SET(STD_MTL_2D_SOURCE_FILES ${STD_MTL_2D_HEADER_PATH}/Material2DCreateConfig.h 2d/M_RectTexture2DArray.cpp ) +SET(STD_MTL_3D_HEADER_PATH ${STD_MTL_HEADER_PATH}/3d) + +SET(STD_MTL_3D_SOURCE_FILES ${STD_MTL_3D_HEADER_PATH}/Material3DCreateConfig.h + 3d/Std3DMaterial.h + 3d/Std3DMaterial.cpp +) + SET(STD_MTL_SOURCE ${STD_MTL_HEADER_PATH}/MaterialConfig.h ${STD_MTL_HEADER_PATH}/StdMaterial.h ${STD_MTL_HEADER_PATH}/ShaderBuffer.h @@ -63,6 +71,7 @@ SET(STD_MTL_SOURCE ${STD_MTL_HEADER_PATH}/MaterialConfig.h SOURCE_GROUP("Standard Material" FILES ${STD_MTL_SOURCE}) SOURCE_GROUP("Standard Material\\2D" FILES ${STD_MTL_2D_SOURCE_FILES}) +SOURCE_GROUP("Standard Material\\3D" FILES ${STD_MTL_3D_SOURCE_FILES}) add_cm_library(ULRE.ShaderGen "ULRE" ${DESC_INFO_HEADER_FILES} ${DESC_INFO_SOURCE_FILES} @@ -74,4 +83,5 @@ add_cm_library(ULRE.ShaderGen "ULRE" ${DESC_INFO_HEADER_FILES} ${SHADERGEN_COMMON_FILES} ${STD_MTL_SOURCE} ${STD_MTL_2D_SOURCE_FILES} + ${STD_MTL_3D_SOURCE_FILES} )