优化SceneNode/RenderList,不再使用new

This commit is contained in:
hyzboy 2019-05-27 20:05:22 +08:00
parent dad5724874
commit e7dcc6b60b

View File

@ -1,7 +1,8 @@
// 3.Geometry2D // 3.Geometry2D
// 该范例有两个作用: // 该范例有两个作用:
// 一、测试绘制2D几何体 // 一、测试绘制2D几何体
// 二、试验动态合并材质渲染机制、包括普通合并与Instance // 二、试验动态合并材质渲染机制
// 三、试验SceneDB/SceneGraph
#include"VulkanAppFramework.h" #include"VulkanAppFramework.h"
#include<hgl/filesystem/FileSystem.h> #include<hgl/filesystem/FileSystem.h>
@ -31,8 +32,8 @@ private:
uint swap_chain_count=0; uint swap_chain_count=0;
SceneDB * db =nullptr; SceneDB * db =nullptr;
SceneNode * render_root =nullptr; SceneNode render_root;
RenderList * render_list =nullptr; RenderList render_list;
vulkan::Material * material =nullptr; vulkan::Material * material =nullptr;
vulkan::DescriptorSets * descriptor_sets =nullptr; vulkan::DescriptorSets * descriptor_sets =nullptr;
@ -50,8 +51,6 @@ public:
~TestApp() ~TestApp()
{ {
SAFE_CLEAR(render_list);
SAFE_CLEAR(render_root);
SAFE_CLEAR(db); SAFE_CLEAR(db);
SAFE_CLEAR_OBJECT_ARRAY(cmd_buf,swap_chain_count); SAFE_CLEAR_OBJECT_ARRAY(cmd_buf,swap_chain_count);
@ -147,14 +146,11 @@ private:
bool InitScene() bool InitScene()
{ {
render_root=new SceneNode(); render_root.Add(db->CreateRenderableInstance(pipeline,descriptor_sets,ro_rectangle));
render_list=new RenderList(); render_root.Add(db->CreateRenderableInstance(pipeline,descriptor_sets,ro_round_rectangle));
render_root.Add(db->CreateRenderableInstance(pipeline,descriptor_sets,ro_circle));
render_root->Add(db->CreateRenderableInstance(pipeline,descriptor_sets,ro_rectangle)); render_root.ExpendToList(&render_list);
render_root->Add(db->CreateRenderableInstance(pipeline,descriptor_sets,ro_round_rectangle));
render_root->Add(db->CreateRenderableInstance(pipeline,descriptor_sets,ro_circle));
render_root->ExpendToList(render_list);
return(true); return(true);
} }
@ -172,7 +168,7 @@ private:
cmd_buf[i]->Begin(); cmd_buf[i]->Begin();
cmd_buf[i]->BeginRenderPass(device->GetRenderPass(),device->GetFramebuffer(i)); cmd_buf[i]->BeginRenderPass(device->GetRenderPass(),device->GetFramebuffer(i));
render_list->Render(cmd_buf[i]); render_list.Render(cmd_buf[i]);
cmd_buf[i]->EndRenderPass(); cmd_buf[i]->EndRenderPass();
cmd_buf[i]->End(); cmd_buf[i]->End();
} }