Browse Source

Correctly check time since shadow was allocated in atlas to avoid unnecessary re-allocations

Co-authored-by: jitspoe <[email protected]>
(cherry picked from commit 1b5a15d5d1696099bf06bee5775606a7a50f3267)
clayjohn 9 tháng trước cách đây
mục cha
commit
2f88ea9d0e

+ 1 - 1
drivers/gles3/storage/light_storage.cpp

@@ -1385,7 +1385,7 @@ bool LightStorage::shadow_atlas_update_light(RID p_atlas, RID p_light_instance,
 		old_shadow = old_key & SHADOW_INDEX_MASK;
 
 		// Only re-allocate if a better option is available, and enough time has passed.
-		should_realloc = shadow_atlas->quadrants[old_quadrant].subdivision != (uint32_t)best_subdiv && (shadow_atlas->quadrants[old_quadrant].shadows[old_shadow].alloc_tick - tick > shadow_atlas_realloc_tolerance_msec);
+		should_realloc = shadow_atlas->quadrants[old_quadrant].subdivision != (uint32_t)best_subdiv && (tick - shadow_atlas->quadrants[old_quadrant].shadows[old_shadow].alloc_tick > shadow_atlas_realloc_tolerance_msec);
 		should_redraw = shadow_atlas->quadrants[old_quadrant].shadows[old_shadow].version != p_light_version;
 
 		if (!should_realloc) {

+ 1 - 1
servers/rendering/renderer_rd/storage_rd/light_storage.cpp

@@ -2289,7 +2289,7 @@ bool LightStorage::shadow_atlas_update_light(RID p_atlas, RID p_light_instance,
 		old_quadrant = (old_key >> QUADRANT_SHIFT) & 0x3;
 		old_shadow = old_key & SHADOW_INDEX_MASK;
 
-		should_realloc = shadow_atlas->quadrants[old_quadrant].subdivision != (uint32_t)best_subdiv && (shadow_atlas->quadrants[old_quadrant].shadows[old_shadow].alloc_tick - tick > shadow_atlas_realloc_tolerance_msec);
+		should_realloc = shadow_atlas->quadrants[old_quadrant].subdivision != (uint32_t)best_subdiv && (tick - shadow_atlas->quadrants[old_quadrant].shadows[old_shadow].alloc_tick > shadow_atlas_realloc_tolerance_msec);
 		should_redraw = shadow_atlas->quadrants[old_quadrant].shadows[old_shadow].version != p_light_version;
 
 		if (!should_realloc) {