From db766f33acc1bf4400cf60306b8112e5f061744d Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Thu, 28 Sep 2023 17:44:47 +0800 Subject: [PATCH] fixed PlaneGrid3D example, it RUN OK!!! --- CMCore | 2 +- CMSceneGraph | 2 +- example/Gizmo/PlaneGrid3D.cpp | 25 ++++++----- inc/hgl/graph/InlineGeometry.h | 2 +- src/ShaderGen/3d/M_VertexColor3D.cpp | 63 ++++++++++++++++++++++++++++ src/ShaderGen/CMakeLists.txt | 1 + 6 files changed, 82 insertions(+), 13 deletions(-) create mode 100644 src/ShaderGen/3d/M_VertexColor3D.cpp diff --git a/CMCore b/CMCore index 416e96c1..09d9678e 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 416e96c16923dede9dba5a483e1fe239116e8679 +Subproject commit 09d9678e112a84f29dd4ba2165fe25fd91320569 diff --git a/CMSceneGraph b/CMSceneGraph index 2c10960e..660c371e 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit 2c10960ec30766ccafb2612e81cb88a89307c633 +Subproject commit 660c371ed1b1f98d5f0d96c57964026c70bff8c0 diff --git a/example/Gizmo/PlaneGrid3D.cpp b/example/Gizmo/PlaneGrid3D.cpp index e192fa4e..dd39e197 100644 --- a/example/Gizmo/PlaneGrid3D.cpp +++ b/example/Gizmo/PlaneGrid3D.cpp @@ -6,6 +6,8 @@ #include #include #include +#include +#include using namespace hgl; using namespace hgl::graph; @@ -34,23 +36,29 @@ private: bool InitMDP() { - material=db->CreateMaterial(OS_TEXT("res/material/VertexColor3D")); - if(!material)return(false); + mtl::Material3DCreateConfig cfg(device->GetDeviceAttribute(),"VertexColor3D",Prim::Lines); - material_instance=db->CreateMaterialInstance(material); + cfg.local_to_world=true; + + AutoDelete mci=mtl::CreateVertexColor3D(&cfg); + + material_instance=db->CreateMaterialInstance(mci); if(!material_instance)return(false); + + db->global_descriptor.Bind(material_instance->GetMaterial()); pipeline=CreatePipeline(material_instance,InlinePipeline::Solid3D,Prim::Lines); - if(!pipeline) - return(false); - return(true); + return pipeline; } Renderable *Add(Primitive *r,const Matrix4f &mat) { Renderable *ri=db->CreateRenderable(r,material_instance,pipeline); + if(!ri) + return(nullptr); + render_root.CreateSubNode(mat,ri); return ri; @@ -101,7 +109,7 @@ private: camera_control->Refresh(); render_root.RefreshMatrix(); - render_list->Expend(camera->info,&render_root); + render_list->Expend(&render_root); return(true); } @@ -133,9 +141,6 @@ public: void BuildCommandBuffer(uint32 index) { - render_root.RefreshMatrix(); - render_list->Expend(GetCameraInfo(),&render_root); - VulkanApplicationFramework::BuildCommandBuffer(index,render_list); } diff --git a/inc/hgl/graph/InlineGeometry.h b/inc/hgl/graph/InlineGeometry.h index 1e95d9c4..9771a563 100644 --- a/inc/hgl/graph/InlineGeometry.h +++ b/inc/hgl/graph/InlineGeometry.h @@ -66,7 +66,7 @@ namespace hgl Vector3f coord[4]; Vector2u step; - Vector2u side_step; //到边界的步数 + Vector2u side_step; //到边界的步数 Color4f color; //一般线条颜色 Color4f side_color; //边界线条颜色 diff --git a/src/ShaderGen/3d/M_VertexColor3D.cpp b/src/ShaderGen/3d/M_VertexColor3D.cpp new file mode 100644 index 00000000..41f437f6 --- /dev/null +++ b/src/ShaderGen/3d/M_VertexColor3D.cpp @@ -0,0 +1,63 @@ +#include"Std3DMaterial.h" +#include + +STD_MTL_NAMESPACE_BEGIN +namespace +{ + constexpr const char vs_main[]=R"( +void main() +{ + Output.Color=Color; + + gl_Position=GetPosition3D(); +})"; + + //一个shader中输出的所有数据,会被定义在一个名为Output的结构中。所以编写时要用Output.XXXX来使用。 + //而同时,这个结构在下一个Shader中以Input名称出现,使用时以Input.XXX的形式使用。 + + constexpr const char fs_main[]=R"( +void main() +{ + Color=Input.Color; +})";// ^ ^ + // | | + // | +--ps:这里的Input.Color就是上一个Shader中的Output.Color + // +--ps:这里的Color就是最终的RT + + class MaterialVertexColor3D:public Std3DMaterial + { + public: + + using Std3DMaterial::Std3DMaterial; + ~MaterialVertexColor3D()=default; + + bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override + { + if(!Std3DMaterial::CustomVertexShader(vsc)) + return(false); + + vsc->AddInput(VAT_VEC4,VAN::Color); + + vsc->AddOutput(VAT_VEC4,"Color"); + + vsc->SetMain(vs_main); + return(true); + } + + bool CustomFragmentShader(ShaderCreateInfoFragment *fsc) override + { + fsc->AddOutput(VAT_VEC4,"Color"); //Fragment shader的输出等于最终的RT了,所以这个名称其实随便起。 + + fsc->SetMain(fs_main); + return(true); + } + };//class MaterialVertexColor3D:public Std3DMaterial +}//namespace + +MaterialCreateInfo *CreateVertexColor3D(const Material3DCreateConfig *cfg) +{ + MaterialVertexColor3D mvc3d(cfg); + + return mvc3d.Create(); +} +STD_MTL_NAMESPACE_END diff --git a/src/ShaderGen/CMakeLists.txt b/src/ShaderGen/CMakeLists.txt index 3cd06e3d..54919327 100644 --- a/src/ShaderGen/CMakeLists.txt +++ b/src/ShaderGen/CMakeLists.txt @@ -62,6 +62,7 @@ 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 + 3d/M_VertexColor3D.cpp ) SET(STD_MTL_SOURCE ${STD_MTL_HEADER_PATH}/MaterialConfig.h