diff options
author | Bastiaan Olij <mux213@gmail.com> | 2021-09-28 12:15:00 +1000 |
---|---|---|
committer | Bastiaan Olij <mux213@gmail.com> | 2021-09-28 12:25:15 +1000 |
commit | 0623d3676bd86a5eb4319b273642ad0504a49c33 (patch) | |
tree | 2a8c7497be42989b5183e5270c64a4ac9df4b646 /modules/mobile_vr | |
parent | 4f4f73b82fe00169f8776f3e41966abdb5c60349 (diff) | |
download | redot-engine-0623d3676bd86a5eb4319b273642ad0504a49c33.tar.gz |
Improve unregistering XR interfaces so we don't get crashes in GDExtensions by destroying the XRServer too early
Diffstat (limited to 'modules/mobile_vr')
-rw-r--r-- | modules/mobile_vr/register_types.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/modules/mobile_vr/register_types.cpp b/modules/mobile_vr/register_types.cpp index 47d1fe482c..233c16531a 100644 --- a/modules/mobile_vr/register_types.cpp +++ b/modules/mobile_vr/register_types.cpp @@ -32,15 +32,30 @@ #include "mobile_vr_interface.h" +Ref<MobileVRInterface> mobile_vr; + void register_mobile_vr_types() { GDREGISTER_CLASS(MobileVRInterface); if (XRServer::get_singleton()) { - Ref<MobileVRInterface> mobile_vr; mobile_vr.instantiate(); XRServer::get_singleton()->add_interface(mobile_vr); } } void unregister_mobile_vr_types() { + if (mobile_vr.is_valid()) { + // uninitialise our interface if it is initialised + if (mobile_vr->is_initialized()) { + mobile_vr->uninitialize(); + } + + // unregister our interface from the XR server + if (XRServer::get_singleton()) { + XRServer::get_singleton()->remove_interface(mobile_vr); + } + + // and release + mobile_vr.unref(); + } } |