free resources on app destruction
This commit is contained in:
@@ -1079,6 +1079,22 @@ void Canvas::resize(int width, int height)
|
||||
m_smask.create(width, height, "mask");
|
||||
m_unsaved = true;
|
||||
}
|
||||
|
||||
void Canvas::destroy()
|
||||
{
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
m_tmp[i].destroy();
|
||||
m_tmp_dual[i].destroy();
|
||||
m_tex[i].destroy();
|
||||
m_tex2[i].destroy();
|
||||
}
|
||||
for (auto& l : m_layers)
|
||||
l.destroy();
|
||||
m_smask.destroy();
|
||||
m_mixer.destroy();
|
||||
}
|
||||
|
||||
bool Canvas::create(int width, int height)
|
||||
{
|
||||
m_width = width;
|
||||
@@ -1097,7 +1113,7 @@ bool Canvas::create(int width, int height)
|
||||
m_tex[i].create(width, height, GL_RGBA32F);
|
||||
m_sampler_brush.create(GL_LINEAR, GL_CLAMP_TO_BORDER);
|
||||
#endif
|
||||
m_tex2[i].create(width, height, GL_RGBA8); // TODO: destroy before recreating
|
||||
m_tex2[i].create(width, height, GL_RGBA8);
|
||||
}
|
||||
m_sampler.create(GL_NEAREST);
|
||||
m_sampler.create(GL_LINEAR);
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
class Layer
|
||||
{
|
||||
public:
|
||||
//Layer() = default;
|
||||
//Layer(const Layer&) = delete;
|
||||
RTT m_rtt[6];
|
||||
glm::vec4 m_dirty_box[6] = SIXPLETTE(glm::vec4(0));
|
||||
bool m_dirty_face[6] = SIXPLETTE(false);
|
||||
@@ -223,6 +225,8 @@ public:
|
||||
std::vector<Layer::Snapshot> m_layers_snapshot;
|
||||
|
||||
Canvas() { I = this; }
|
||||
~Canvas() { destroy(); }
|
||||
void destroy();
|
||||
bool create(int width, int height);
|
||||
void resize(int width, int height);
|
||||
void layer_remove(int idx);
|
||||
|
||||
@@ -34,6 +34,8 @@ bool Vive::Initialize()
|
||||
void Vive::Terminate()
|
||||
{
|
||||
vr::VR_Shutdown();
|
||||
for (int eye = 0; eye < 2; ++eye)
|
||||
m_eyes[eye].destroy();
|
||||
}
|
||||
|
||||
void Vive::Update()
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
|
||||
void LayoutManager::unload()
|
||||
{
|
||||
for (auto& l : m_layouts)
|
||||
l.second->destroy_immediate();
|
||||
m_layouts.clear();
|
||||
}
|
||||
|
||||
|
||||
11
src/node.cpp
11
src/node.cpp
@@ -72,6 +72,12 @@ void Node::destroy()
|
||||
key_release();
|
||||
}
|
||||
|
||||
void Node::destroy_immediate()
|
||||
{
|
||||
for (auto c : m_children)
|
||||
c->destroy_immediate();
|
||||
}
|
||||
|
||||
Node* Node::root()
|
||||
{
|
||||
|
||||
@@ -485,7 +491,7 @@ Node::Node(Node&& o)
|
||||
m_flood_events = o.m_flood_events;
|
||||
m_force_mouse_capture = o.m_force_mouse_capture;
|
||||
m_capture_children = o.m_capture_children;
|
||||
m_destroyed = o.m_destroyed;
|
||||
m_destroyed = false;// o.m_destroyed;
|
||||
|
||||
m_scale = o.m_scale;
|
||||
m_pos_origin = o.m_pos_origin;
|
||||
@@ -767,6 +773,7 @@ void Node::update_internal(const glm::vec2& origin, const glm::mat4& proj)
|
||||
{
|
||||
if (m_children[i]->m_destroyed)
|
||||
{
|
||||
m_children[i]->destroy_immediate();
|
||||
remove_child(m_children[i].get());
|
||||
i--;
|
||||
}
|
||||
@@ -1118,7 +1125,7 @@ void Node::clone_copy(Node* dest) const
|
||||
dest->m_mvp = m_mvp;
|
||||
dest->m_mouse_inside = m_mouse_inside;
|
||||
dest->m_capture_children = m_capture_children;
|
||||
dest->m_destroyed = m_destroyed;
|
||||
dest->m_destroyed = false;// m_destroyed;
|
||||
dest->m_scale = m_scale;
|
||||
dest->m_pos_origin = m_pos_origin;
|
||||
dest->m_pos_offset = m_pos_offset;
|
||||
|
||||
@@ -184,6 +184,7 @@ public:
|
||||
virtual void clone_finalize(Node* dest) const;;
|
||||
void watch(std::function<bool(Node*)> observer);
|
||||
void destroy();
|
||||
virtual void destroy_immediate();
|
||||
Node* root();
|
||||
|
||||
template<class T = Node> T* find(const char* ids)
|
||||
|
||||
@@ -523,3 +523,14 @@ void NodeCanvas::reset_camera()
|
||||
m_canvas->m_cam_fov = 85;
|
||||
m_canvas->m_pan = {0, 0};
|
||||
}
|
||||
|
||||
void NodeCanvas::destroy_immediate()
|
||||
{
|
||||
Node::destroy_immediate();
|
||||
m_blender_rtt.destroy();
|
||||
m_cache_rtt.destroy();
|
||||
m_blender_bg.destroy();
|
||||
m_face_plane.destroy();
|
||||
m_line.destroy();
|
||||
m_grid.destroy();
|
||||
}
|
||||
|
||||
@@ -23,5 +23,6 @@ public:
|
||||
virtual void draw() override;
|
||||
virtual void handle_resize(glm::vec2 old_size, glm::vec2 new_size) override;
|
||||
virtual kEventResult handle_event(Event* e) override;
|
||||
virtual void destroy_immediate() override;
|
||||
void reset_camera();
|
||||
};
|
||||
|
||||
@@ -143,6 +143,8 @@ bool NodePanelStroke::import_abr(const std::string& path)
|
||||
async_update();
|
||||
async_end();
|
||||
//save();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void NodePanelStroke::update_controls()
|
||||
|
||||
@@ -30,7 +30,6 @@ void NodeStrokePreview::clone_finalize(Node* dest) const
|
||||
|
||||
void NodeStrokePreview::init_controls()
|
||||
{
|
||||
m_mesh.create();
|
||||
m_sampler_linear.create();
|
||||
m_sampler_linear_repeat.create(GL_LINEAR, GL_REPEAT);
|
||||
m_sampler_mipmap.create();
|
||||
@@ -470,3 +469,14 @@ void NodeStrokePreview::handle_resize(glm::vec2 old_size, glm::vec2 new_size)
|
||||
|
||||
draw_stroke();
|
||||
}
|
||||
|
||||
void NodeStrokePreview::destroy_immediate()
|
||||
{
|
||||
Node::destroy_immediate();
|
||||
m_rtt.destroy();
|
||||
m_rtt_mixer.destroy();
|
||||
m_tex.destroy();
|
||||
m_tex_dual.destroy();
|
||||
m_tex_background.destroy();
|
||||
m_brush_shape.destroy();
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ class NodeStrokePreview : public NodeBorder
|
||||
Sampler m_sampler_linear;
|
||||
Sampler m_sampler_linear_repeat;
|
||||
Sampler m_sampler_mipmap;
|
||||
BrushMesh m_mesh;
|
||||
DynamicShape m_brush_shape;
|
||||
public:
|
||||
std::shared_ptr<Brush> m_brush;
|
||||
@@ -45,4 +44,5 @@ public:
|
||||
void draw_stroke();
|
||||
virtual void draw() override;
|
||||
virtual void handle_resize(glm::vec2 old_size, glm::vec2 new_size) override;
|
||||
virtual void destroy_immediate() override;
|
||||
};
|
||||
|
||||
@@ -14,7 +14,9 @@ RTT::RTT()
|
||||
|
||||
RTT::~RTT()
|
||||
{
|
||||
destroy();
|
||||
//destroy();
|
||||
if (texID || rboID || fboID)
|
||||
LOG("RTT not destroyed");
|
||||
}
|
||||
|
||||
void RTT::resize(int width, int height)
|
||||
|
||||
Reference in New Issue
Block a user