From bfeaf27a3e41cd60ec7be4c1d88a3edd2c2a6d87 Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Sat, 6 Jan 2018 19:05:34 -0300 Subject: Properly dispose of instance capture data, fixes #14795 --- drivers/gles3/rasterizer_storage_gles3.cpp | 2 ++ servers/visual/visual_server_scene.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/gles3/rasterizer_storage_gles3.cpp b/drivers/gles3/rasterizer_storage_gles3.cpp index 0a003ecce2..b63ebcba54 100644 --- a/drivers/gles3/rasterizer_storage_gles3.cpp +++ b/drivers/gles3/rasterizer_storage_gles3.cpp @@ -6906,6 +6906,7 @@ bool RasterizerStorageGLES3::free(RID p_rid) { // delete the texture GIProbe *gi_probe = gi_probe_owner.get(p_rid); + gi_probe->instance_remove_deps(); gi_probe_owner.free(p_rid); memdelete(gi_probe); @@ -6921,6 +6922,7 @@ bool RasterizerStorageGLES3::free(RID p_rid) { // delete the texture LightmapCapture *lightmap_capture = lightmap_capture_data_owner.get(p_rid); + lightmap_capture->instance_remove_deps(); gi_probe_owner.free(p_rid); memdelete(lightmap_capture); diff --git a/servers/visual/visual_server_scene.cpp b/servers/visual/visual_server_scene.cpp index 8dbb765f13..8d8bbb881f 100644 --- a/servers/visual/visual_server_scene.cpp +++ b/servers/visual/visual_server_scene.cpp @@ -659,7 +659,6 @@ void VisualServerScene::instance_set_use_lightmap(RID p_instance, RID p_lightmap Instance *instance = instance_owner.get(p_instance); ERR_FAIL_COND(!instance); - ERR_FAIL_COND(!is_geometry_instance(instance->base_type)); if (instance->lightmap_capture) { InstanceLightmapCaptureData *lightmap_capture = static_cast(((Instance *)instance->lightmap_capture)->base_data); @@ -3298,6 +3297,7 @@ bool VisualServerScene::free(RID p_rid) { Instance *instance = instance_owner.get(p_rid); + instance_set_use_lightmap(p_rid, RID(), RID()); instance_set_scenario(p_rid, RID()); instance_set_base(p_rid, RID()); instance_geometry_set_material_override(p_rid, RID()); -- cgit v1.2.3