Преглед изворни кода

Fix leaking environment RIDs in GLES2

This PR adds the code necessary to correctly free environments in GLES2, which was previously missing causing them to leak.

(cherry picked from commit 7134ef90bbe71a2ffd52d29f473a0789dbaa41fb)
lawnjelly пре 3 година
родитељ
комит
cd371c45b7
1 измењених фајлова са 7 додато и 0 уклоњено
  1. 7 0
      drivers/gles2/rasterizer_scene_gles2.cpp

+ 7 - 0
drivers/gles2/rasterizer_scene_gles2.cpp

@@ -3854,6 +3854,7 @@ bool RasterizerSceneGLES2::free(RID p_rid) {
 		shadow_atlas_set_size(p_rid, 0);
 		shadow_atlas_set_size(p_rid, 0);
 		shadow_atlas_owner.free(p_rid);
 		shadow_atlas_owner.free(p_rid);
 		memdelete(shadow_atlas);
 		memdelete(shadow_atlas);
+
 	} else if (reflection_probe_instance_owner.owns(p_rid)) {
 	} else if (reflection_probe_instance_owner.owns(p_rid)) {
 		ReflectionProbeInstance *reflection_instance = reflection_probe_instance_owner.get(p_rid);
 		ReflectionProbeInstance *reflection_instance = reflection_probe_instance_owner.get(p_rid);
 
 
@@ -3871,6 +3872,12 @@ bool RasterizerSceneGLES2::free(RID p_rid) {
 		reflection_probe_instance_owner.free(p_rid);
 		reflection_probe_instance_owner.free(p_rid);
 		memdelete(reflection_instance);
 		memdelete(reflection_instance);
 
 
+	} else if (environment_owner.owns(p_rid)) {
+		Environment *environment = environment_owner.get(p_rid);
+
+		environment_owner.free(p_rid);
+		memdelete(environment);
+
 	} else {
 	} else {
 		return false;
 		return false;
 	}
 	}