1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-21 14:57:09 +00:00

Add missing layer provider setup when setting Surface after visibility

This commit is contained in:
Mauricio Narvaez
2025-07-22 15:03:12 -07:00
committed by Fredia Huya-Kouadio
parent e67074d0ab
commit ca798bf94d
2 changed files with 13 additions and 2 deletions

View File

@@ -245,7 +245,7 @@ void OpenXRCompositionLayer::_clear_composition_layer_provider() {
void OpenXRCompositionLayer::_on_openxr_session_begun() {
openxr_session_running = true;
if (is_natively_supported() && is_visible() && is_inside_tree()) {
if (_should_register()) {
_setup_composition_layer_provider();
}
if (!fallback && _should_use_fallback_node()) {
@@ -265,6 +265,10 @@ void OpenXRCompositionLayer::update_fallback_mesh() {
should_update_fallback_mesh = true;
}
bool OpenXRCompositionLayer::_should_register() {
return !registered && openxr_session_running && is_inside_tree() && is_visible() && is_natively_supported();
}
XrPosef OpenXRCompositionLayer::get_openxr_pose() {
Transform3D reference_frame = XRServer::get_singleton()->get_reference_frame();
Transform3D transform = reference_frame.inverse() * get_transform();
@@ -298,7 +302,7 @@ void OpenXRCompositionLayer::set_layer_viewport(SubViewport *p_viewport) {
}
layer_viewport = p_viewport;
if (!registered && is_natively_supported() && openxr_session_running && is_inside_tree() && is_visible()) {
if (_should_register()) {
_setup_composition_layer_provider();
}
@@ -328,8 +332,13 @@ void OpenXRCompositionLayer::set_use_android_surface(bool p_use_android_surface)
use_android_surface = p_use_android_surface;
if (use_android_surface) {
// It's possible that the layer provider is unregistered here (if previously invisible)
set_layer_viewport(nullptr);
openxr_layer_provider->set_use_android_surface(true, android_surface_size);
// ...and it may not be set up above because of viewport = null, android surface is false, so set it up again:
if (_should_register()) {
_setup_composition_layer_provider();
}
} else {
openxr_layer_provider->set_use_android_surface(false, Size2i());
}

View File

@@ -120,6 +120,8 @@ protected:
virtual void _on_openxr_session_begun();
virtual void _on_openxr_session_stopping();
bool _should_register();
virtual Ref<Mesh> _create_fallback_mesh() = 0;
void update_fallback_mesh();