fix(renderer): drain threaded loads on shutdown
This commit is contained in:
@@ -2073,7 +2073,7 @@ func _wait_for_tile_tasks() -> void:
|
||||
var path: String = String(pending.get("path", ""))
|
||||
if not path.is_empty():
|
||||
var status := ResourceLoader.load_threaded_get_status(path)
|
||||
if status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
if status == ResourceLoader.THREAD_LOAD_IN_PROGRESS or status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
ResourceLoader.load_threaded_get(path)
|
||||
_tile_loading_tasks.clear()
|
||||
|
||||
@@ -2094,7 +2094,7 @@ func _wait_for_tile_tasks() -> void:
|
||||
if path.is_empty():
|
||||
continue
|
||||
var status := ResourceLoader.load_threaded_get_status(path)
|
||||
if status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
if status == ResourceLoader.THREAD_LOAD_IN_PROGRESS or status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
ResourceLoader.load_threaded_get(path)
|
||||
_m2_mesh_load_requests.clear()
|
||||
_m2_mesh_finalize_queue.clear()
|
||||
@@ -2105,7 +2105,7 @@ func _wait_for_tile_tasks() -> void:
|
||||
if path.is_empty():
|
||||
continue
|
||||
var status := ResourceLoader.load_threaded_get_status(path)
|
||||
if status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
if status == ResourceLoader.THREAD_LOAD_IN_PROGRESS or status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
ResourceLoader.load_threaded_get(path)
|
||||
_m2_animation_load_requests.clear()
|
||||
_m2_animation_finalize_queue.clear()
|
||||
@@ -2115,7 +2115,7 @@ func _wait_for_tile_tasks() -> void:
|
||||
if path.is_empty():
|
||||
continue
|
||||
var status := ResourceLoader.load_threaded_get_status(path)
|
||||
if status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
if status == ResourceLoader.THREAD_LOAD_IN_PROGRESS or status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
ResourceLoader.load_threaded_get(path)
|
||||
_wmo_scene_load_requests.clear()
|
||||
|
||||
@@ -2124,7 +2124,7 @@ func _wait_for_tile_tasks() -> void:
|
||||
if path.is_empty():
|
||||
continue
|
||||
var status := ResourceLoader.load_threaded_get_status(path)
|
||||
if status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
if status == ResourceLoader.THREAD_LOAD_IN_PROGRESS or status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
ResourceLoader.load_threaded_get(path)
|
||||
_wmo_render_load_requests.clear()
|
||||
_wmo_render_missing_cache.clear()
|
||||
@@ -2137,7 +2137,7 @@ func _wait_for_tile_tasks() -> void:
|
||||
if path.is_empty():
|
||||
continue
|
||||
var status := ResourceLoader.load_threaded_get_status(path)
|
||||
if status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
if status == ResourceLoader.THREAD_LOAD_IN_PROGRESS or status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
ResourceLoader.load_threaded_get(path)
|
||||
_terrain_upgrade_tasks.clear()
|
||||
|
||||
@@ -2148,7 +2148,7 @@ func _wait_for_tile_tasks() -> void:
|
||||
if path.is_empty():
|
||||
continue
|
||||
var status := ResourceLoader.load_threaded_get_status(path)
|
||||
if status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
if status == ResourceLoader.THREAD_LOAD_IN_PROGRESS or status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
ResourceLoader.load_threaded_get(path)
|
||||
_terrain_control_splat_cache_tasks.clear()
|
||||
|
||||
@@ -2162,7 +2162,7 @@ func _wait_for_tile_tasks() -> void:
|
||||
if path.is_empty():
|
||||
continue
|
||||
var status := ResourceLoader.load_threaded_get_status(path)
|
||||
if status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
if status == ResourceLoader.THREAD_LOAD_IN_PROGRESS or status == ResourceLoader.THREAD_LOAD_LOADED:
|
||||
ResourceLoader.load_threaded_get(path)
|
||||
_terrain_splat_cache_tasks.clear()
|
||||
_terrain_splat_result_mutex.lock()
|
||||
|
||||
@@ -2,6 +2,7 @@ extends SceneTree
|
||||
|
||||
const DEFAULT_MANIFEST_PATH := "res://src/tools/render_baseline_manifest.json"
|
||||
const M2_NATIVE_ANIMATED_BUILDER := preload("res://addons/mpq_extractor/loaders/m2_native_animated_builder.gd")
|
||||
const SHUTDOWN_DRAIN_FRAMES := 2
|
||||
|
||||
|
||||
func _initialize() -> void:
|
||||
@@ -167,6 +168,10 @@ func _capture_async() -> void:
|
||||
print("RENDER_BASELINE report=%s results=%d" % [report_path, captured])
|
||||
|
||||
world.queue_free()
|
||||
# SceneTree deletion is deferred. Allow the world and its queued children
|
||||
# to run their shutdown paths before engine teardown.
|
||||
for unused_frame in SHUTDOWN_DRAIN_FRAMES:
|
||||
await process_frame
|
||||
if captured <= 0:
|
||||
push_error("No checkpoints selected. --only filter was: %s" % only)
|
||||
quit(1)
|
||||
|
||||
Reference in New Issue
Block a user