[Viewport] Add option to inherit parents texture filter/repeat, use it for popups.

This commit is contained in:
Pāvels Nadtočajevs 2026-03-06 09:23:54 +02:00
parent 9095a76ff5
commit cdcb208eb9
No known key found for this signature in database
GPG key ID: 8413210218EF35D2
9 changed files with 199 additions and 44 deletions

View file

@ -789,7 +789,7 @@
Represents the size of the [enum TextureFilter] enum.
</constant>
<constant name="TEXTURE_REPEAT_PARENT_NODE" value="0" enum="TextureRepeat">
The [CanvasItem] will inherit the filter from its parent.
The [CanvasItem] will inherit the repeat mode from its parent.
</constant>
<constant name="TEXTURE_REPEAT_DISABLED" value="1" enum="TextureRepeat">
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.

View file

@ -659,6 +659,8 @@
<member name="allow_search" type="bool" setter="set_allow_search" getter="get_allow_search" default="true">
If [code]true[/code], allows navigating [PopupMenu] with letter keys.
</member>
<member name="canvas_item_default_texture_filter" type="int" setter="set_default_canvas_item_texture_filter" getter="get_default_canvas_item_texture_filter" overrides="Viewport" enum="Viewport.DefaultCanvasItemTextureFilter" default="4" />
<member name="canvas_item_default_texture_repeat" type="int" setter="set_default_canvas_item_texture_repeat" getter="get_default_canvas_item_texture_repeat" overrides="Viewport" enum="Viewport.DefaultCanvasItemTextureRepeat" default="3" />
<member name="hide_on_checkable_item_selection" type="bool" setter="set_hide_on_checkable_item_selection" getter="is_hide_on_checkable_item_selection" default="true">
If [code]true[/code], hides the [PopupMenu] when a checkbox or radio button is selected.
</member>

View file

@ -9,6 +9,8 @@
<tutorials>
</tutorials>
<members>
<member name="canvas_item_default_texture_filter" type="int" setter="set_default_canvas_item_texture_filter" getter="get_default_canvas_item_texture_filter" overrides="Viewport" enum="Viewport.DefaultCanvasItemTextureFilter" default="4" />
<member name="canvas_item_default_texture_repeat" type="int" setter="set_default_canvas_item_texture_repeat" getter="get_default_canvas_item_texture_repeat" overrides="Viewport" enum="Viewport.DefaultCanvasItemTextureRepeat" default="3" />
<member name="transparent" type="bool" setter="set_flag" getter="get_flag" overrides="Window" default="true" />
<member name="transparent_bg" type="bool" setter="set_transparent_background" getter="has_transparent_background" overrides="Viewport" default="true" />
</members>

View file

@ -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.
</constant>
<constant name="DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_MAX" value="4" enum="DefaultCanvasItemTextureFilter">
<constant name="DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_PARENT_NODE" value="4" enum="DefaultCanvasItemTextureFilter">
The [Viewport] will inherit the filter from its parent [CanvasItem] or [Viewport].
</constant>
<constant name="DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_MAX" value="5" enum="DefaultCanvasItemTextureFilter">
Represents the size of the [enum DefaultCanvasItemTextureFilter] enum.
</constant>
<constant name="DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_DISABLED" value="0" enum="DefaultCanvasItemTextureRepeat">
@ -780,7 +783,10 @@
<constant name="DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_MIRROR" value="2" enum="DefaultCanvasItemTextureRepeat">
Flip the texture when repeating so that the edge lines up instead of abruptly changing.
</constant>
<constant name="DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_MAX" value="3" enum="DefaultCanvasItemTextureRepeat">
<constant name="DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_PARENT_NODE" value="3" enum="DefaultCanvasItemTextureRepeat">
The [Viewport] will inherit the repeat mode from its parent [CanvasItem] or [Viewport].
</constant>
<constant name="DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_MAX" value="4" enum="DefaultCanvasItemTextureRepeat">
Represents the size of the [enum DefaultCanvasItemTextureRepeat] enum.
</constant>
<constant name="SDF_OVERSIZE_100_PERCENT" value="0" enum="SDFOversize">

View file

@ -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);

View file

@ -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);

View file

@ -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<CanvasItem>(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<Viewport>(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<CanvasItem>(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<Viewport>(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);
}
}
}

View file

@ -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<CanvasItem>(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<Viewport>(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<CanvasItem>(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<Viewport>(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<CanvasItem>(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<Viewport>(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<CanvasItem>(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<Viewport>(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);

View file

@ -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);