summaryrefslogtreecommitdiff
path: root/servers/visual/visual_server_viewport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'servers/visual/visual_server_viewport.cpp')
-rw-r--r--servers/visual/visual_server_viewport.cpp29
1 files changed, 16 insertions, 13 deletions
diff --git a/servers/visual/visual_server_viewport.cpp b/servers/visual/visual_server_viewport.cpp
index 18742aa21d..fa2c461f36 100644
--- a/servers/visual/visual_server_viewport.cpp
+++ b/servers/visual/visual_server_viewport.cpp
@@ -520,26 +520,29 @@ void VisualServerViewport::viewport_set_shadow_atlas_quadrant_subdivision(RID p_
bool VisualServerViewport::free(RID p_rid) {
- Viewport * viewport = viewport_owner.getornull(p_rid);
- if (!viewport)
- return false;
+ if (viewport_owner.owns(p_rid)) {
+ Viewport * viewport = viewport_owner.getornull(p_rid);
- VSG::storage->free( viewport->render_target );
- VSG::scene_render->free( viewport->shadow_atlas );
- while(viewport->canvas_map.front()) {
- viewport_remove_canvas(p_rid,viewport->canvas_map.front()->key());
- }
+ VSG::storage->free( viewport->render_target );
+ VSG::scene_render->free( viewport->shadow_atlas );
+
+ while(viewport->canvas_map.front()) {
+ viewport_remove_canvas(p_rid,viewport->canvas_map.front()->key());
+ }
- viewport_set_scenario(p_rid,RID());
- active_viewports.erase(viewport);
+ viewport_set_scenario(p_rid,RID());
+ active_viewports.erase(viewport);
+
+ viewport_owner.free(p_rid);
+ memdelete(viewport);
- viewport_owner.free(p_rid);
- memdelete(viewport);
+ return true;
+ }
- return true;
+ return false;
}