summaryrefslogtreecommitdiffstats
path: root/scene/main/viewport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/main/viewport.cpp')
-rw-r--r--scene/main/viewport.cpp148
1 files changed, 148 insertions, 0 deletions
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index e6043531ac..a303cc8820 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -468,6 +468,8 @@ void Viewport::_update_viewport_path() {
}
void Viewport::_notification(int p_what) {
+ ERR_MAIN_THREAD_GUARD;
+
switch (p_what) {
case NOTIFICATION_ENTER_TREE: {
_update_viewport_path();
@@ -922,10 +924,12 @@ void Viewport::_process_picking() {
}
RID Viewport::get_viewport_rid() const {
+ ERR_READ_THREAD_GUARD_V(RID());
return viewport;
}
void Viewport::update_canvas_items() {
+ ERR_MAIN_THREAD_GUARD;
if (!is_inside_tree()) {
return;
}
@@ -1013,6 +1017,7 @@ bool Viewport::_is_size_allocated() const {
}
Rect2 Viewport::get_visible_rect() const {
+ ERR_READ_THREAD_GUARD_V(Rect2());
Rect2 r;
if (size == Size2()) {
@@ -1029,6 +1034,7 @@ Rect2 Viewport::get_visible_rect() const {
}
void Viewport::canvas_parent_mark_dirty(Node *p_node) {
+ ERR_MAIN_THREAD_GUARD;
bool request_update = gui.canvas_parents_with_dirty_order.is_empty();
gui.canvas_parents_with_dirty_order.insert(p_node->get_instance_id());
if (request_update) {
@@ -1043,6 +1049,7 @@ void Viewport::_update_audio_listener_2d() {
}
void Viewport::set_as_audio_listener_2d(bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
if (p_enable == is_audio_listener_2d_enabled) {
return;
}
@@ -1052,14 +1059,17 @@ void Viewport::set_as_audio_listener_2d(bool p_enable) {
}
bool Viewport::is_audio_listener_2d() const {
+ ERR_READ_THREAD_GUARD_V(false);
return is_audio_listener_2d_enabled;
}
AudioListener2D *Viewport::get_audio_listener_2d() const {
+ ERR_READ_THREAD_GUARD_V(nullptr);
return audio_listener_2d;
}
void Viewport::enable_canvas_transform_override(bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
if (override_canvas_transform == p_enable) {
return;
}
@@ -1073,10 +1083,12 @@ void Viewport::enable_canvas_transform_override(bool p_enable) {
}
bool Viewport::is_canvas_transform_override_enbled() const {
+ ERR_READ_THREAD_GUARD_V(false);
return override_canvas_transform;
}
void Viewport::set_canvas_transform_override(const Transform2D &p_transform) {
+ ERR_MAIN_THREAD_GUARD;
if (canvas_transform_override == p_transform) {
return;
}
@@ -1088,10 +1100,12 @@ void Viewport::set_canvas_transform_override(const Transform2D &p_transform) {
}
Transform2D Viewport::get_canvas_transform_override() const {
+ ERR_READ_THREAD_GUARD_V(Transform2D());
return canvas_transform_override;
}
void Viewport::set_canvas_transform(const Transform2D &p_transform) {
+ ERR_MAIN_THREAD_GUARD;
canvas_transform = p_transform;
if (!override_canvas_transform) {
@@ -1100,6 +1114,7 @@ void Viewport::set_canvas_transform(const Transform2D &p_transform) {
}
Transform2D Viewport::get_canvas_transform() const {
+ ERR_READ_THREAD_GUARD_V(Transform2D());
return canvas_transform;
}
@@ -1110,12 +1125,14 @@ void Viewport::_update_global_transform() {
}
void Viewport::set_global_canvas_transform(const Transform2D &p_transform) {
+ ERR_MAIN_THREAD_GUARD;
global_canvas_transform = p_transform;
_update_global_transform();
}
Transform2D Viewport::get_global_canvas_transform() const {
+ ERR_READ_THREAD_GUARD_V(Transform2D());
return global_canvas_transform;
}
@@ -1147,15 +1164,18 @@ void Viewport::_canvas_layer_remove(CanvasLayer *p_canvas_layer) {
}
void Viewport::set_transparent_background(bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
transparent_bg = p_enable;
RS::get_singleton()->viewport_set_transparent_background(viewport, p_enable);
}
bool Viewport::has_transparent_background() const {
+ ERR_READ_THREAD_GUARD_V(false);
return transparent_bg;
}
void Viewport::set_world_2d(const Ref<World2D> &p_world_2d) {
+ ERR_MAIN_THREAD_GUARD;
if (world_2d == p_world_2d) {
return;
}
@@ -1184,6 +1204,7 @@ void Viewport::set_world_2d(const Ref<World2D> &p_world_2d) {
}
Ref<World2D> Viewport::find_world_2d() const {
+ ERR_READ_THREAD_GUARD_V(Ref<World2D>());
if (world_2d.is_valid()) {
return world_2d;
} else if (parent) {
@@ -1205,18 +1226,22 @@ void Viewport::_propagate_viewport_notification(Node *p_node, int p_what) {
}
Ref<World2D> Viewport::get_world_2d() const {
+ ERR_READ_THREAD_GUARD_V(Ref<World2D>());
return world_2d;
}
Camera2D *Viewport::get_camera_2d() const {
+ ERR_READ_THREAD_GUARD_V(nullptr);
return camera_2d;
}
Transform2D Viewport::get_final_transform() const {
+ ERR_READ_THREAD_GUARD_V(Transform2D());
return stretch_transform * global_canvas_transform;
}
void Viewport::assign_next_enabled_camera_2d(const StringName &p_camera_group) {
+ ERR_MAIN_THREAD_GUARD;
List<Node *> camera_list;
get_tree()->get_nodes_in_group(p_camera_group, &camera_list);
@@ -1260,19 +1285,23 @@ void Viewport::_update_canvas_items(Node *p_node) {
}
Ref<ViewportTexture> Viewport::get_texture() const {
+ ERR_READ_THREAD_GUARD_V(Ref<ViewportTexture>());
return default_texture;
}
void Viewport::set_positional_shadow_atlas_size(int p_size) {
+ ERR_MAIN_THREAD_GUARD;
positional_shadow_atlas_size = p_size;
RS::get_singleton()->viewport_set_positional_shadow_atlas_size(viewport, p_size, positional_shadow_atlas_16_bits);
}
int Viewport::get_positional_shadow_atlas_size() const {
+ ERR_READ_THREAD_GUARD_V(0);
return positional_shadow_atlas_size;
}
void Viewport::set_positional_shadow_atlas_16_bits(bool p_16_bits) {
+ ERR_MAIN_THREAD_GUARD;
if (positional_shadow_atlas_16_bits == p_16_bits) {
return;
}
@@ -1282,9 +1311,11 @@ void Viewport::set_positional_shadow_atlas_16_bits(bool p_16_bits) {
}
bool Viewport::get_positional_shadow_atlas_16_bits() const {
+ ERR_READ_THREAD_GUARD_V(false);
return positional_shadow_atlas_16_bits;
}
void Viewport::set_positional_shadow_atlas_quadrant_subdiv(int p_quadrant, PositionalShadowAtlasQuadrantSubdiv p_subdiv) {
+ ERR_MAIN_THREAD_GUARD;
ERR_FAIL_INDEX(p_quadrant, 4);
ERR_FAIL_INDEX(p_subdiv, SHADOW_ATLAS_QUADRANT_SUBDIV_MAX);
@@ -1299,6 +1330,7 @@ void Viewport::set_positional_shadow_atlas_quadrant_subdiv(int p_quadrant, Posit
}
Viewport::PositionalShadowAtlasQuadrantSubdiv Viewport::get_positional_shadow_atlas_quadrant_subdiv(int p_quadrant) const {
+ ERR_READ_THREAD_GUARD_V(SHADOW_ATLAS_QUADRANT_SUBDIV_DISABLED);
ERR_FAIL_INDEX_V(p_quadrant, 4, SHADOW_ATLAS_QUADRANT_SUBDIV_DISABLED);
return positional_shadow_atlas_quadrant_subdiv[p_quadrant];
}
@@ -1313,6 +1345,7 @@ Ref<InputEvent> Viewport::_make_input_local(const Ref<InputEvent> &ev) {
}
Vector2 Viewport::get_mouse_position() const {
+ ERR_READ_THREAD_GUARD_V(Vector2());
if (DisplayServer::get_singleton()->has_feature(DisplayServer::FEATURE_MOUSE)) {
return get_screen_transform_internal(true).affine_inverse().xform(DisplayServer::get_singleton()->mouse_get_position());
} else {
@@ -1322,6 +1355,7 @@ Vector2 Viewport::get_mouse_position() const {
}
void Viewport::warp_mouse(const Vector2 &p_position) {
+ ERR_MAIN_THREAD_GUARD;
Transform2D xform = get_screen_transform_internal();
Vector2 gpos = xform.xform(p_position);
Input::get_singleton()->warp_mouse(gpos);
@@ -1565,6 +1599,7 @@ void Viewport::_gui_call_notification(Control *p_control, int p_what) {
}
Control *Viewport::gui_find_control(const Point2 &p_global) {
+ ERR_MAIN_THREAD_GUARD_V(nullptr);
// Handle subwindows.
_gui_sort_roots();
@@ -2274,6 +2309,7 @@ List<Control *>::Element *Viewport::_gui_add_root_control(Control *p_control) {
}
void Viewport::gui_set_root_order_dirty() {
+ ERR_MAIN_THREAD_GUARD;
gui.roots_order_dirty = true;
}
@@ -2374,6 +2410,7 @@ void Viewport::_gui_remove_control(Control *p_control) {
}
Window *Viewport::get_base_window() const {
+ ERR_READ_THREAD_GUARD_V(nullptr);
ERR_FAIL_COND_V(!is_inside_tree(), nullptr);
Viewport *v = const_cast<Viewport *>(this);
@@ -2576,6 +2613,7 @@ void Viewport::_post_gui_grab_click_focus() {
///////////////////////////////
void Viewport::push_text_input(const String &p_text) {
+ ERR_MAIN_THREAD_GUARD;
if (gui.subwindow_focused) {
gui.subwindow_focused->push_text_input(p_text);
return;
@@ -2903,6 +2941,7 @@ bool Viewport::_sub_windows_forward_input(const Ref<InputEvent> &p_event) {
}
void Viewport::push_input(const Ref<InputEvent> &p_event, bool p_local_coords) {
+ ERR_MAIN_THREAD_GUARD;
ERR_FAIL_COND(!is_inside_tree());
if (disable_input) {
@@ -2955,6 +2994,7 @@ void Viewport::push_input(const Ref<InputEvent> &p_event, bool p_local_coords) {
}
void Viewport::push_unhandled_input(const Ref<InputEvent> &p_event, bool p_local_coords) {
+ ERR_MAIN_THREAD_GUARD;
ERR_FAIL_COND(p_event.is_null());
ERR_FAIL_COND(!is_inside_tree());
local_input_handled = false;
@@ -3004,6 +3044,7 @@ void Viewport::push_unhandled_input(const Ref<InputEvent> &p_event, bool p_local
}
void Viewport::set_physics_object_picking(bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
physics_object_picking = p_enable;
if (physics_object_picking) {
add_to_group("_picking_viewports");
@@ -3016,27 +3057,33 @@ void Viewport::set_physics_object_picking(bool p_enable) {
}
bool Viewport::get_physics_object_picking() {
+ ERR_READ_THREAD_GUARD_V(false);
return physics_object_picking;
}
void Viewport::set_physics_object_picking_sort(bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
physics_object_picking_sort = p_enable;
}
bool Viewport::get_physics_object_picking_sort() {
+ ERR_READ_THREAD_GUARD_V(false);
return physics_object_picking_sort;
}
Vector2 Viewport::get_camera_coords(const Vector2 &p_viewport_coords) const {
+ ERR_READ_THREAD_GUARD_V(Vector2());
Transform2D xf = stretch_transform * global_canvas_transform;
return xf.xform(p_viewport_coords);
}
Vector2 Viewport::get_camera_rect_size() const {
+ ERR_READ_THREAD_GUARD_V(Vector2());
return size;
}
void Viewport::set_disable_input(bool p_disable) {
+ ERR_MAIN_THREAD_GUARD;
if (p_disable == disable_input) {
return;
}
@@ -3049,14 +3096,17 @@ void Viewport::set_disable_input(bool p_disable) {
}
bool Viewport::is_input_disabled() const {
+ ERR_READ_THREAD_GUARD_V(false);
return disable_input;
}
Variant Viewport::gui_get_drag_data() const {
+ ERR_READ_THREAD_GUARD_V(Variant());
return gui.drag_data;
}
PackedStringArray Viewport::get_configuration_warnings() const {
+ ERR_MAIN_THREAD_GUARD_V(PackedStringArray());
PackedStringArray warnings = Node::get_configuration_warnings();
if (size.x <= 1 || size.y <= 1) {
@@ -3066,14 +3116,17 @@ PackedStringArray Viewport::get_configuration_warnings() const {
}
void Viewport::gui_reset_canvas_sort_index() {
+ ERR_MAIN_THREAD_GUARD;
gui.canvas_sort_index = 0;
}
int Viewport::gui_get_canvas_sort_index() {
+ ERR_MAIN_THREAD_GUARD_V(0);
return gui.canvas_sort_index++;
}
void Viewport::gui_release_focus() {
+ ERR_MAIN_THREAD_GUARD;
if (gui.key_focus) {
Control *f = gui.key_focus;
gui.key_focus = nullptr;
@@ -3083,10 +3136,12 @@ void Viewport::gui_release_focus() {
}
Control *Viewport::gui_get_focus_owner() {
+ ERR_READ_THREAD_GUARD_V(nullptr);
return gui.key_focus;
}
void Viewport::set_msaa_2d(MSAA p_msaa) {
+ ERR_MAIN_THREAD_GUARD;
ERR_FAIL_INDEX(p_msaa, MSAA_MAX);
if (msaa_2d == p_msaa) {
return;
@@ -3096,10 +3151,12 @@ void Viewport::set_msaa_2d(MSAA p_msaa) {
}
Viewport::MSAA Viewport::get_msaa_2d() const {
+ ERR_READ_THREAD_GUARD_V(MSAA_DISABLED);
return msaa_2d;
}
void Viewport::set_msaa_3d(MSAA p_msaa) {
+ ERR_MAIN_THREAD_GUARD;
ERR_FAIL_INDEX(p_msaa, MSAA_MAX);
if (msaa_3d == p_msaa) {
return;
@@ -3109,10 +3166,12 @@ void Viewport::set_msaa_3d(MSAA p_msaa) {
}
Viewport::MSAA Viewport::get_msaa_3d() const {
+ ERR_READ_THREAD_GUARD_V(MSAA_DISABLED);
return msaa_3d;
}
void Viewport::set_screen_space_aa(ScreenSpaceAA p_screen_space_aa) {
+ ERR_MAIN_THREAD_GUARD;
ERR_FAIL_INDEX(p_screen_space_aa, SCREEN_SPACE_AA_MAX);
if (screen_space_aa == p_screen_space_aa) {
return;
@@ -3122,10 +3181,12 @@ void Viewport::set_screen_space_aa(ScreenSpaceAA p_screen_space_aa) {
}
Viewport::ScreenSpaceAA Viewport::get_screen_space_aa() const {
+ ERR_READ_THREAD_GUARD_V(SCREEN_SPACE_AA_DISABLED);
return screen_space_aa;
}
void Viewport::set_use_taa(bool p_use_taa) {
+ ERR_MAIN_THREAD_GUARD;
if (use_taa == p_use_taa) {
return;
}
@@ -3134,10 +3195,12 @@ void Viewport::set_use_taa(bool p_use_taa) {
}
bool Viewport::is_using_taa() const {
+ ERR_READ_THREAD_GUARD_V(false);
return use_taa;
}
void Viewport::set_use_debanding(bool p_use_debanding) {
+ ERR_MAIN_THREAD_GUARD;
if (use_debanding == p_use_debanding) {
return;
}
@@ -3146,19 +3209,23 @@ void Viewport::set_use_debanding(bool p_use_debanding) {
}
bool Viewport::is_using_debanding() const {
+ ERR_READ_THREAD_GUARD_V(false);
return use_debanding;
}
void Viewport::set_mesh_lod_threshold(float p_pixels) {
+ ERR_MAIN_THREAD_GUARD;
mesh_lod_threshold = p_pixels;
RS::get_singleton()->viewport_set_mesh_lod_threshold(viewport, mesh_lod_threshold);
}
float Viewport::get_mesh_lod_threshold() const {
+ ERR_READ_THREAD_GUARD_V(0);
return mesh_lod_threshold;
}
void Viewport::set_use_occlusion_culling(bool p_use_occlusion_culling) {
+ ERR_MAIN_THREAD_GUARD;
if (use_occlusion_culling == p_use_occlusion_culling) {
return;
}
@@ -3170,57 +3237,70 @@ void Viewport::set_use_occlusion_culling(bool p_use_occlusion_culling) {
}
bool Viewport::is_using_occlusion_culling() const {
+ ERR_READ_THREAD_GUARD_V(false);
return use_occlusion_culling;
}
void Viewport::set_debug_draw(DebugDraw p_debug_draw) {
+ ERR_MAIN_THREAD_GUARD;
debug_draw = p_debug_draw;
RS::get_singleton()->viewport_set_debug_draw(viewport, RS::ViewportDebugDraw(p_debug_draw));
}
Viewport::DebugDraw Viewport::get_debug_draw() const {
+ ERR_READ_THREAD_GUARD_V(DEBUG_DRAW_DISABLED);
return debug_draw;
}
int Viewport::get_render_info(RenderInfoType p_type, RenderInfo p_info) {
+ ERR_READ_THREAD_GUARD_V(0);
return RS::get_singleton()->viewport_get_render_info(viewport, RS::ViewportRenderInfoType(p_type), RS::ViewportRenderInfo(p_info));
}
void Viewport::set_snap_controls_to_pixels(bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
snap_controls_to_pixels = p_enable;
}
bool Viewport::is_snap_controls_to_pixels_enabled() const {
+ ERR_READ_THREAD_GUARD_V(false);
return snap_controls_to_pixels;
}
void Viewport::set_snap_2d_transforms_to_pixel(bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
snap_2d_transforms_to_pixel = p_enable;
RS::get_singleton()->viewport_set_snap_2d_transforms_to_pixel(viewport, snap_2d_transforms_to_pixel);
}
bool Viewport::is_snap_2d_transforms_to_pixel_enabled() const {
+ ERR_READ_THREAD_GUARD_V(false);
return snap_2d_transforms_to_pixel;
}
void Viewport::set_snap_2d_vertices_to_pixel(bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
snap_2d_vertices_to_pixel = p_enable;
RS::get_singleton()->viewport_set_snap_2d_vertices_to_pixel(viewport, snap_2d_vertices_to_pixel);
}
bool Viewport::is_snap_2d_vertices_to_pixel_enabled() const {
+ ERR_READ_THREAD_GUARD_V(false);
return snap_2d_vertices_to_pixel;
}
bool Viewport::gui_is_dragging() const {
+ ERR_READ_THREAD_GUARD_V(false);
return gui.dragging;
}
bool Viewport::gui_is_drag_successful() const {
+ ERR_READ_THREAD_GUARD_V(false);
return gui.drag_successful;
}
void Viewport::set_input_as_handled() {
+ ERR_MAIN_THREAD_GUARD;
if (!handle_input_locally) {
ERR_FAIL_COND(!is_inside_tree());
Viewport *vp = this;
@@ -3243,6 +3323,7 @@ void Viewport::set_input_as_handled() {
}
bool Viewport::is_input_handled() const {
+ ERR_READ_THREAD_GUARD_V(false);
if (!handle_input_locally) {
ERR_FAIL_COND_V(!is_inside_tree(), false);
const Viewport *vp = this;
@@ -3263,14 +3344,17 @@ bool Viewport::is_input_handled() const {
}
void Viewport::set_handle_input_locally(bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
handle_input_locally = p_enable;
}
bool Viewport::is_handling_input_locally() const {
+ ERR_READ_THREAD_GUARD_V(false);
return handle_input_locally;
}
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);
if (default_canvas_item_texture_filter == p_filter) {
@@ -3296,10 +3380,12 @@ void Viewport::set_default_canvas_item_texture_filter(DefaultCanvasItemTextureFi
}
Viewport::DefaultCanvasItemTextureFilter Viewport::get_default_canvas_item_texture_filter() const {
+ ERR_READ_THREAD_GUARD_V(DEFAULT_CANVAS_ITEM_TEXTURE_FILTER_NEAREST);
return default_canvas_item_texture_filter;
}
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);
if (default_canvas_item_texture_repeat == p_repeat) {
@@ -3324,10 +3410,12 @@ void Viewport::set_default_canvas_item_texture_repeat(DefaultCanvasItemTextureRe
}
Viewport::DefaultCanvasItemTextureRepeat Viewport::get_default_canvas_item_texture_repeat() const {
+ ERR_READ_THREAD_GUARD_V(DEFAULT_CANVAS_ITEM_TEXTURE_REPEAT_DISABLED);
return default_canvas_item_texture_repeat;
}
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.
vrs_mode = p_vrs_mode;
@@ -3347,10 +3435,12 @@ void Viewport::set_vrs_mode(Viewport::VRSMode p_vrs_mode) {
}
Viewport::VRSMode Viewport::get_vrs_mode() const {
+ ERR_READ_THREAD_GUARD_V(VRS_DISABLED);
return vrs_mode;
}
void Viewport::set_vrs_texture(Ref<Texture2D> p_texture) {
+ ERR_MAIN_THREAD_GUARD;
vrs_texture = p_texture;
// TODO need to add something here in case the RID changes
@@ -3359,14 +3449,17 @@ void Viewport::set_vrs_texture(Ref<Texture2D> p_texture) {
}
Ref<Texture2D> Viewport::get_vrs_texture() const {
+ ERR_READ_THREAD_GUARD_V(Ref<Texture2D>());
return vrs_texture;
}
DisplayServer::WindowID Viewport::get_window_id() const {
+ ERR_READ_THREAD_GUARD_V(DisplayServer::INVALID_WINDOW_ID);
return DisplayServer::MAIN_WINDOW_ID;
}
Viewport *Viewport::get_parent_viewport() const {
+ ERR_READ_THREAD_GUARD_V(nullptr);
ERR_FAIL_COND_V(!is_inside_tree(), nullptr);
if (!get_parent()) {
return nullptr; //root viewport
@@ -3376,14 +3469,17 @@ Viewport *Viewport::get_parent_viewport() const {
}
void Viewport::set_embedding_subwindows(bool p_embed) {
+ ERR_THREAD_GUARD;
gui.embed_subwindows_hint = p_embed;
}
bool Viewport::is_embedding_subwindows() const {
+ ERR_READ_THREAD_GUARD_V(false);
return gui.embed_subwindows_hint;
}
void Viewport::pass_mouse_focus_to(Viewport *p_viewport, Control *p_control) {
+ ERR_MAIN_THREAD_GUARD;
ERR_FAIL_NULL(p_viewport);
ERR_FAIL_NULL(p_control);
@@ -3400,43 +3496,52 @@ void Viewport::pass_mouse_focus_to(Viewport *p_viewport, Control *p_control) {
}
void Viewport::set_sdf_oversize(SDFOversize p_sdf_oversize) {
+ ERR_MAIN_THREAD_GUARD;
ERR_FAIL_INDEX(p_sdf_oversize, SDF_OVERSIZE_MAX);
sdf_oversize = p_sdf_oversize;
RS::get_singleton()->viewport_set_sdf_oversize_and_scale(viewport, RS::ViewportSDFOversize(sdf_oversize), RS::ViewportSDFScale(sdf_scale));
}
Viewport::SDFOversize Viewport::get_sdf_oversize() const {
+ ERR_READ_THREAD_GUARD_V(SDF_OVERSIZE_100_PERCENT);
return sdf_oversize;
}
void Viewport::set_sdf_scale(SDFScale p_sdf_scale) {
+ ERR_MAIN_THREAD_GUARD;
ERR_FAIL_INDEX(p_sdf_scale, SDF_SCALE_MAX);
sdf_scale = p_sdf_scale;
RS::get_singleton()->viewport_set_sdf_oversize_and_scale(viewport, RS::ViewportSDFOversize(sdf_oversize), RS::ViewportSDFScale(sdf_scale));
}
Viewport::SDFScale Viewport::get_sdf_scale() const {
+ ERR_READ_THREAD_GUARD_V(SDF_SCALE_100_PERCENT);
return sdf_scale;
}
Transform2D Viewport::get_screen_transform() const {
+ ERR_READ_THREAD_GUARD_V(Transform2D());
return get_screen_transform_internal();
}
Transform2D Viewport::get_screen_transform_internal(bool p_absolute_position) const {
+ ERR_READ_THREAD_GUARD_V(Transform2D());
return get_final_transform();
}
void Viewport::set_canvas_cull_mask(uint32_t p_canvas_cull_mask) {
+ ERR_MAIN_THREAD_GUARD;
canvas_cull_mask = p_canvas_cull_mask;
RenderingServer::get_singleton()->viewport_set_canvas_cull_mask(viewport, canvas_cull_mask);
}
uint32_t Viewport::get_canvas_cull_mask() const {
+ ERR_READ_THREAD_GUARD_V(0);
return canvas_cull_mask;
}
void Viewport::set_canvas_cull_mask_bit(uint32_t p_layer, bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
ERR_FAIL_UNSIGNED_INDEX(p_layer, 32);
if (p_enable) {
set_canvas_cull_mask(canvas_cull_mask | (1 << p_layer));
@@ -3446,16 +3551,19 @@ void Viewport::set_canvas_cull_mask_bit(uint32_t p_layer, bool p_enable) {
}
bool Viewport::get_canvas_cull_mask_bit(uint32_t p_layer) const {
+ ERR_READ_THREAD_GUARD_V(false);
ERR_FAIL_UNSIGNED_INDEX_V(p_layer, 32, false);
return (canvas_cull_mask & (1 << p_layer));
}
#ifndef _3D_DISABLED
AudioListener3D *Viewport::get_audio_listener_3d() const {
+ ERR_READ_THREAD_GUARD_V(nullptr);
return audio_listener_3d;
}
void Viewport::set_as_audio_listener_3d(bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
if (p_enable == is_audio_listener_3d_enabled) {
return;
}
@@ -3465,6 +3573,7 @@ void Viewport::set_as_audio_listener_3d(bool p_enable) {
}
bool Viewport::is_audio_listener_3d() const {
+ ERR_READ_THREAD_GUARD_V(false);
return is_audio_listener_3d_enabled;
}
@@ -3543,6 +3652,7 @@ void Viewport::_collision_object_3d_input_event(CollisionObject3D *p_object, Cam
}
Camera3D *Viewport::get_camera_3d() const {
+ ERR_READ_THREAD_GUARD_V(nullptr);
return camera_3d;
}
@@ -3606,6 +3716,7 @@ void Viewport::_camera_3d_make_next_current(Camera3D *p_exclude) {
}
void Viewport::enable_camera_3d_override(bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
if (p_enable == camera_3d_override) {
return;
}
@@ -3627,6 +3738,7 @@ void Viewport::enable_camera_3d_override(bool p_enable) {
}
void Viewport::set_camera_3d_override_perspective(real_t p_fovy_degrees, real_t p_z_near, real_t p_z_far) {
+ ERR_MAIN_THREAD_GUARD;
if (camera_3d_override) {
if (camera_3d_override.fov == p_fovy_degrees && camera_3d_override.z_near == p_z_near &&
camera_3d_override.z_far == p_z_far && camera_3d_override.projection == Camera3DOverrideData::PROJECTION_PERSPECTIVE) {
@@ -3643,6 +3755,7 @@ void Viewport::set_camera_3d_override_perspective(real_t p_fovy_degrees, real_t
}
void Viewport::set_camera_3d_override_orthogonal(real_t p_size, real_t p_z_near, real_t p_z_far) {
+ ERR_MAIN_THREAD_GUARD;
if (camera_3d_override) {
if (camera_3d_override.size == p_size && camera_3d_override.z_near == p_z_near &&
camera_3d_override.z_far == p_z_far && camera_3d_override.projection == Camera3DOverrideData::PROJECTION_ORTHOGONAL) {
@@ -3659,19 +3772,23 @@ void Viewport::set_camera_3d_override_orthogonal(real_t p_size, real_t p_z_near,
}
void Viewport::set_disable_3d(bool p_disable) {
+ ERR_MAIN_THREAD_GUARD;
disable_3d = p_disable;
RenderingServer::get_singleton()->viewport_set_disable_3d(viewport, disable_3d);
}
bool Viewport::is_3d_disabled() const {
+ ERR_READ_THREAD_GUARD_V(false);
return disable_3d;
}
bool Viewport::is_camera_3d_override_enabled() const {
+ ERR_READ_THREAD_GUARD_V(false);
return camera_3d_override;
}
void Viewport::set_camera_3d_override_transform(const Transform3D &p_transform) {
+ ERR_MAIN_THREAD_GUARD;
if (camera_3d_override) {
camera_3d_override.transform = p_transform;
RenderingServer::get_singleton()->camera_set_transform(camera_3d_override.rid, p_transform);
@@ -3679,6 +3796,7 @@ void Viewport::set_camera_3d_override_transform(const Transform3D &p_transform)
}
Transform3D Viewport::get_camera_3d_override_transform() const {
+ ERR_READ_THREAD_GUARD_V(Transform3D());
if (camera_3d_override) {
return camera_3d_override.transform;
}
@@ -3687,10 +3805,12 @@ Transform3D Viewport::get_camera_3d_override_transform() const {
}
Ref<World3D> Viewport::get_world_3d() const {
+ ERR_READ_THREAD_GUARD_V(Ref<World3D>());
return world_3d;
}
Ref<World3D> Viewport::find_world_3d() const {
+ ERR_READ_THREAD_GUARD_V(Ref<World3D>());
if (own_world_3d.is_valid()) {
return own_world_3d;
} else if (world_3d.is_valid()) {
@@ -3703,6 +3823,7 @@ Ref<World3D> Viewport::find_world_3d() const {
}
void Viewport::set_world_3d(const Ref<World3D> &p_world_3d) {
+ ERR_MAIN_THREAD_GUARD;
if (world_3d == p_world_3d) {
return;
}
@@ -3759,6 +3880,7 @@ void Viewport::_own_world_3d_changed() {
}
void Viewport::set_use_own_world_3d(bool p_use_own_world_3d) {
+ ERR_MAIN_THREAD_GUARD;
if (p_use_own_world_3d == own_world_3d.is_valid()) {
return;
}
@@ -3793,6 +3915,7 @@ void Viewport::set_use_own_world_3d(bool p_use_own_world_3d) {
}
bool Viewport::is_using_own_world_3d() const {
+ ERR_READ_THREAD_GUARD_V(false);
return own_world_3d.is_valid();
}
@@ -3843,6 +3966,7 @@ void Viewport::_propagate_exit_world_3d(Node *p_node) {
}
void Viewport::set_use_xr(bool p_use_xr) {
+ ERR_MAIN_THREAD_GUARD;
if (use_xr != p_use_xr) {
use_xr = p_use_xr;
@@ -3860,10 +3984,12 @@ void Viewport::set_use_xr(bool p_use_xr) {
}
bool Viewport::is_using_xr() {
+ ERR_READ_THREAD_GUARD_V(false);
return use_xr;
}
void Viewport::set_scaling_3d_mode(Scaling3DMode p_scaling_3d_mode) {
+ ERR_MAIN_THREAD_GUARD;
if (scaling_3d_mode == p_scaling_3d_mode) {
return;
}
@@ -3873,10 +3999,12 @@ void Viewport::set_scaling_3d_mode(Scaling3DMode p_scaling_3d_mode) {
}
Viewport::Scaling3DMode Viewport::get_scaling_3d_mode() const {
+ ERR_READ_THREAD_GUARD_V(SCALING_3D_MODE_BILINEAR);
return scaling_3d_mode;
}
void Viewport::set_scaling_3d_scale(float p_scaling_3d_scale) {
+ ERR_MAIN_THREAD_GUARD;
// Clamp to reasonable values that are actually useful.
// Values above 2.0 don't serve a practical purpose since the viewport
// isn't displayed with mipmaps.
@@ -3886,10 +4014,12 @@ void Viewport::set_scaling_3d_scale(float p_scaling_3d_scale) {
}
float Viewport::get_scaling_3d_scale() const {
+ ERR_READ_THREAD_GUARD_V(0);
return scaling_3d_scale;
}
void Viewport::set_fsr_sharpness(float p_fsr_sharpness) {
+ ERR_MAIN_THREAD_GUARD;
if (fsr_sharpness == p_fsr_sharpness) {
return;
}
@@ -3903,10 +4033,12 @@ void Viewport::set_fsr_sharpness(float p_fsr_sharpness) {
}
float Viewport::get_fsr_sharpness() const {
+ ERR_READ_THREAD_GUARD_V(0);
return fsr_sharpness;
}
void Viewport::set_texture_mipmap_bias(float p_texture_mipmap_bias) {
+ ERR_MAIN_THREAD_GUARD;
if (texture_mipmap_bias == p_texture_mipmap_bias) {
return;
}
@@ -3916,6 +4048,7 @@ void Viewport::set_texture_mipmap_bias(float p_texture_mipmap_bias) {
}
float Viewport::get_texture_mipmap_bias() const {
+ ERR_READ_THREAD_GUARD_V(0);
return texture_mipmap_bias;
}
@@ -4309,10 +4442,12 @@ Viewport::~Viewport() {
/////////////////////////////////
void SubViewport::set_size(const Size2i &p_size) {
+ ERR_MAIN_THREAD_GUARD;
_internal_set_size(p_size);
}
void SubViewport::set_size_force(const Size2i &p_size) {
+ ERR_MAIN_THREAD_GUARD;
// Use only for setting the size from the parent SubViewportContainer with enabled stretch mode.
// Don't expose function to scripting.
_internal_set_size(p_size, true);
@@ -4335,18 +4470,22 @@ void SubViewport::_internal_set_size(const Size2i &p_size, bool p_force) {
}
Size2i SubViewport::get_size() const {
+ ERR_READ_THREAD_GUARD_V(Size2());
return _get_size();
}
void SubViewport::set_size_2d_override(const Size2i &p_size) {
+ ERR_MAIN_THREAD_GUARD;
_set_size(_get_size(), p_size, true);
}
Size2i SubViewport::get_size_2d_override() const {
+ ERR_READ_THREAD_GUARD_V(Size2i());
return _get_size_2d_override();
}
void SubViewport::set_size_2d_override_stretch(bool p_enable) {
+ ERR_MAIN_THREAD_GUARD;
if (p_enable == size_2d_override_stretch) {
return;
}
@@ -4356,32 +4495,39 @@ void SubViewport::set_size_2d_override_stretch(bool p_enable) {
}
bool SubViewport::is_size_2d_override_stretch_enabled() const {
+ ERR_READ_THREAD_GUARD_V(false);
return size_2d_override_stretch;
}
void SubViewport::set_update_mode(UpdateMode p_mode) {
+ ERR_MAIN_THREAD_GUARD;
update_mode = p_mode;
RS::get_singleton()->viewport_set_update_mode(get_viewport_rid(), RS::ViewportUpdateMode(p_mode));
}
SubViewport::UpdateMode SubViewport::get_update_mode() const {
+ ERR_READ_THREAD_GUARD_V(UPDATE_DISABLED);
return update_mode;
}
void SubViewport::set_clear_mode(ClearMode p_mode) {
+ ERR_MAIN_THREAD_GUARD;
clear_mode = p_mode;
RS::get_singleton()->viewport_set_clear_mode(get_viewport_rid(), RS::ViewportClearMode(p_mode));
}
SubViewport::ClearMode SubViewport::get_clear_mode() const {
+ ERR_READ_THREAD_GUARD_V(CLEAR_MODE_ALWAYS);
return clear_mode;
}
DisplayServer::WindowID SubViewport::get_window_id() const {
+ ERR_READ_THREAD_GUARD_V(DisplayServer::INVALID_WINDOW_ID);
return DisplayServer::INVALID_WINDOW_ID;
}
Transform2D SubViewport::get_screen_transform_internal(bool p_absolute_position) const {
+ ERR_READ_THREAD_GUARD_V(Transform2D());
Transform2D container_transform;
SubViewportContainer *c = Object::cast_to<SubViewportContainer>(get_parent());
if (c) {
@@ -4396,6 +4542,7 @@ Transform2D SubViewport::get_screen_transform_internal(bool p_absolute_position)
}
Transform2D SubViewport::get_popup_base_transform() const {
+ ERR_READ_THREAD_GUARD_V(Transform2D());
if (is_embedding_subwindows()) {
return Transform2D();
}
@@ -4411,6 +4558,7 @@ Transform2D SubViewport::get_popup_base_transform() const {
}
void SubViewport::_notification(int p_what) {
+ ERR_MAIN_THREAD_GUARD;
switch (p_what) {
case NOTIFICATION_ENTER_TREE: {
RS::get_singleton()->viewport_set_active(get_viewport_rid(), true);