@@ -245,7 +245,7 @@ void OpenXRCompositionLayer::_clear_composition_layer_provider() {
245
245
246
246
void OpenXRCompositionLayer::_on_openxr_session_begun () {
247
247
openxr_session_running = true ;
248
- if (is_natively_supported () && is_visible () && is_inside_tree ()) {
248
+ if (_should_register ()) {
249
249
_setup_composition_layer_provider ();
250
250
}
251
251
if (!fallback && _should_use_fallback_node ()) {
@@ -265,6 +265,10 @@ void OpenXRCompositionLayer::update_fallback_mesh() {
265
265
should_update_fallback_mesh = true ;
266
266
}
267
267
268
+ bool OpenXRCompositionLayer::_should_register () {
269
+ return !registered && openxr_session_running && is_inside_tree () && is_visible () && is_natively_supported ();
270
+ }
271
+
268
272
XrPosef OpenXRCompositionLayer::get_openxr_pose () {
269
273
Transform3D reference_frame = XRServer::get_singleton ()->get_reference_frame ();
270
274
Transform3D transform = reference_frame.inverse () * get_transform ();
@@ -298,7 +302,7 @@ void OpenXRCompositionLayer::set_layer_viewport(SubViewport *p_viewport) {
298
302
}
299
303
300
304
layer_viewport = p_viewport;
301
- if (!registered && is_natively_supported () && openxr_session_running && is_inside_tree () && is_visible ()) {
305
+ if (_should_register ()) {
302
306
_setup_composition_layer_provider ();
303
307
}
304
308
@@ -328,8 +332,13 @@ void OpenXRCompositionLayer::set_use_android_surface(bool p_use_android_surface)
328
332
329
333
use_android_surface = p_use_android_surface;
330
334
if (use_android_surface) {
335
+ // It's possible that the layer provider is unregistered here (if previously invisible)
331
336
set_layer_viewport (nullptr );
332
337
openxr_layer_provider->set_use_android_surface (true , android_surface_size);
338
+ // ...and it may not be set up above because of viewport = null, android surface is false, so set it up again:
339
+ if (_should_register ()) {
340
+ _setup_composition_layer_provider ();
341
+ }
333
342
} else {
334
343
openxr_layer_provider->set_use_android_surface (false , Size2i ());
335
344
}
0 commit comments