diff --git a/example/Gizmo/Gizmo.h b/example/Gizmo/Gizmo.h index d708aef5..a40a7a68 100644 --- a/example/Gizmo/Gizmo.h +++ b/example/Gizmo/Gizmo.h @@ -31,13 +31,13 @@ enum class GizmoShape:uint ENUM_CLASS_RANGE(Square,Torus) }; -bool InitGizmoResource(RenderResource *); +bool InitGizmoResource(RenderFramework *); void FreeGizmoResource(); Mesh *GetGizmoMesh(const GizmoShape &shape,const GizmoColor &color); -Mesh *GetGizmoMoveMesh(); -Mesh *GetGizmoScaleMesh(); -Mesh *GetGizmoRotateMesh(); +SceneNode *GetGizmoMoveNode(); +//SceneNode *GetGizmoScaleMesh(); +//SceneNode *GetGizmoRotateMesh(); VK_NAMESPACE_END diff --git a/example/Gizmo/Gizmo3DMove.cpp b/example/Gizmo/Gizmo3DMove.cpp index eb4f00f7..4b69a269 100644 --- a/example/Gizmo/Gizmo3DMove.cpp +++ b/example/Gizmo/Gizmo3DMove.cpp @@ -25,25 +25,28 @@ #include #include #include +#include +#include VK_NAMESPACE_BEGIN namespace { - static Mesh *sm_gizmo_move=nullptr; + + static SceneNode *sn_gizmo_move=nullptr; }//namespace -Mesh *GetGizmoMoveMesh() +SceneNode *GetGizmoMoveNode() { - return sm_gizmo_move; + return sn_gizmo_move; } -void ClearGizmoMoveMesh() +void ClearGizmoMoveNode() { - SAFE_CLEAR(sm_gizmo_move); + SAFE_CLEAR(sn_gizmo_move); } -bool InitGizmoMoveMesh() +bool InitGizmoMoveNode(RenderFramework *render_framework) { Mesh *sphere=GetGizmoMesh(GizmoShape::Sphere,GizmoColor::White); Mesh *cylinder[3] @@ -83,9 +86,9 @@ bool InitGizmoMoveMesh() } { - SceneNode *root_node=new SceneNode(); + sn_gizmo_move=new SceneNode(); - root_node->Add(new SceneNode(sphere)); + sn_gizmo_move->AttachComponent(render_framework->CreateComponent(sphere)); { Transform tm; @@ -97,53 +100,50 @@ bool InitGizmoMoveMesh() { tm.SetScale(cylinder_scale); tm.SetTranslation(0,0,GIZMO_CYLINDER_OFFSET); - root_node->Add(new SceneNode(tm,cylinder[2])); //Z 向上圆柱 + render_framework->CreateComponent(tm.GetMatrix(),sn_gizmo_move,cylinder[2]); //Z 向上圆柱 tm.SetScale(one_scale); tm.SetTranslation(0,0,GIZMO_CONE_OFFSET); - root_node->Add(new SceneNode(tm,cone[2])); //Z 向上圆锥 + render_framework->CreateComponent(tm.GetMatrix(),sn_gizmo_move,cone[2]); //Z 向上圆锥 tm.SetScale(circle_scale); tm.SetTranslation(GIZMO_TWO_AXIS_OFFSET,GIZMO_TWO_AXIS_OFFSET,0); - root_node->Add(new SceneNode(tm,circle[2])); + render_framework->CreateComponent(tm.GetMatrix(),sn_gizmo_move,circle[2]); } { tm.SetScale(cylinder_scale); tm.SetRotation(AxisVector::Y,90); tm.SetTranslation(GIZMO_CYLINDER_OFFSET,0,0); - root_node->Add(new SceneNode(tm,cylinder[0])); //X 向右圆柱 + render_framework->CreateComponent(tm.GetMatrix(),sn_gizmo_move,cylinder[0]); //X 向右圆柱 tm.SetScale(one_scale); tm.SetTranslation(GIZMO_CONE_OFFSET,0,0); - root_node->Add(new SceneNode(tm,cone[0])); //X 向右圆锥 + render_framework->CreateComponent(tm.GetMatrix(),sn_gizmo_move,cone[0]); //X 向右圆锥 tm.SetScale(circle_scale); tm.SetTranslation(0,GIZMO_TWO_AXIS_OFFSET,GIZMO_TWO_AXIS_OFFSET); - root_node->Add(new SceneNode(tm,circle[0])); + render_framework->CreateComponent(tm.GetMatrix(),sn_gizmo_move,circle[0]); } { tm.SetScale(cylinder_scale); tm.SetRotation(AxisVector::X,-90); - tm.SetTranslation(0,GIZMO_CYLINDER_OFFSET,0); - - root_node->Add(new SceneNode(tm,cylinder[1])); //Y 向前圆柱 + tm.SetTranslation(0,GIZMO_CYLINDER_OFFSET,0); + render_framework->CreateComponent(tm.GetMatrix(),sn_gizmo_move,cylinder[1]); //Y 向前圆柱 tm.SetScale(one_scale); tm.SetTranslation(0,GIZMO_CONE_OFFSET,0); - root_node->Add(new SceneNode(tm,cone[1])); //Y 向前圆锥 + render_framework->CreateComponent(tm.GetMatrix(),sn_gizmo_move,cone[1]); //Y 向前圆锥 tm.SetScale(circle_scale); tm.SetTranslation(GIZMO_TWO_AXIS_OFFSET,0,GIZMO_TWO_AXIS_OFFSET); - root_node->Add(new SceneNode(tm,circle[1])); + render_framework->CreateComponent(tm.GetMatrix(),sn_gizmo_move,circle[1]); } } - - sm_gizmo_move=CreateGizmoMesh(root_node); } - if(!sm_gizmo_move) + if(!sn_gizmo_move) return(false); return(true); diff --git a/example/Gizmo/GizmoResource.cpp b/example/Gizmo/GizmoResource.cpp index 0db6c660..85fc9d3f 100644 --- a/example/Gizmo/GizmoResource.cpp +++ b/example/Gizmo/GizmoResource.cpp @@ -9,22 +9,24 @@ #include #include #include +#include #include"GizmoResource.h" VK_NAMESPACE_BEGIN -bool InitGizmoMoveMesh(); -void ClearGizmoMoveMesh(); +bool InitGizmoMoveNode(RenderFramework *); +void ClearGizmoMoveNode(); -bool InitGizmoScaleMesh(); -void ClearGizmoScaleMesh(); - -bool InitGizmoRotateMesh(); -void ClearGizmoRotateMesh(); +//bool InitGizmoScaleMesh(); +//void ClearGizmoScaleMesh(); +// +//bool InitGizmoRotateMesh(); +//void ClearGizmoRotateMesh(); namespace { - static RenderResource * gizmo_rr=nullptr; + static RenderFramework *render_framework=nullptr; + static RenderResource * gizmo_rr=nullptr; struct GizmoResource { @@ -80,12 +82,14 @@ namespace return(true); } - bool InitGizmoResource2D(VulkanDevice *device) + bool InitGizmoResource2D() { if(!gizmo_rr) return(false); - RenderPass *render_pass=device->GetRenderPass(); + VulkanDevice *device=render_framework->GetDevice(); + VulkanDevAttr *dev_attr=device->GetDevAttr(); + RenderPass *render_pass=render_framework->GetDefaultRenderPass(); { mtl::Material3DCreateConfig cfg(PrimitiveType::Lines); @@ -93,7 +97,7 @@ namespace cfg.local_to_world=true; cfg.position_format=VAT_VEC3; - mtl::MaterialCreateInfo *mci=CreateVertexLuminance3D(&cfg); + mtl::MaterialCreateInfo *mci=CreateVertexLuminance3D(dev_attr,&cfg); if(!mci) return(false); @@ -106,7 +110,7 @@ namespace } { - gizmo_line.pipeline=render_pass->CreatePipeline(gizmo_line.mtl,InlinePipeline::Solid3D,PrimitiveType::Lines); + gizmo_line.pipeline=render_pass->CreatePipeline(gizmo_line.mtl,InlinePipeline::Solid3D); if(!gizmo_line.pipeline) return(false); @@ -133,25 +137,27 @@ namespace return(true); } - bool InitGizmoResource3D(VulkanDevice *device) + bool InitGizmoResource3D() { if(!gizmo_rr) return(false); - RenderPass *render_pass=device->GetRenderPass(); + VulkanDevice *device=render_framework->GetDevice(); + VulkanDevAttr *dev_attr=device->GetDevAttr(); + RenderPass *render_pass=render_framework->GetDefaultRenderPass(); { - mtl::Material3DCreateConfig cfg(device->GetDevAttr(),"Gizmo3D",PrimitiveType::Triangles); + mtl::Material3DCreateConfig cfg(PrimitiveType::Triangles); cfg.local_to_world=true; cfg.material_instance=true; - mtl::MaterialCreateInfo *mci=CreateMaterialGizmo3D(&cfg); + mtl::MaterialCreateInfo *mci=CreateGizmo3D(dev_attr,&cfg); if(!mci) return(false); - gizmo_triangle.mtl=gizmo_rr->CreateMaterial(mci); + gizmo_triangle.mtl=gizmo_rr->CreateMaterial("GizmoTriangle",mci); if(!gizmo_triangle.mtl) return(false); @@ -159,7 +165,7 @@ namespace } { - gizmo_triangle.pipeline=render_pass->CreatePipeline(gizmo_triangle.mtl,InlinePipeline::Solid3D,PrimitiveType::Triangles); + gizmo_triangle.pipeline=render_pass->CreatePipeline(gizmo_triangle.mtl,InlinePipeline::Solid3D); if(!gizmo_triangle.pipeline) return(false); } @@ -261,25 +267,24 @@ namespace } }//namespace -bool InitGizmoResource(RenderResource *rr) +bool InitGizmoResource(RenderFramework *rf) { - if(!rr) + if(!rf) return(false); - if(gizmo_rr) + render_framework=rf; + + gizmo_rr=render_framework->GetRenderResource(); + + VulkanDevice *device=render_framework->GetDevice(); + + if(!InitGizmoResource3D()) return(false); - gizmo_rr=rr; - - VulkanDevice *device=gizmo_rr->GetDevice(); - - if(!InitGizmoResource3D(device)) + if(!InitGizmoResource2D()) return(false); - if(!InitGizmoResource2D(device)) - return(false); - - InitGizmoMoveMesh(); + InitGizmoMoveNode(rf); //InitGizmoScaleMesh(); //InitGizmoRotateMesh(); @@ -290,7 +295,7 @@ void FreeGizmoResource() { //ClearGizmoRotateMesh(); //ClearGizmoScaleMesh(); - ClearGizmoMoveMesh(); + ClearGizmoMoveNode(); for(GizmoMesh &gr:gizmo_mesh) { @@ -316,15 +321,4 @@ Mesh *GetGizmoMesh(const GizmoShape &shape,const GizmoColor &color) return gizmo_mesh[size_t(shape)].mesh[size_t(color)]; } -Mesh *CreateGizmoMesh(SceneNode *root_node) -{ - if(!root_node) - return(nullptr); - - if(root_node->IsEmpty()) - return(nullptr); - - return(new StaticMesh(root_node)); -} - VK_NAMESPACE_END diff --git a/example/Gizmo/GizmoResource.h b/example/Gizmo/GizmoResource.h index 8c2c66e1..d4b518da 100644 --- a/example/Gizmo/GizmoResource.h +++ b/example/Gizmo/GizmoResource.h @@ -38,6 +38,4 @@ constexpr const float GIZMO_TWO_AXIS_OFFSET =5.0F; Mesh *GetGizmoMesh(const GizmoShape &gs,const GizmoColor &); -MeshComponent *CreateGizmoMeshComponent(SceneNode *); - VK_NAMESPACE_END diff --git a/example/Gizmo/GizmoTest.cpp b/example/Gizmo/GizmoTest.cpp index ca4f4b24..67f5c5c7 100644 --- a/example/Gizmo/GizmoTest.cpp +++ b/example/Gizmo/GizmoTest.cpp @@ -1,4 +1,4 @@ -#include"VulkanAppFramework.h" +#include #include"Gizmo.h" #include @@ -52,94 +52,81 @@ const Vector3f GizmoPosition(0,0,0); // } //};//class BillboardSceneNode:public SceneNode -class TestApp:public SceneAppFramework +class TestApp:public WorkObject { - SceneNode root; - - StaticMesh *sm_move=nullptr; - StaticMesh *sm_rotate=nullptr; - StaticMesh *sm_scale=nullptr; + SceneNode *sm_move=nullptr; + //StaticMesh *sm_rotate=nullptr; + //StaticMesh *sm_scale=nullptr; private: bool InitGizmo() { - if(!InitGizmoResource(db)) + if(!InitGizmoResource(GetRenderFramework())) return(false); - sm_move =GetGizmoMoveStaticMesh(); - sm_rotate =GetGizmoRotateStaticMesh(); - sm_scale =GetGizmoScaleStaticMesh(); + sm_move =GetGizmoMoveNode(); + //sm_rotate =GetGizmoRotateStaticMesh(); + //sm_scale =GetGizmoScaleStaticMesh(); return(true); } void InitGizmoSceneTree() { - camera_control->Refresh(); - CameraInfo *ci=camera_control->GetCameraInfo(); + SceneNode *root=GetSceneRoot(); - root.Clear(); - - //root.Add(Duplication(sm_move->GetScene())); - root.Add(Duplication(sm_rotate->GetScene())); + root->Add(sm_move); + //root.Add(Duplication(sm_rotate->GetScene())); //root.CreateSubNode(sm_scale->GetScene()); - - root.RefreshMatrix(); - render_list->SetCamera(ci); - render_list->Expend(&root); } public: - bool Init(uint w,uint h) - { - if(!SceneAppFramework::Init(w,h)) - return(false); - + bool Init() override + { if(!InitGizmo()) return(false); InitGizmoSceneTree(); - - camera->pos=Vector3f(32,32,32); + + CameraControl *camera_control=GetCameraControl(); + + camera_control->SetPosition(Vector3f(32,32,32)); camera_control->SetTarget(Vector3f(0,0,0)); return(true); } + using WorkObject::WorkObject; + ~TestApp() { FreeGizmoResource(); } - void BuildCommandBuffer(uint32 index) override - { - camera_control->Refresh(); - - const CameraInfo *ci=camera_control->GetCameraInfo(); - const ViewportInfo *vi=GetViewportInfo(); + //void BuildCommandBuffer(uint32 index) override + //{ + // camera_control->Refresh(); + // + // const CameraInfo *ci=camera_control->GetCameraInfo(); + // const ViewportInfo *vi=GetViewportInfo(); - const float screen_height=vi->GetViewportHeight(); + // const float screen_height=vi->GetViewportHeight(); - const Vector4f pos=ci->Project(GizmoPosition); + // const Vector4f pos=ci->Project(GizmoPosition); - //{ - // Transform tm; + // //{ + // // Transform tm; - // tm.SetScale(pos.w*16.0f/screen_height); + // // tm.SetScale(pos.w*16.0f/screen_height); - // root.SetLocalTransform(tm); - //} + // // root.SetLocalTransform(tm); + // //} + //} +};//class TestApp:public WorkObject - root.RefreshMatrix(); - render_list->UpdateLocalToWorld(); - - SceneAppFramework::BuildCommandBuffer(index); - } -};//class TestApp:public SceneAppFramework - -int main(int,char **) +int os_main(int,os_char **) { - return RunApp(1024,1024); + return RunFramework(OS_TEXT("Gizmo"),1280,720); }