[WIP] render gizmo_move, but model is incorrect.

This commit is contained in:
hyzboy 2024-07-30 00:47:28 +08:00
parent 28fcdb6216
commit f2a6c61c25
7 changed files with 62 additions and 38 deletions

View File

@ -29,9 +29,10 @@ enum class GizmoShape:uint
ENUM_CLASS_RANGE(Plane,Cylinder) ENUM_CLASS_RANGE(Plane,Cylinder)
}; };
bool InitGizmoResource(GPUDevice *); bool InitGizmoResource(RenderResource *);
void FreeGizmoResource(); void FreeGizmoResource();
StaticMesh *GetGizmoMoveStaticMesh(); StaticMesh *GetGizmoMoveStaticMesh();
VK_NAMESPACE_END VK_NAMESPACE_END

View File

@ -84,6 +84,7 @@ namespace
mtl::Material3DCreateConfig cfg(device->GetDeviceAttribute(),"VertexLuminance3D",Prim::Lines); mtl::Material3DCreateConfig cfg(device->GetDeviceAttribute(),"VertexLuminance3D",Prim::Lines);
cfg.mtl_name="VertexLuminance3D"; //注意必须用不同名字,未来改名材质文件名+cfg hash名 cfg.mtl_name="VertexLuminance3D"; //注意必须用不同名字,未来改名材质文件名+cfg hash名
cfg.local_to_world=true;
cfg.position_format=VAT_VEC3; cfg.position_format=VAT_VEC3;
mtl::MaterialCreateInfo *mci=CreateVertexLuminance3D(&cfg); mtl::MaterialCreateInfo *mci=CreateVertexLuminance3D(&cfg);
@ -94,6 +95,8 @@ namespace
gizmo_line.mtl=gizmo_rr->CreateMaterial(mci); gizmo_line.mtl=gizmo_rr->CreateMaterial(mci);
if(!gizmo_line.mtl) if(!gizmo_line.mtl)
return(false); return(false);
gizmo_line.mtl->Update();
} }
{ {
@ -145,6 +148,8 @@ namespace
gizmo_triangle.mtl=gizmo_rr->CreateMaterial(mci); gizmo_triangle.mtl=gizmo_rr->CreateMaterial(mci);
if(!gizmo_triangle.mtl) if(!gizmo_triangle.mtl)
return(false); return(false);
gizmo_triangle.mtl->Update();
} }
{ {
@ -228,12 +233,17 @@ namespace
} }
}//namespace }//namespace
bool InitGizmoResource(GPUDevice *device) bool InitGizmoResource(RenderResource *rr)
{ {
if(!rr)
return(false);
if(gizmo_rr) if(gizmo_rr)
return(false); return(false);
gizmo_rr=new RenderResource(device); gizmo_rr=rr;
GPUDevice *device=gizmo_rr->GetDevice();
if(!InitGizmoResource3D(device)) if(!InitGizmoResource3D(device))
return(false); return(false);
@ -258,10 +268,9 @@ void FreeGizmoResource()
SAFE_CLEAR(gizmo_triangle.prim_creater); SAFE_CLEAR(gizmo_triangle.prim_creater);
SAFE_CLEAR(gizmo_triangle.vdm); SAFE_CLEAR(gizmo_triangle.vdm);
// SAFE_CLEAR(gizmo_pipeline_triangles);
// SAFE_CLEAR_OBJECT_ARRAY(gizmo_mi_triangles) SAFE_CLEAR(gizmo_line.prim_creater);
//SAFE_CLEAR(gizmo_mtl_triangles); SAFE_CLEAR(gizmo_line.vdm);
SAFE_CLEAR(gizmo_rr);
} }
Renderable *GetGizmoRenderable(const GizmoShape &shape,const GizmoColor &color) Renderable *GetGizmoRenderable(const GizmoShape &shape,const GizmoColor &color)
@ -283,7 +292,7 @@ StaticMesh *CreateGizmoStaticMesh(SceneNode *root_node)
if(root_node->IsEmpty()) if(root_node->IsEmpty())
return(nullptr); return(nullptr);
return CreateRRObject<StaticMesh>(gizmo_rr,root_node); return(new StaticMesh(root_node));
} }
VK_NAMESPACE_END VK_NAMESPACE_END

View File

@ -12,7 +12,7 @@ private:
bool InitGizmo() bool InitGizmo()
{ {
if(!InitGizmoResource(device)) if(!InitGizmoResource(db))
return(false); return(false);
sm=GetGizmoMoveStaticMesh(); sm=GetGizmoMoveStaticMesh();
@ -34,8 +34,11 @@ public:
camera_control->SetTarget(Vector3f(0,0,0)); camera_control->SetTarget(Vector3f(0,0,0));
camera_control->Refresh(); camera_control->Refresh();
render_root.RefreshMatrix(); SceneNode *sn=sm->GetScene();
render_list->Expend(sm->GetScene());
sn->RefreshMatrix();
render_list->Expend(sn);
return(true); return(true);
} }

View File

@ -76,6 +76,14 @@ protected:
public: public:
virtual void BindRenderResource(RenderResource *rr)
{
if(!rr)
return;
rr->static_descriptor.AddUBO(mtl::SBS_ViewportInfo.name,ubo_vp_info);
}
virtual ~VulkanApplicationFramework() virtual ~VulkanApplicationFramework()
{ {
CloseShaderCompiler(); CloseShaderCompiler();
@ -152,10 +160,10 @@ public:
vp_info.Set(w,h); vp_info.Set(w,h);
ubo_vp_info=db->CreateUBO("Viewport",sizeof(ViewportInfo),&vp_info); ubo_vp_info=db->CreateUBO("Viewport",sizeof(ViewportInfo),&vp_info);
db->static_descriptor.AddUBO(mtl::SBS_ViewportInfo.name,ubo_vp_info);
} }
BindRenderResource(db);
return(true); return(true);
} }
@ -481,6 +489,15 @@ protected:
public: public:
virtual void BindRenderResource(RenderResource *rr) override
{
if(!rr)return;
VulkanApplicationFramework::BindRenderResource(rr);
rr->global_descriptor.AddUBO(mtl::SBS_CameraInfo.name,ubo_camera_info);
}
virtual ~CameraAppFramework() virtual ~CameraAppFramework()
{ {
SAFE_CLEAR(ckc); SAFE_CLEAR(ckc);
@ -494,6 +511,8 @@ public:
return(false); return(false);
InitCamera(w,h); InitCamera(w,h);
BindRenderResource(db);
return(true); return(true);
} }
@ -516,8 +535,6 @@ public:
RefreshCameraInfo(&camera_control->GetCameraInfo(),&vp_info,camera); RefreshCameraInfo(&camera_control->GetCameraInfo(),&vp_info,camera);
ubo_camera_info=db->CreateUBO("CameraInfo",sizeof(CameraInfo),&camera_control->GetCameraInfo()); ubo_camera_info=db->CreateUBO("CameraInfo",sizeof(CameraInfo),&camera_control->GetCameraInfo());
db->global_descriptor.AddUBO(mtl::SBS_CameraInfo.name,ubo_camera_info);
} }
void Resize(uint w,uint h)override void Resize(uint w,uint h)override

View File

@ -9,19 +9,14 @@ class StaticMesh
{ {
protected: protected:
RenderResource *rr;
SceneNode *root_node; SceneNode *root_node;
private:
StaticMesh(RenderResource *,SceneNode *);
public: public:
StaticMesh(SceneNode *);
virtual ~StaticMesh(); virtual ~StaticMesh();
static StaticMesh *CreateNewObject(RenderResource *,SceneNode *); // static StaticMesh *CreateNewObject(RenderResource *,SceneNode *);
public: public:

View File

@ -3,27 +3,24 @@
VK_NAMESPACE_BEGIN VK_NAMESPACE_BEGIN
StaticMesh *StaticMesh::CreateNewObject(RenderResource *rr,SceneNode *node) //StaticMesh *StaticMesh::CreateNewObject(RenderResource *rr,SceneNode *node)
//{
// if(!node)
// return(nullptr);
//
// if(node->IsEmpty())
// return(nullptr);
//
// return(new StaticMesh(rr,node));
//}
StaticMesh::StaticMesh(SceneNode *sn)
{ {
if(!node)
return(nullptr);
if(node->IsEmpty())
return(nullptr);
return(new StaticMesh(rr,node));
}
StaticMesh::StaticMesh(RenderResource *r,SceneNode *sn)
{
rr=r;
root_node=sn; root_node=sn;
} }
StaticMesh::~StaticMesh() StaticMesh::~StaticMesh()
{ {
rr->Release(this);
SAFE_CLEAR(root_node); SAFE_CLEAR(root_node);
} }

View File

@ -188,7 +188,9 @@ void DescriptorSet::Update()
{ {
if(!is_dirty)return; if(!is_dirty)return;
vkUpdateDescriptorSets(device,wds_list.GetCount(),wds_list.GetData(),0,nullptr); if(wds_list.GetCount()>0)
vkUpdateDescriptorSets(device,wds_list.GetCount(),wds_list.GetData(),0,nullptr);
is_dirty=false; is_dirty=false;
} }
VK_NAMESPACE_END VK_NAMESPACE_END