Fix a crash bug in LightmapGI::_assign_lightmaps triggered after reparenting

After reparenting the LightmapGI node, the following `node` would be
initialized to null:

Node *node = get_node(light_data->get_user_path(i));

Which would then crash when de-referenced further down. This fix detects
which the node has been reparented and clears its users.
This commit is contained in:
James 2025-01-20 22:09:56 +00:00 committed by Rémi Verschelde
parent c394eaa45c
commit 80096e9e62
2 changed files with 7 additions and 0 deletions

View File

@ -1491,11 +1491,17 @@ void LightmapGI::_notification(int p_what) {
"%s (%s): The directional lightmap textures are stored in a format that isn't supported anymore. Please bake lightmaps again to make lightmaps display from this node again.",
get_light_data()->get_path(), get_name()));
if (last_owner && last_owner != get_owner()) {
light_data->clear_users();
}
_assign_lightmaps();
}
} break;
case NOTIFICATION_EXIT_TREE: {
last_owner = get_owner();
if (light_data.is_valid()) {
_clear_lightmaps();
}

View File

@ -206,6 +206,7 @@ private:
Ref<CameraAttributes> camera_attributes;
Ref<LightmapGIData> light_data;
Node *last_owner = nullptr;
struct LightsFound {
Transform3D xform;