diff options
author | Juan Linietsky <reduzio@gmail.com> | 2018-01-06 19:05:34 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2018-01-06 19:06:04 -0300 |
commit | bfeaf27a3e41cd60ec7be4c1d88a3edd2c2a6d87 (patch) | |
tree | 6ec098fb30ffebac652838b9cd38abaa866306ea | |
parent | 59f92e46b9271ed6c5e45f00961fb6066df8339a (diff) |
Properly dispose of instance capture data, fixes #14795
-rw-r--r-- | drivers/gles3/rasterizer_storage_gles3.cpp | 2 | ||||
-rw-r--r-- | servers/visual/visual_server_scene.cpp | 2 |
2 files changed, 3 insertions, 1 deletions
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<InstanceLightmapCaptureData *>(((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()); |