diff --git a/CMCore b/CMCore index 538d1978..913bcfcf 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit 538d19781a7818e1333d9ee5a8c165dcff072a25 +Subproject commit 913bcfcfb2fbee1b0bc748e2e979e8d5c66ec09e diff --git a/example/Gizmo/CMakeLists.txt b/example/Gizmo/CMakeLists.txt index 8208e083..092601f3 100644 --- a/example/Gizmo/CMakeLists.txt +++ b/example/Gizmo/CMakeLists.txt @@ -14,6 +14,6 @@ CreateProject(01_PlaneGrid3D PlaneGrid3D.cpp) CreateProject(02_RayPicking RayPicking.cpp) CreateProject(03_MetricCellsGrid MetricCellsGrid.cpp) -CreateProject(04_Gizmo3DMove Gizmo3DMove.cpp Gizmo.h GizmoResource.cpp) +CreateProject(04_Gizmo3DTest GizmoTest.cpp Gizmo3DMove.cpp Gizmo.h GizmoResource.cpp) #CreateProject(03_BlenderAxis BlenderAxis.cpp) diff --git a/example/Gizmo/Gizmo.h b/example/Gizmo/Gizmo.h index 5b4d0252..2f12a63d 100644 --- a/example/Gizmo/Gizmo.h +++ b/example/Gizmo/Gizmo.h @@ -4,16 +4,7 @@ VK_NAMESPACE_BEGIN -class PrimitiveCreater; - -class GizmoResource -{ -protected: - - -public: - - -};//class GizmoResource +bool InitGizmoResource(GPUDevice *); +void FreeGizmoResource(); VK_NAMESPACE_END diff --git a/example/Gizmo/GizmoResource.cpp b/example/Gizmo/GizmoResource.cpp index df2656c0..1871f44d 100644 --- a/example/Gizmo/GizmoResource.cpp +++ b/example/Gizmo/GizmoResource.cpp @@ -40,16 +40,17 @@ namespace ENUM_CLASS_RANGE(Plane,Cylinder) }; - static Material * material =nullptr; - static MaterialInstance * mtl_inst[size_t(GizmoColor::RANGE_SIZE)]{}; - static Pipeline * pipeline =nullptr; - static VertexDataManager * vdm =nullptr; + static RenderResource * gizmo_rr =nullptr; + static Material * gizmo_material =nullptr; + static MaterialInstance * gizmo_mtl_inst[size_t(GizmoColor::RANGE_SIZE)]{}; + static Pipeline * gizmo_pipeline =nullptr; + static VertexDataManager * gizmo_vdm =nullptr; - static PrimitiveCreater * prim_creater=nullptr; + static PrimitiveCreater * gizmo_prim_creater =nullptr; - static Primitive * prim[size_t(GizmoShape::RANGE_SIZE)]{}; + static Primitive * gizmo_prim[size_t(GizmoShape::RANGE_SIZE)]{}; - bool InitGizmoMI(RenderResource *rr) + bool InitGizmoMI() { constexpr const COLOR gizmo_color[size_t(GizmoColor::RANGE_SIZE)]= { @@ -63,7 +64,7 @@ namespace COLOR::BlenderYellow, }; - if(!rr||!material) + if(!gizmo_rr||!gizmo_material) return(false); Color4f color; @@ -72,8 +73,8 @@ namespace { color=GetColor4f(gizmo_color[i],1.0); - mtl_inst[i]=rr->CreateMaterialInstance(material,nullptr,&color); - if(!mtl_inst[i]) + gizmo_mtl_inst[i]=gizmo_rr->CreateMaterialInstance(gizmo_material,nullptr,&color); + if(!gizmo_mtl_inst[i]) return(false); } @@ -81,12 +82,13 @@ namespace } }//namespace -bool InitGizmoResource(RenderResource *rr) +bool InitGizmoResource(GPUDevice *device) { - if(!rr) + gizmo_rr=new RenderResource(device); + + if(!gizmo_rr) return(false); - GPUDevice *device=rr->GetDevice(); RenderPass *render_pass=device->GetRenderPass(); { @@ -100,36 +102,36 @@ bool InitGizmoResource(RenderResource *rr) if(!mci) return(false); - material=rr->CreateMaterial(mci); - if(!material) + gizmo_material=gizmo_rr->CreateMaterial(mci); + if(!gizmo_material) return(false); } - if(!InitGizmoMI(rr)) + if(!InitGizmoMI()) return(false); { - pipeline=render_pass->CreatePipeline(material,InlinePipeline::Solid3D,Prim::Triangles); - if(!pipeline) + gizmo_pipeline=render_pass->CreatePipeline(gizmo_material,InlinePipeline::Solid3D,Prim::Triangles); + if(!gizmo_pipeline) return(false); } { - vdm=new VertexDataManager(device,material->GetDefaultVIL()); + gizmo_vdm=new VertexDataManager(device,gizmo_material->GetDefaultVIL()); - if(!vdm) + if(!gizmo_vdm) return(false); - if(!vdm->Init( HGL_SIZE_1MB, //最大顶点数量 - HGL_SIZE_1MB, //最大索引数量 - IndexType::U16)) //索引类型 + if(!gizmo_vdm->Init(HGL_SIZE_1MB, //最大顶点数量 + HGL_SIZE_1MB, //最大索引数量 + IndexType::U16)) //索引类型 return(false); } { - prim_creater=new PrimitiveCreater(vdm); + gizmo_prim_creater=new PrimitiveCreater(gizmo_vdm); - if(!prim_creater) + if(!gizmo_prim_creater) return(false); } @@ -137,7 +139,7 @@ bool InitGizmoResource(RenderResource *rr) using namespace inline_geometry; { - prim[size_t(GizmoShape::Plane)]=CreatePlane(prim_creater); + gizmo_prim[size_t(GizmoShape::Plane)]=CreatePlane(gizmo_prim_creater); } { @@ -147,11 +149,11 @@ bool InitGizmoResource(RenderResource *rr) cci.tangent=false; cci.tex_coord=false; - prim[size_t(GizmoShape::Cube)]=CreateCube(prim_creater,&cci); + gizmo_prim[size_t(GizmoShape::Cube)]=CreateCube(gizmo_prim_creater,&cci); } { - prim[size_t(GizmoShape::Sphere)]=CreateSphere(prim_creater,8); + gizmo_prim[size_t(GizmoShape::Sphere)]=CreateSphere(gizmo_prim_creater,8); } { @@ -162,7 +164,7 @@ bool InitGizmoResource(RenderResource *rr) cci.numberSlices=8; //圆锥底部分割数 cci.numberStacks=1; //圆锥高度分割数 - prim[size_t(GizmoShape::Cone)]=CreateCone(prim_creater,&cci); + gizmo_prim[size_t(GizmoShape::Cone)]=CreateCone(gizmo_prim_creater,&cci); } { @@ -172,12 +174,12 @@ bool InitGizmoResource(RenderResource *rr) cci.numberSlices=8; //圆柱底部分割数 cci.radius =1; //圆柱半径 - prim[size_t(GizmoShape::Cylinder)]=CreateCylinder(prim_creater,&cci); + gizmo_prim[size_t(GizmoShape::Cylinder)]=CreateCylinder(gizmo_prim_creater,&cci); } ENUM_CLASS_FOR(GizmoShape,int,i) { - if(!prim[i]) + if(!gizmo_prim[i]) return(false); } } @@ -185,4 +187,15 @@ bool InitGizmoResource(RenderResource *rr) return(true); } +void FreeGizmoResource() +{ + SAFE_CLEAR_OBJECT_ARRAY(gizmo_prim) + SAFE_CLEAR(gizmo_prim_creater); + SAFE_CLEAR(gizmo_vdm); +// SAFE_CLEAR(gizmo_pipeline); +// SAFE_CLEAR_OBJECT_ARRAY(gizmo_mtl_inst) + //SAFE_CLEAR(gizmo_material); + SAFE_CLEAR(gizmo_rr); +} + VK_NAMESPACE_END \ No newline at end of file diff --git a/example/Gizmo/GizmoTest.cpp b/example/Gizmo/GizmoTest.cpp new file mode 100644 index 00000000..01fea2d4 --- /dev/null +++ b/example/Gizmo/GizmoTest.cpp @@ -0,0 +1,41 @@ +#include"VulkanAppFramework.h" +#include"Gizmo.h" + +using namespace hgl; +using namespace hgl::graph; + +class TestApp:public SceneAppFramework +{ +private: + + bool InitGizmo() + { + if(!InitGizmoResource(device)) + return(false); + + return(true); + } + +public: + + bool Init(uint w,uint h) + { + if(!SceneAppFramework::Init(w,h)) + return(false); + + if(!InitGizmo()) + return(false); + + return(true); + } + + ~TestApp() + { + FreeGizmoResource(); + } +};//class TestApp:public SceneAppFramework + +int main(int,char **) +{ + return RunApp(1280,720); +} diff --git a/example/LightBasic/BlinnPhongDirectionLight.cpp b/example/LightBasic/BlinnPhongDirectionLight.cpp index 69b191e1..877fe681 100644 --- a/example/LightBasic/BlinnPhongDirectionLight.cpp +++ b/example/LightBasic/BlinnPhongDirectionLight.cpp @@ -35,7 +35,6 @@ constexpr const COLOR AxisColor[4]= COLOR::GhostWhite, COLOR::BlanchedAlmond, COLOR::AntiqueWhite - }; constexpr const os_char *tex_filename[]= diff --git a/src/ShaderGen/3d/M_Gizmo3D.cpp b/src/ShaderGen/3d/M_Gizmo3D.cpp index 1ced3ad4..b0d67f55 100644 --- a/src/ShaderGen/3d/M_Gizmo3D.cpp +++ b/src/ShaderGen/3d/M_Gizmo3D.cpp @@ -39,7 +39,7 @@ void main() //直接光颜色 vec3 direct_color=intensity*SUN_COLOR*mi.Color.rgb; - vec3 SpecularColor=vec3(0); + vec3 spec_color=vec3(0); if(intensity>0.0) { @@ -62,12 +62,14 @@ void main() bool CustomVertexShader(ShaderCreateInfoVertex *vsc) override { - if(!Std3DMaterial::CustomVertexShader(vsc)) - return(false); + vsc->AddInput(VAT_VEC3,VAN::Normal); vsc->AddOutput(SVT_VEC4,"Position"); vsc->AddOutput(SVT_VEC3,"Normal"); + if(!Std3DMaterial::CustomVertexShader(vsc)) //会根据是否有GetNormal函数来决定是否添加Normal计算代码,所以需要放在AddInput后面 + return(false); + vsc->SetMain(vs_main); return(true); } @@ -79,6 +81,15 @@ void main() fsc->SetMain(fs_main); return(true); } + + bool EndCustomShader() override + { + mci->SetMaterialInstance(mi_codes, //材质实例glsl代码 + mi_bytes, //材质实例数据大小 + VK_SHADER_STAGE_FRAGMENT_BIT); //只在Vertex Shader中使用材质实例最终数据 + + return(true); + } };//class MaterialGizmo3D:public Std3DMaterial }//namespace