Merge pull request #88807 from lawnjelly/portals_fix_enter_tree_order

[3.x] Portals - defer setting active in `VisualServer` until enter tree
This commit is contained in:
Rémi Verschelde 2024-04-19 10:24:37 +02:00 committed by GitHub
commit 1869243644
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -162,10 +162,13 @@ void Portal::_notification(int p_what) {
case NOTIFICATION_ENTER_WORLD: {
ERR_FAIL_COND(get_world().is_null());
// defer full creation of the visual server portal to when the editor portal is in the scene tree
// Defer full creation of the visual server portal to when the editor portal is in the scene tree.
VisualServer::get_singleton()->portal_set_scenario(_portal_rid, get_world()->get_scenario());
// we can't calculate world points until we have entered the tree
// Update any components in visual server that require the scenario to be set.
VisualServer::get_singleton()->portal_set_active(_portal_rid, _settings_active);
// We can't calculate world points until we have entered the tree.
portal_update();
update_gizmo();
@ -192,7 +195,14 @@ void Portal::_notification(int p_what) {
void Portal::set_portal_active(bool p_active) {
_settings_active = p_active;
VisualServer::get_singleton()->portal_set_active(_portal_rid, p_active);
// This can be called prior to entering the tree when loading packed scene,
// where the scenario has not yet been set (and thus the visual server portal
// is not yet fully created).
// We therefore defer setting this until entering the tree.
if (is_inside_tree()) {
VisualServer::get_singleton()->portal_set_active(_portal_rid, p_active);
}
}
bool Portal::get_portal_active() const {