diff --git a/example/Basic/draw_triangle_use_UBO.cpp b/example/Basic/draw_triangle_use_UBO.cpp index cb17b519..de3ce72d 100644 --- a/example/Basic/draw_triangle_use_UBO.cpp +++ b/example/Basic/draw_triangle_use_UBO.cpp @@ -36,7 +36,7 @@ class TestApp:public WorkObject private: MaterialInstance * material_instance =nullptr; - Mesh * render_obj =nullptr; + Mesh * mesh_triangle =nullptr; Pipeline * pipeline =nullptr; @@ -79,7 +79,7 @@ private: position_data[i][1]=position_data_float[i][1]*ext.height; } - render_obj=CreateMesh("Triangle",VERTEX_COUNT,material_instance,pipeline, + mesh_triangle=CreateMesh("Triangle",VERTEX_COUNT,material_instance,pipeline, { {VAN::Position,POSITION_DATA_FORMAT,position_data}, {VAN::Color, COLOR_DATA_FORMAT, color_data} @@ -87,9 +87,11 @@ private: SceneNode *scene_root=GetSceneRoot(); ///<取得场景根节点 - scene_root->Add(new SceneNode(render_obj)); - return(render_obj); + + scene_root->Add(new SceneNode(mesh_triangle)); + + return(mesh_triangle); } public: diff --git a/example/Gizmo/GizmoResource.h b/example/Gizmo/GizmoResource.h index b05ed8a4..a14ee585 100644 --- a/example/Gizmo/GizmoResource.h +++ b/example/Gizmo/GizmoResource.h @@ -1,4 +1,5 @@ #pragma once + #include"Gizmo.h" #include @@ -6,7 +7,7 @@ VK_NAMESPACE_BEGIN class SceneNode; class PrimitiveCreater; -class StaticMesh; +class StaticMeshComponent; constexpr const COLOR gizmo_color[size_t(GizmoColor::RANGE_SIZE)]= { @@ -37,6 +38,6 @@ constexpr const float GIZMO_TWO_AXIS_OFFSET =5.0F; Mesh *GetGizmoRenderable(const GizmoShape &gs,const GizmoColor &); -StaticMesh *CreateGizmoStaticMesh(SceneNode *); +StaticMeshComponent *CreateGizmoStaticMeshComponent(SceneNode *); VK_NAMESPACE_END diff --git a/inc/hgl/component/Component.h b/inc/hgl/component/Component.h index 4e71ecbe..51fff872 100644 --- a/inc/hgl/component/Component.h +++ b/inc/hgl/component/Component.h @@ -103,7 +103,7 @@ public: public: - virtual Component * CreateComponent(SceneNode *,ComponentData *)=0; + virtual Component * CreateComponent(ComponentData *)=0; int GetComponentCount()const{return component_set.GetCount();} diff --git a/inc/hgl/component/StaticMeshComponent.h b/inc/hgl/component/StaticMeshComponent.h index 966760ec..77c226af 100644 --- a/inc/hgl/component/StaticMeshComponent.h +++ b/inc/hgl/component/StaticMeshComponent.h @@ -7,7 +7,19 @@ COMPONENT_NAMESPACE_BEGIN struct StaticMeshComponentData:public ComponentData { - Mesh *renderable; + Mesh *mesh; + +public: + + StaticMeshComponentData() + { + mesh=nullptr; + } + + StaticMeshComponentData(Mesh *m) + { + mesh=m; + } };//struct StaticMeshComponentData class StaticMeshComponent; @@ -31,9 +43,24 @@ public: StaticMeshComponentManager()=default; - StaticMeshComponent *CreateStaticMeshComponent(SceneNode *psn,StaticMeshComponentData *data); + StaticMeshComponent *CreateStaticMeshComponent(StaticMeshComponentData *data) + { + if(!data)return(nullptr); - virtual Component *CreateComponent(SceneNode *psn,ComponentData *data) override; + return(new StaticMeshComponent(data)); + } + + StaticMeshComponent *CreateStaticMeshComponent(Mesh *m) + { + return CreateStaticMeshComponent(new StaticMeshComponentData(m)); + } + + virtual Component *CreateComponent(ComponentData *data) override + { + if(!data)return(nullptr); + + return CreateStaticMeshComponent(reinterpret_cast(data)); + } };//class StaticMeshComponentManager class StaticMeshComponent:public PrimitiveComponent @@ -42,10 +69,10 @@ class StaticMeshComponent:public PrimitiveComponent public: - StaticMeshComponent(SceneNode *psn,ComponentData *cd,ComponentManager *cm) + StaticMeshComponent(SceneNode *psn,StaticMeshComponentData *cd,StaticMeshComponentManager *cm) :PrimitiveComponent(psn,cd,cm) { - sm_data=reinterpret_cast(cd); + sm_data=cd; } virtual ~StaticMeshComponent()=default; diff --git a/inc/hgl/graph/VK.h b/inc/hgl/graph/VK.h index 957e5a29..aaa542ef 100644 --- a/inc/hgl/graph/VK.h +++ b/inc/hgl/graph/VK.h @@ -135,7 +135,7 @@ class IndirectDispatchBuffer; class RenderResource; -class StaticMesh; +class StaticMeshComponent; class SceneNode; class Scene; diff --git a/src/SceneGraph/component/StaticMeshComponentManager.cpp b/src/SceneGraph/component/StaticMeshComponentManager.cpp index 70b91519..4e8cb526 100644 --- a/src/SceneGraph/component/StaticMeshComponentManager.cpp +++ b/src/SceneGraph/component/StaticMeshComponentManager.cpp @@ -3,20 +3,5 @@ COMPONENT_NAMESPACE_BEGIN -StaticMeshComponent *StaticMeshComponentManager::CreateStaticMeshComponent(SceneNode *psn,StaticMeshComponentData *data) -{ - if(!psn||!data)return(nullptr); - - StaticMeshComponent *smc=new StaticMeshComponent(psn,data,this); - - psn->AddComponent(smc); - - return smc; -} - -Component *StaticMeshComponentManager::CreateComponent(SceneNode *psn,ComponentData *data) -{ - return CreateStaticMeshComponent(psn,reinterpret_cast(data)); -} COMPONENT_NAMESPACE_END