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/webxr/register_types.cpp | |
| 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/webxr/register_types.cpp')
| -rw-r--r-- | modules/webxr/register_types.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/modules/webxr/register_types.cpp b/modules/webxr/register_types.cpp index 078a6547cf..16b483c39e 100644 --- a/modules/webxr/register_types.cpp +++ b/modules/webxr/register_types.cpp @@ -33,15 +33,34 @@ #include "webxr_interface.h" #include "webxr_interface_js.h" +#ifdef JAVASCRIPT_ENABLED +Ref<WebXRInterfaceJS> webxr; +#endif + void register_webxr_types() { GDREGISTER_VIRTUAL_CLASS(WebXRInterface); #ifdef JAVASCRIPT_ENABLED - Ref<WebXRInterfaceJS> webxr; webxr.instantiate(); XRServer::get_singleton()->add_interface(webxr); #endif } void unregister_webxr_types() { +#ifdef JAVASCRIPT_ENABLED + if (webxr.is_valid()) { + // uninitialise our interface if it is initialised + if (webxr->is_initialized()) { + webxr->uninitialize(); + } + + // unregister our interface from the XR server + if (XRServer::get_singleton()) { + XRServer::get_singleton()->remove_interface(webxr); + } + + // and release + webxr.unref(); + } +#endif } |
