[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)
};
bool InitGizmoResource(GPUDevice *);
bool InitGizmoResource(RenderResource *);
void FreeGizmoResource();
StaticMesh *GetGizmoMoveStaticMesh();
VK_NAMESPACE_END

View File

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

View File

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

View File

@ -76,6 +76,14 @@ protected:
public:
virtual void BindRenderResource(RenderResource *rr)
{
if(!rr)
return;
rr->static_descriptor.AddUBO(mtl::SBS_ViewportInfo.name,ubo_vp_info);
}
virtual ~VulkanApplicationFramework()
{
CloseShaderCompiler();
@ -152,10 +160,10 @@ public:
vp_info.Set(w,h);
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);
}
@ -481,6 +489,15 @@ protected:
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()
{
SAFE_CLEAR(ckc);
@ -494,6 +511,8 @@ public:
return(false);
InitCamera(w,h);
BindRenderResource(db);
return(true);
}
@ -516,8 +535,6 @@ public:
RefreshCameraInfo(&camera_control->GetCameraInfo(),&vp_info,camera);
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

View File

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

View File

@ -3,27 +3,24 @@
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;
}
StaticMesh::~StaticMesh()
{
rr->Release(this);
SAFE_CLEAR(root_node);
}

View File

@ -188,7 +188,9 @@ void DescriptorSet::Update()
{
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;
}
VK_NAMESPACE_END