diff options
author | Hilderin <81109165+Hilderin@users.noreply.github.com> | 2024-09-14 23:28:39 -0400 |
---|---|---|
committer | Spartan322 <Megacake1234@gmail.com> | 2024-11-01 18:09:26 -0400 |
commit | 6caf86b369e1b16525a03dc1e183b029dc68bd80 (patch) | |
tree | 5675fb8819198132c106fc6d62a7f3c80b6ca431 | |
parent | 4322d3632b6436e62a7fb01176db9cf4d2672615 (diff) | |
download | redot-engine-6caf86b369e1b16525a03dc1e183b029dc68bd80.tar.gz |
Fix Viewport Texture must be set to use it
(cherry picked from commit c11107b1fbcb67181f03ec1105953fe4808649fd)
-rw-r--r-- | scene/main/viewport.cpp | 25 | ||||
-rw-r--r-- | scene/main/viewport.h | 1 |
2 files changed, 14 insertions, 12 deletions
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 36eac3b76f..979480635f 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -113,6 +113,9 @@ void ViewportTexture::set_viewport_path_in_scene(const NodePath &p_path) { if (get_local_scene() && !path.is_empty()) { setup_local_to_scene(); } else { + if (path.is_empty()) { + vp_changed = false; + } emit_changed(); } } @@ -123,9 +126,7 @@ NodePath ViewportTexture::get_viewport_path_in_scene() const { int ViewportTexture::get_width() const { if (!vp) { - if (!vp_pending) { - ERR_PRINT("Viewport Texture must be set to use it."); - } + _err_print_viewport_not_set(); return 0; } return vp->size.width; @@ -133,9 +134,7 @@ int ViewportTexture::get_width() const { int ViewportTexture::get_height() const { if (!vp) { - if (!vp_pending) { - ERR_PRINT("Viewport Texture must be set to use it."); - } + _err_print_viewport_not_set(); return 0; } return vp->size.height; @@ -143,9 +142,7 @@ int ViewportTexture::get_height() const { Size2 ViewportTexture::get_size() const { if (!vp) { - if (!vp_pending) { - ERR_PRINT("Viewport Texture must be set to use it."); - } + _err_print_viewport_not_set(); return Size2(); } return vp->size; @@ -165,14 +162,18 @@ bool ViewportTexture::has_alpha() const { Ref<Image> ViewportTexture::get_image() const { if (!vp) { - if (!vp_pending) { - ERR_PRINT("Viewport Texture must be set to use it."); - } + _err_print_viewport_not_set(); return Ref<Image>(); } return RS::get_singleton()->texture_2d_get(vp->texture_rid); } +void ViewportTexture::_err_print_viewport_not_set() const { + if (!vp_pending && !vp_changed) { + ERR_PRINT("Viewport Texture must be set to use it."); + } +} + void ViewportTexture::_setup_local_to_scene(const Node *p_loc_scene) { // Always reset this, even if this call fails with an error. vp_pending = false; diff --git a/scene/main/viewport.h b/scene/main/viewport.h index fecaf166c0..d417f5a9d4 100644 --- a/scene/main/viewport.h +++ b/scene/main/viewport.h @@ -65,6 +65,7 @@ class ViewportTexture : public Texture2D { bool vp_changed = false; void _setup_local_to_scene(const Node *p_loc_scene); + void _err_print_viewport_not_set() const; mutable RID proxy_ph; mutable RID proxy; |