From 4e4de3430efd331bdb4a4108d14c16b3df10d6cf Mon Sep 17 00:00:00 2001 From: Bastiaan Olij Date: Sun, 19 Dec 2021 14:51:10 +1100 Subject: [PATCH] Fix size issue for ARVR managed viewport --- servers/visual/visual_server_viewport.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/servers/visual/visual_server_viewport.cpp b/servers/visual/visual_server_viewport.cpp index 9ab26cf544ba..0aec6521459b 100644 --- a/servers/visual/visual_server_viewport.cpp +++ b/servers/visual/visual_server_viewport.cpp @@ -288,6 +288,17 @@ void VisualServerViewport::draw_viewports() { ERR_CONTINUE(!vp->render_target.is_valid()); + if (vp->use_arvr) { + // In ARVR mode it is our interface that controls our size + if (arvr_interface.is_valid()) { + // override our size, make sure it matches our required size + vp->size = arvr_interface->get_render_targetsize(); + } else { + // reset this, we can't render the output without a valid interface (this will likely be so when we're in the editor) + vp->size = Vector2(0, 0); + } + } + bool visible = vp->viewport_to_screen_rect != Rect2() || vp->update_mode == VS::VIEWPORT_UPDATE_ALWAYS || vp->update_mode == VS::VIEWPORT_UPDATE_ONCE || (vp->update_mode == VS::VIEWPORT_UPDATE_WHEN_VISIBLE && VSG::storage->render_target_was_used(vp->render_target)); visible = visible && vp->size.x > 1 && vp->size.y > 1; @@ -298,8 +309,6 @@ void VisualServerViewport::draw_viewports() { VSG::storage->render_target_clear_used(vp->render_target); if (vp->use_arvr && arvr_interface.is_valid()) { - // override our size, make sure it matches our required size - vp->size = arvr_interface->get_render_targetsize(); VSG::storage->render_target_set_size(vp->render_target, vp->size.x, vp->size.y); // render mono or left eye first