You've already forked godot
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:
committed by
Fredia Huya-Kouadio
parent
e67074d0ab
commit
ca798bf94d
@@ -245,7 +245,7 @@ void OpenXRCompositionLayer::_clear_composition_layer_provider() {
|
|||||||
|
|
||||||
void OpenXRCompositionLayer::_on_openxr_session_begun() {
|
void OpenXRCompositionLayer::_on_openxr_session_begun() {
|
||||||
openxr_session_running = true;
|
openxr_session_running = true;
|
||||||
if (is_natively_supported() && is_visible() && is_inside_tree()) {
|
if (_should_register()) {
|
||||||
_setup_composition_layer_provider();
|
_setup_composition_layer_provider();
|
||||||
}
|
}
|
||||||
if (!fallback && _should_use_fallback_node()) {
|
if (!fallback && _should_use_fallback_node()) {
|
||||||
@@ -265,6 +265,10 @@ void OpenXRCompositionLayer::update_fallback_mesh() {
|
|||||||
should_update_fallback_mesh = true;
|
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() {
|
XrPosef OpenXRCompositionLayer::get_openxr_pose() {
|
||||||
Transform3D reference_frame = XRServer::get_singleton()->get_reference_frame();
|
Transform3D reference_frame = XRServer::get_singleton()->get_reference_frame();
|
||||||
Transform3D transform = reference_frame.inverse() * get_transform();
|
Transform3D transform = reference_frame.inverse() * get_transform();
|
||||||
@@ -298,7 +302,7 @@ void OpenXRCompositionLayer::set_layer_viewport(SubViewport *p_viewport) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
layer_viewport = 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();
|
_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;
|
use_android_surface = p_use_android_surface;
|
||||||
if (use_android_surface) {
|
if (use_android_surface) {
|
||||||
|
// It's possible that the layer provider is unregistered here (if previously invisible)
|
||||||
set_layer_viewport(nullptr);
|
set_layer_viewport(nullptr);
|
||||||
openxr_layer_provider->set_use_android_surface(true, android_surface_size);
|
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 {
|
} else {
|
||||||
openxr_layer_provider->set_use_android_surface(false, Size2i());
|
openxr_layer_provider->set_use_android_surface(false, Size2i());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,6 +120,8 @@ protected:
|
|||||||
virtual void _on_openxr_session_begun();
|
virtual void _on_openxr_session_begun();
|
||||||
virtual void _on_openxr_session_stopping();
|
virtual void _on_openxr_session_stopping();
|
||||||
|
|
||||||
|
bool _should_register();
|
||||||
|
|
||||||
virtual Ref<Mesh> _create_fallback_mesh() = 0;
|
virtual Ref<Mesh> _create_fallback_mesh() = 0;
|
||||||
|
|
||||||
void update_fallback_mesh();
|
void update_fallback_mesh();
|
||||||
|
|||||||
Reference in New Issue
Block a user