diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml
index d5f2135a76..9f125f385a 100644
--- a/doc/classes/CanvasItem.xml
+++ b/doc/classes/CanvasItem.xml
@@ -789,7 +789,7 @@
Represents the size of the [enum TextureFilter] enum.
- The [CanvasItem] will inherit the filter from its parent.
+ The [CanvasItem] will inherit the repeat mode from its parent.
The texture does not repeat. Sampling the texture outside its extents will result in "stretching" of the edge pixels. You can avoid this by ensuring a 1-pixel fully transparent border on each side of the texture.
diff --git a/doc/classes/PopupMenu.xml b/doc/classes/PopupMenu.xml
index fb6a05c5fe..c2842dfbbb 100644
--- a/doc/classes/PopupMenu.xml
+++ b/doc/classes/PopupMenu.xml
@@ -659,6 +659,8 @@
If [code]true[/code], allows navigating [PopupMenu] with letter keys.
+
+
If [code]true[/code], hides the [PopupMenu] when a checkbox or radio button is selected.
diff --git a/doc/classes/PopupPanel.xml b/doc/classes/PopupPanel.xml
index 6967ed882f..34e2d21063 100644
--- a/doc/classes/PopupPanel.xml
+++ b/doc/classes/PopupPanel.xml
@@ -9,6 +9,8 @@
+
+
diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml
index c86a2cbe5a..eb70a0134b 100644
--- a/doc/classes/Viewport.xml
+++ b/doc/classes/Viewport.xml
@@ -768,7 +768,10 @@
The texture filter reads from the nearest pixel and blends between the nearest 2 mipmaps (or uses the nearest mipmap if [member ProjectSettings.rendering/textures/default_filters/use_nearest_mipmap_filter] is [code]true[/code]). This makes the texture look pixelated from up close, and smooth from a distance.
Use this for non-pixel art textures that may be viewed at a low scale (e.g. due to [Camera2D] zoom or sprite scaling), as mipmaps are important to smooth out pixels that are smaller than on-screen pixels.
-
+
+ The [Viewport] will inherit the filter from its parent [CanvasItem] or [Viewport].
+
+
Represents the size of the [enum DefaultCanvasItemTextureFilter] enum.
@@ -780,7 +783,10 @@
Flip the texture when repeating so that the edge lines up instead of abruptly changing.
-
+
+ The [Viewport] will inherit the repeat mode from its parent [CanvasItem] or [Viewport].
+
+
Represents the size of the [enum DefaultCanvasItemTextureRepeat] enum.
diff --git a/scene/gui/popup.cpp b/scene/gui/popup.cpp
index 25cf55ce94..e432d2b9e0 100644
--- a/scene/gui/popup.cpp
+++ b/scene/gui/popup.cpp
@@ -435,6 +435,8 @@ void PopupPanel::_bind_methods() {
PopupPanel::PopupPanel() {
set_flag(FLAG_TRANSPARENT, true);
+ set_default_canvas_item_texture_filter(Viewport::DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_PARENT_NODE);
+ set_default_canvas_item_texture_repeat(Viewport::DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_PARENT_NODE);
panel = memnew(Panel);
panel->set_anchors_and_offsets_preset(Control::PRESET_FULL_RECT);
diff --git a/scene/gui/popup_menu.cpp b/scene/gui/popup_menu.cpp
index 21abd20016..67c1acd441 100644
--- a/scene/gui/popup_menu.cpp
+++ b/scene/gui/popup_menu.cpp
@@ -3636,6 +3636,9 @@ void PopupMenu::set_visible(bool p_visible) {
PopupMenu::PopupMenu() {
set_flag(FLAG_TRANSPARENT, true);
+ set_default_canvas_item_texture_filter(Viewport::DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_PARENT_NODE);
+ set_default_canvas_item_texture_repeat(Viewport::DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_PARENT_NODE);
+
// The panel used to draw the panel style.
panel = memnew(PanelContainer);
panel->set_anchors_and_offsets_preset(Control::PRESET_FULL_RECT);
diff --git a/scene/main/canvas_item.cpp b/scene/main/canvas_item.cpp
index cbe8758492..849772e244 100644
--- a/scene/main/canvas_item.cpp
+++ b/scene/main/canvas_item.cpp
@@ -1664,11 +1664,17 @@ void CanvasItem::_update_texture_filter_changed(bool p_propagate) {
_update_self_texture_filter(texture_filter_cache);
if (p_propagate) {
- for (uint32_t n = 0; n < data.canvas_item_children.size(); n++) {
- CanvasItem *ci = data.canvas_item_children[n];
-
- if (!ci->top_level && ci->texture_filter == TEXTURE_FILTER_PARENT_NODE) {
- ci->_update_texture_filter_changed(true);
+ for (Node *c : iterate_children()) {
+ CanvasItem *child_ci = Object::cast_to(c);
+ if (child_ci) {
+ if (child_ci->texture_filter == CanvasItem::TEXTURE_FILTER_PARENT_NODE) {
+ child_ci->_update_texture_filter_changed(true);
+ }
+ continue;
+ }
+ Viewport *child_vp = Object::cast_to(c);
+ if (child_vp && child_vp->get_default_canvas_item_texture_filter() == Viewport::DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_PARENT_NODE) {
+ child_vp->_update_texture_filter_changed(true);
}
}
}
@@ -1720,10 +1726,17 @@ void CanvasItem::_update_texture_repeat_changed(bool p_propagate) {
_update_self_texture_repeat(texture_repeat_cache);
if (p_propagate) {
- for (uint32_t n = 0; n < data.canvas_item_children.size(); n++) {
- CanvasItem *ci = data.canvas_item_children[n];
- if (!ci->top_level && ci->texture_repeat == TEXTURE_REPEAT_PARENT_NODE) {
- ci->_update_texture_repeat_changed(true);
+ for (Node *c : iterate_children()) {
+ CanvasItem *child_ci = Object::cast_to(c);
+ if (child_ci) {
+ if (child_ci->texture_repeat == CanvasItem::TEXTURE_REPEAT_PARENT_NODE) {
+ child_ci->_update_texture_repeat_changed(true);
+ }
+ continue;
+ }
+ Viewport *child_vp = Object::cast_to(c);
+ if (child_vp && child_vp->get_default_canvas_item_texture_repeat() == Viewport::DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_PARENT_NODE) {
+ child_vp->_update_texture_repeat_changed(true);
}
}
}
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index 0abe57fae9..71e7c56b40 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -631,6 +631,8 @@ void Viewport::_notification(int p_what) {
set_physics_process_internal(true);
}
#endif // !defined(PHYSICS_2D_DISABLED) || !defined(PHYSICS_3D_DISABLED)
+ _update_texture_filter_changed(false);
+ _update_texture_repeat_changed(false);
} break;
case NOTIFICATION_READY: {
@@ -3995,6 +3997,70 @@ bool Viewport::is_handling_input_locally() const {
return handle_input_locally;
}
+void Viewport::_refresh_texture_filter_cache() const {
+ if (!is_inside_tree()) {
+ return;
+ }
+
+ switch (default_canvas_item_texture_filter) {
+ case DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_NEAREST: {
+ default_canvas_item_texture_filter_cache = RSE::CANVAS_ITEM_TEXTURE_FILTER_NEAREST;
+ } break;
+ case DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_LINEAR: {
+ default_canvas_item_texture_filter_cache = RSE::CANVAS_ITEM_TEXTURE_FILTER_LINEAR;
+ } break;
+ case DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS: {
+ default_canvas_item_texture_filter_cache = RSE::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS;
+ } break;
+ case DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS: {
+ default_canvas_item_texture_filter_cache = RSE::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS;
+ } break;
+ case DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_PARENT_NODE: {
+ Node *p = get_parent();
+ CanvasItem *parent_ci = Object::cast_to(p);
+ if (parent_ci) {
+ default_canvas_item_texture_filter_cache = (RenderingServerEnums::CanvasItemTextureFilter)parent_ci->get_texture_filter_in_tree();
+ if (default_canvas_item_texture_filter_cache == RSE::CANVAS_ITEM_TEXTURE_FILTER_DEFAULT) {
+ default_canvas_item_texture_filter_cache = RSE::CANVAS_ITEM_TEXTURE_FILTER_LINEAR;
+ }
+ break;
+ }
+ Viewport *parent_vp = Object::cast_to(p);
+ if (parent_vp) {
+ default_canvas_item_texture_filter_cache = (RenderingServerEnums::CanvasItemTextureFilter)parent_vp->get_texture_filter_in_tree();
+ break;
+ }
+ default_canvas_item_texture_filter_cache = RSE::CANVAS_ITEM_TEXTURE_FILTER_LINEAR;
+ } break;
+ default: {
+ }
+ }
+}
+
+void Viewport::_update_texture_filter_changed(bool p_propagate) {
+ if (!is_inside_tree()) {
+ return;
+ }
+ _refresh_texture_filter_cache();
+ RS::get_singleton()->viewport_set_default_canvas_item_texture_filter(viewport, default_canvas_item_texture_filter_cache);
+
+ if (p_propagate) {
+ for (Node *c : iterate_children()) {
+ CanvasItem *child_ci = Object::cast_to(c);
+ if (child_ci) {
+ if (child_ci->texture_filter == CanvasItem::TEXTURE_FILTER_PARENT_NODE) {
+ child_ci->_update_texture_filter_changed(true);
+ }
+ continue;
+ }
+ Viewport *child_vp = Object::cast_to(c);
+ if (child_vp && child_vp->default_canvas_item_texture_filter == Viewport::DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_PARENT_NODE) {
+ child_vp->_update_texture_filter_changed(true);
+ }
+ }
+ }
+}
+
void Viewport::set_default_canvas_item_texture_filter(DefaultCanvasItemTextureFilter p_filter) {
ERR_MAIN_THREAD_GUARD;
ERR_FAIL_INDEX(p_filter, DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_MAX);
@@ -4003,22 +4069,7 @@ void Viewport::set_default_canvas_item_texture_filter(DefaultCanvasItemTextureFi
return;
}
default_canvas_item_texture_filter = p_filter;
- switch (default_canvas_item_texture_filter) {
- case DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_NEAREST:
- RS::get_singleton()->viewport_set_default_canvas_item_texture_filter(viewport, RSE::CANVAS_ITEM_TEXTURE_FILTER_NEAREST);
- break;
- case DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_LINEAR:
- RS::get_singleton()->viewport_set_default_canvas_item_texture_filter(viewport, RSE::CANVAS_ITEM_TEXTURE_FILTER_LINEAR);
- break;
- case DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS:
- RS::get_singleton()->viewport_set_default_canvas_item_texture_filter(viewport, RSE::CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS);
- break;
- case DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS:
- RS::get_singleton()->viewport_set_default_canvas_item_texture_filter(viewport, RSE::CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS);
- break;
- default: {
- }
- }
+ _update_texture_filter_changed(true);
}
Viewport::DefaultCanvasItemTextureFilter Viewport::get_default_canvas_item_texture_filter() const {
@@ -4026,6 +4077,73 @@ Viewport::DefaultCanvasItemTextureFilter Viewport::get_default_canvas_item_textu
return default_canvas_item_texture_filter;
}
+RenderingServerEnums::CanvasItemTextureFilter Viewport::get_texture_filter_in_tree() const {
+ ERR_READ_THREAD_GUARD_V(RSE::CANVAS_ITEM_TEXTURE_FILTER_LINEAR);
+ _refresh_texture_filter_cache();
+ return default_canvas_item_texture_filter_cache;
+}
+
+void Viewport::_refresh_texture_repeat_cache() const {
+ if (!is_inside_tree()) {
+ return;
+ }
+
+ switch (default_canvas_item_texture_repeat) {
+ case DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_DISABLED: {
+ default_canvas_item_texture_repeat_cache = RSE::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED;
+ } break;
+ case DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_ENABLED: {
+ default_canvas_item_texture_repeat_cache = RSE::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED;
+ } break;
+ case DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_MIRROR: {
+ default_canvas_item_texture_repeat_cache = RSE::CANVAS_ITEM_TEXTURE_REPEAT_MIRROR;
+ } break;
+ case DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_PARENT_NODE: {
+ Node *p = get_parent();
+ CanvasItem *parent_ci = Object::cast_to(p);
+ if (parent_ci) {
+ default_canvas_item_texture_repeat_cache = (RenderingServerEnums::CanvasItemTextureRepeat)parent_ci->get_texture_repeat_in_tree();
+ if (default_canvas_item_texture_repeat_cache == RSE::CANVAS_ITEM_TEXTURE_REPEAT_DEFAULT) {
+ default_canvas_item_texture_repeat_cache = RSE::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED;
+ }
+ break;
+ }
+ Viewport *parent_vp = Object::cast_to(p);
+ if (parent_vp) {
+ default_canvas_item_texture_repeat_cache = (RenderingServerEnums::CanvasItemTextureRepeat)parent_vp->get_texture_repeat_in_tree();
+ break;
+ }
+ default_canvas_item_texture_repeat_cache = RSE::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED;
+ } break;
+ default: {
+ }
+ }
+}
+
+void Viewport::_update_texture_repeat_changed(bool p_propagate) {
+ if (!is_inside_tree()) {
+ return;
+ }
+ _refresh_texture_repeat_cache();
+ RS::get_singleton()->viewport_set_default_canvas_item_texture_repeat(viewport, default_canvas_item_texture_repeat_cache);
+
+ if (p_propagate) {
+ for (Node *c : iterate_children()) {
+ CanvasItem *child_ci = Object::cast_to(c);
+ if (child_ci) {
+ if (child_ci->texture_repeat == CanvasItem::TEXTURE_REPEAT_PARENT_NODE) {
+ child_ci->_update_texture_repeat_changed(true);
+ }
+ continue;
+ }
+ Viewport *child_vp = Object::cast_to(c);
+ if (child_vp && child_vp->default_canvas_item_texture_repeat == Viewport::DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_PARENT_NODE) {
+ child_vp->_update_texture_repeat_changed(true);
+ }
+ }
+ }
+}
+
void Viewport::set_default_canvas_item_texture_repeat(DefaultCanvasItemTextureRepeat p_repeat) {
ERR_MAIN_THREAD_GUARD;
ERR_FAIL_INDEX(p_repeat, DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_MAX);
@@ -4035,20 +4153,7 @@ void Viewport::set_default_canvas_item_texture_repeat(DefaultCanvasItemTextureRe
}
default_canvas_item_texture_repeat = p_repeat;
-
- switch (default_canvas_item_texture_repeat) {
- case DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_DISABLED:
- RS::get_singleton()->viewport_set_default_canvas_item_texture_repeat(viewport, RSE::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
- break;
- case DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_ENABLED:
- RS::get_singleton()->viewport_set_default_canvas_item_texture_repeat(viewport, RSE::CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
- break;
- case DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_MIRROR:
- RS::get_singleton()->viewport_set_default_canvas_item_texture_repeat(viewport, RSE::CANVAS_ITEM_TEXTURE_REPEAT_MIRROR);
- break;
- default: {
- }
- }
+ _update_texture_repeat_changed(true);
}
Viewport::DefaultCanvasItemTextureRepeat Viewport::get_default_canvas_item_texture_repeat() const {
@@ -4056,6 +4161,12 @@ Viewport::DefaultCanvasItemTextureRepeat Viewport::get_default_canvas_item_textu
return default_canvas_item_texture_repeat;
}
+RenderingServerEnums::CanvasItemTextureRepeat Viewport::get_texture_repeat_in_tree() const {
+ ERR_READ_THREAD_GUARD_V(RSE::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
+ _refresh_texture_repeat_cache();
+ return default_canvas_item_texture_repeat_cache;
+}
+
void Viewport::set_vrs_mode(Viewport::VRSMode p_vrs_mode) {
ERR_MAIN_THREAD_GUARD;
// Note, set this even if not supported on this hardware, it will only be used if it is but we want to save the value as set by the user.
@@ -5227,8 +5338,8 @@ void Viewport::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "vrs_texture", PROPERTY_HINT_RESOURCE_TYPE, Texture2D::get_class_static()), "set_vrs_texture", "get_vrs_texture");
#endif
ADD_GROUP("Canvas Items", "canvas_item_");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "canvas_item_default_texture_filter", PROPERTY_HINT_ENUM, "Nearest,Linear,Linear Mipmap,Nearest Mipmap"), "set_default_canvas_item_texture_filter", "get_default_canvas_item_texture_filter");
- ADD_PROPERTY(PropertyInfo(Variant::INT, "canvas_item_default_texture_repeat", PROPERTY_HINT_ENUM, "Disabled,Enabled,Mirror"), "set_default_canvas_item_texture_repeat", "get_default_canvas_item_texture_repeat");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "canvas_item_default_texture_filter", PROPERTY_HINT_ENUM, "Nearest,Linear,Linear Mipmap,Nearest Mipmap,Inherit"), "set_default_canvas_item_texture_filter", "get_default_canvas_item_texture_filter");
+ ADD_PROPERTY(PropertyInfo(Variant::INT, "canvas_item_default_texture_repeat", PROPERTY_HINT_ENUM, "Disabled,Enabled,Mirror,Inherit"), "set_default_canvas_item_texture_repeat", "get_default_canvas_item_texture_repeat");
ADD_GROUP("Audio Listener", "audio_listener_");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "audio_listener_enable_2d"), "set_as_audio_listener_2d", "is_audio_listener_2d");
#ifndef _3D_DISABLED
@@ -5341,11 +5452,13 @@ void Viewport::_bind_methods() {
BIND_ENUM_CONSTANT(DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_LINEAR);
BIND_ENUM_CONSTANT(DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS);
BIND_ENUM_CONSTANT(DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS);
+ BIND_ENUM_CONSTANT(DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_PARENT_NODE);
BIND_ENUM_CONSTANT(DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_MAX);
BIND_ENUM_CONSTANT(DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
BIND_ENUM_CONSTANT(DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_ENABLED);
BIND_ENUM_CONSTANT(DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_MIRROR);
+ BIND_ENUM_CONSTANT(DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_PARENT_NODE);
BIND_ENUM_CONSTANT(DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_MAX);
BIND_ENUM_CONSTANT(SDF_OVERSIZE_100_PERCENT);
diff --git a/scene/main/viewport.h b/scene/main/viewport.h
index 6e12b622c6..f88ed6b3d6 100644
--- a/scene/main/viewport.h
+++ b/scene/main/viewport.h
@@ -33,6 +33,7 @@
#include "scene/main/node.h"
#include "scene/resources/texture.h"
#include "servers/display/display_server_enums.h"
+#include "servers/rendering/rendering_server_enums.h"
class AudioListener2D;
class Camera2D;
@@ -190,6 +191,7 @@ public:
DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_LINEAR,
DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_LINEAR_WITH_MIPMAPS,
DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_NEAREST_WITH_MIPMAPS,
+ DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_PARENT_NODE,
DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_MAX
};
@@ -197,6 +199,7 @@ public:
DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_DISABLED,
DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_ENABLED,
DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_MIRROR,
+ DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_PARENT_NODE,
DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_MAX,
};
@@ -418,7 +421,12 @@ private:
} gui;
DefaultCanvasItemTextureFilter default_canvas_item_texture_filter = DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_LINEAR;
+ mutable RenderingServerEnums::CanvasItemTextureFilter default_canvas_item_texture_filter_cache = RenderingServerEnums::CANVAS_ITEM_TEXTURE_FILTER_LINEAR;
+ void _refresh_texture_filter_cache() const;
+
DefaultCanvasItemTextureRepeat default_canvas_item_texture_repeat = DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_DISABLED;
+ mutable RenderingServerEnums::CanvasItemTextureRepeat default_canvas_item_texture_repeat_cache = RenderingServerEnums::CANVAS_ITEM_TEXTURE_REPEAT_DISABLED;
+ void _refresh_texture_repeat_cache() const;
bool disable_input = false;
bool disable_input_override = false;
@@ -692,9 +700,15 @@ public:
void set_default_canvas_item_texture_filter(DefaultCanvasItemTextureFilter p_filter);
DefaultCanvasItemTextureFilter get_default_canvas_item_texture_filter() const;
+ void _update_texture_filter_changed(bool p_propagate);
+ RenderingServerEnums::CanvasItemTextureFilter get_texture_filter_in_tree() const;
+
void set_default_canvas_item_texture_repeat(DefaultCanvasItemTextureRepeat p_repeat);
DefaultCanvasItemTextureRepeat get_default_canvas_item_texture_repeat() const;
+ void _update_texture_repeat_changed(bool p_propagate);
+ RenderingServerEnums::CanvasItemTextureRepeat get_texture_repeat_in_tree() const;
+
// VRS
void set_vrs_mode(VRSMode p_vrs_mode);