From 278fc7538dbd98ff0e06410d69adca49b5326b21 Mon Sep 17 00:00:00 2001 From: clayjohn Date: Mon, 6 Mar 2023 15:46:40 -0800 Subject: [PATCH 01/30] Avoid overflow when calculating ptr address for 3D textures in RenderingDevice texture update (cherry picked from commit 06042a23b676c36f0afc1f3696d52cd60e79dc80) --- drivers/vulkan/rendering_device_vulkan.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/vulkan/rendering_device_vulkan.cpp b/drivers/vulkan/rendering_device_vulkan.cpp index 91a746636a..2166d12d31 100644 --- a/drivers/vulkan/rendering_device_vulkan.cpp +++ b/drivers/vulkan/rendering_device_vulkan.cpp @@ -2530,7 +2530,7 @@ Error RenderingDeviceVulkan::_texture_update(RID p_texture, uint32_t p_layer, co for (uint32_t z = 0; z < depth; z++) { // For 3D textures, depth may be > 0. - const uint8_t *read_ptr = read_ptr_mipmap + image_size * z / depth; + const uint8_t *read_ptr = read_ptr_mipmap + (image_size / depth) * z; for (uint32_t y = 0; y < height; y += region_size) { for (uint32_t x = 0; x < width; x += region_size) { From 7e74568709532181be3e803d64d22b8a03a45a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Fri, 3 Mar 2023 13:10:06 +0100 Subject: [PATCH 02/30] FBX: Disable importer when canceling FBX2glTF setup Pretty hacky solution but it's better than an infinite loop. All this import setup needs to be redone, it's very difficult to properly bail out from an invalid import without triggering reimport loops. Also fix underline not visible at default editor scale in LinkButton. Fixes #73319. (cherry picked from commit d81e6ee024a8c64b80ac25c96b33c749ba1db79d) --- editor/fbx_importer_manager.cpp | 26 +++++++++++++++++++++++++- editor/fbx_importer_manager.h | 3 +++ modules/gltf/register_types.cpp | 4 ++-- scene/gui/link_button.cpp | 5 +++-- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/editor/fbx_importer_manager.cpp b/editor/fbx_importer_manager.cpp index 2a005034a5..87f2d596e8 100644 --- a/editor/fbx_importer_manager.cpp +++ b/editor/fbx_importer_manager.cpp @@ -30,6 +30,8 @@ #include "fbx_importer_manager.h" +#include "core/config/project_settings.h" +#include "editor/editor_node.h" #include "editor/editor_scale.h" #include "editor/editor_settings.h" #include "scene/gui/link_button.h" @@ -47,9 +49,19 @@ void FBXImporterManager::show_dialog(bool p_exclusive) { fbx_path->set_text(fbx2gltf_path); _validate_path(fbx2gltf_path); - set_flag(Window::FLAG_BORDERLESS, p_exclusive); // Avoid closing accidentally . + // If exclusive, we're importing a FBX file, there's no exit. + is_importing = p_exclusive; + set_flag(Window::FLAG_BORDERLESS, p_exclusive); // Avoid closing accidentally. set_close_on_escape(!p_exclusive); + if (is_importing) { + get_cancel_button()->set_text(TTR("Disable FBX & Restart")); + get_cancel_button()->set_tooltip_text(TTR("Canceling this dialog will disable the FBX importer.\nYou can re-enable it in the Project Settings under Filesystem > Import > FBX > Enabled.\n\nThe editor will restart as importers are registered when the editor starts.")); + } else { + get_cancel_button()->set_text(TTR("Cancel")); + get_cancel_button()->set_tooltip_text(""); + } + popup_centered(); } @@ -96,6 +108,17 @@ void FBXImporterManager::_path_confirmed() { EditorSettings::get_singleton()->save(); } +void FBXImporterManager::_cancel_setup() { + if (!is_importing) { + return; // No worry. + } + // No escape. + ProjectSettings::get_singleton()->set("filesystem/import/fbx/enabled", false); + ProjectSettings::get_singleton()->save(); + EditorNode::get_singleton()->save_all_scenes(); + EditorNode::get_singleton()->restart_editor(); +} + void FBXImporterManager::_browse_install() { if (fbx_path->get_text() != String()) { browse_dialog->set_current_file(fbx_path->get_text()); @@ -140,6 +163,7 @@ FBXImporterManager::FBXImporterManager() { fbx_path->connect("text_changed", callable_mp(this, &FBXImporterManager::_validate_path)); get_ok_button()->set_text(TTR("Confirm Path")); + get_cancel_button()->connect("pressed", callable_mp(this, &FBXImporterManager::_cancel_setup)); browse_dialog = memnew(EditorFileDialog); browse_dialog->set_access(EditorFileDialog::ACCESS_FILESYSTEM); diff --git a/editor/fbx_importer_manager.h b/editor/fbx_importer_manager.h index ed0a96337e..dd5fcfd16e 100644 --- a/editor/fbx_importer_manager.h +++ b/editor/fbx_importer_manager.h @@ -38,6 +38,8 @@ class FBXImporterManager : public ConfirmationDialog { GDCLASS(FBXImporterManager, ConfirmationDialog) + bool is_importing = false; + Label *message = nullptr; LineEdit *fbx_path = nullptr; Button *fbx_path_browse = nullptr; @@ -47,6 +49,7 @@ class FBXImporterManager : public ConfirmationDialog { void _validate_path(const String &p_path); void _select_file(const String &p_path); void _path_confirmed(); + void _cancel_setup(); void _browse_install(); void _link_clicked(); diff --git a/modules/gltf/register_types.cpp b/modules/gltf/register_types.cpp index 78589090db..4754c316a1 100644 --- a/modules/gltf/register_types.cpp +++ b/modules/gltf/register_types.cpp @@ -143,8 +143,8 @@ void initialize_gltf_module(ModuleInitializationLevel p_level) { EditorPlugins::add_by_type(); // Project settings defined here so doctool finds them. - GLOBAL_DEF_RST("filesystem/import/blender/enabled", true); - GLOBAL_DEF_RST("filesystem/import/fbx/enabled", true); + GLOBAL_DEF_RST_BASIC("filesystem/import/blender/enabled", true); + GLOBAL_DEF_RST_BASIC("filesystem/import/fbx/enabled", true); GDREGISTER_CLASS(EditorSceneFormatImporterBlend); GDREGISTER_CLASS(EditorSceneFormatImporterFBX); // Can't (a priori) run external app on these platforms. diff --git a/scene/gui/link_button.cpp b/scene/gui/link_button.cpp index e6c3ca3b5f..b579791990 100644 --- a/scene/gui/link_button.cpp +++ b/scene/gui/link_button.cpp @@ -243,11 +243,12 @@ void LinkButton::_notification(int p_what) { if (do_underline) { int underline_spacing = theme_cache.underline_spacing + text_buf->get_line_underline_position(); int y = text_buf->get_line_ascent() + underline_spacing; + int underline_thickness = MAX(1, text_buf->get_line_underline_thickness()); if (is_layout_rtl()) { - draw_line(Vector2(size.width - width, y), Vector2(size.width, y), color, text_buf->get_line_underline_thickness()); + draw_line(Vector2(size.width - width, y), Vector2(size.width, y), color, underline_thickness); } else { - draw_line(Vector2(0, y), Vector2(width, y), color, text_buf->get_line_underline_thickness()); + draw_line(Vector2(0, y), Vector2(width, y), color, underline_thickness); } } } break; From 5a7624e50f8ea329046711a1c75bdd5c4e3fe932 Mon Sep 17 00:00:00 2001 From: Jakub Mateusz Marcowski <01158831@pw.edu.pl> Date: Wed, 1 Mar 2023 19:04:38 +0100 Subject: [PATCH 03/30] Modify JSON.stringify so that it doesn't create unnecessary empty lines from empty arrays (cherry picked from commit 0a55a320857b5ddb8ba4e3b6c096acf617f24733) --- core/io/json.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/io/json.cpp b/core/io/json.cpp index 448e39b2c3..8d0fe53ed4 100644 --- a/core/io/json.cpp +++ b/core/io/json.cpp @@ -91,9 +91,12 @@ String JSON::_stringify(const Variant &p_var, const String &p_indent, int p_cur_ case Variant::PACKED_FLOAT64_ARRAY: case Variant::PACKED_STRING_ARRAY: case Variant::ARRAY: { + Array a = p_var; + if (a.size() == 0) { + return "[]"; + } String s = "["; s += end_statement; - Array a = p_var; ERR_FAIL_COND_V_MSG(p_markers.has(a.id()), "\"[...]\"", "Converting circular structure to JSON."); p_markers.insert(a.id()); From 323c3f80c5885b7476a0aac9dd5fac39b3b0c290 Mon Sep 17 00:00:00 2001 From: Rindbee Date: Tue, 7 Mar 2023 16:05:11 +0800 Subject: [PATCH 04/30] Fix broken shortcut key input (cherry picked from commit 91e460d500c52505557ed79af4547f188b635589) --- platform/linuxbsd/x11/display_server_x11.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp index d1f1115aad..7a59a1a398 100644 --- a/platform/linuxbsd/x11/display_server_x11.cpp +++ b/platform/linuxbsd/x11/display_server_x11.cpp @@ -2917,7 +2917,7 @@ BitField DisplayServerX11::_get_mouse_button_state(MouseButton } void DisplayServerX11::_handle_key_event(WindowID p_window, XKeyEvent *p_event, LocalVector &p_events, uint32_t &p_event_index, bool p_echo) { - WindowData wd = windows[p_window]; + WindowData &wd = windows[p_window]; // X11 functions don't know what const is XKeyEvent *xkeyevent = p_event; From 89a40d317dd40337db08fbbd3925a4535f623812 Mon Sep 17 00:00:00 2001 From: Ryan Roden-Corrent Date: Wed, 23 Mar 2022 07:37:34 -0400 Subject: [PATCH 05/30] Disable local space for blender transforms. Having local_space enabled when starting a transform changed the behavior of VIEW space transforms. Now we disable local_space when starting a blender transform (there was already logic to restore the setting after the transform ends). This also hides the gizmo while performing a blender transform, otherwise the user will see it snap back and forth between the local and global alignment. I think the transform looks cleaner with the gizmo hidden anyways. Fixes #59392. (cherry picked from commit 806425621cfa3daba3ba9f6b020726490a3152a4) --- editor/plugins/node_3d_editor_plugin.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 7feb0146bc..7c1f54dc61 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -1110,6 +1110,7 @@ void Node3DEditorViewport::_compute_edit(const Point2 &p_point) { _edit.click_ray = _get_ray(p_point); _edit.click_ray_pos = _get_ray_pos(p_point); _edit.plane = TRANSFORM_VIEW; + spatial_editor->set_local_coords_enabled(false); spatial_editor->update_transform_gizmo(); _edit.center = spatial_editor->get_gizmo_transform().origin; @@ -3693,6 +3694,7 @@ void Node3DEditorViewport::update_transform_gizmo_view() { return; } + bool show_gizmo = spatial_editor->is_gizmo_visible() && !_edit.instant; for (int i = 0; i < 3; i++) { Transform3D axis_angle; if (xform.basis.get_column(i).normalized().dot(xform.basis.get_column((i + 1) % 3).normalized()) < 1.0) { @@ -3701,15 +3703,15 @@ void Node3DEditorViewport::update_transform_gizmo_view() { axis_angle.basis.scale(scale); axis_angle.origin = xform.origin; RenderingServer::get_singleton()->instance_set_transform(move_gizmo_instance[i], axis_angle); - RenderingServer::get_singleton()->instance_set_visible(move_gizmo_instance[i], spatial_editor->is_gizmo_visible() && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE)); + RenderingServer::get_singleton()->instance_set_visible(move_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE)); RenderingServer::get_singleton()->instance_set_transform(move_plane_gizmo_instance[i], axis_angle); - RenderingServer::get_singleton()->instance_set_visible(move_plane_gizmo_instance[i], spatial_editor->is_gizmo_visible() && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE)); + RenderingServer::get_singleton()->instance_set_visible(move_plane_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_MOVE)); RenderingServer::get_singleton()->instance_set_transform(rotate_gizmo_instance[i], axis_angle); - RenderingServer::get_singleton()->instance_set_visible(rotate_gizmo_instance[i], spatial_editor->is_gizmo_visible() && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_ROTATE)); + RenderingServer::get_singleton()->instance_set_visible(rotate_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SELECT || spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_ROTATE)); RenderingServer::get_singleton()->instance_set_transform(scale_gizmo_instance[i], axis_angle); - RenderingServer::get_singleton()->instance_set_visible(scale_gizmo_instance[i], spatial_editor->is_gizmo_visible() && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SCALE)); + RenderingServer::get_singleton()->instance_set_visible(scale_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SCALE)); RenderingServer::get_singleton()->instance_set_transform(scale_plane_gizmo_instance[i], axis_angle); - RenderingServer::get_singleton()->instance_set_visible(scale_plane_gizmo_instance[i], spatial_editor->is_gizmo_visible() && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SCALE)); + RenderingServer::get_singleton()->instance_set_visible(scale_plane_gizmo_instance[i], show_gizmo && (spatial_editor->get_tool_mode() == Node3DEditor::TOOL_MODE_SCALE)); RenderingServer::get_singleton()->instance_set_transform(axis_gizmo_instance[i], xform); } @@ -4477,6 +4479,7 @@ void Node3DEditorViewport::begin_transform(TransformMode p_mode, bool instant) { _compute_edit(_edit.mouse_pos); _edit.instant = instant; _edit.snap = spatial_editor->is_snap_enabled(); + update_transform_gizmo_view(); } } From d229ca2f27334856695e7e9230894b408284dfdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Aires=20Rast=C3=A9n?= Date: Sat, 4 Mar 2023 10:45:43 +0100 Subject: [PATCH 06/30] Fixed incorrect ERROR message when setting new PrimitiveMesh If calling set_mesh with a PrimitiveMesh that has pending update, the _mesh_changed function would be called twice. The first time before set_base had been called, which could lead to an ERROR message about trying to set an invalid surface override material. (cherry picked from commit 007b488a5c23b33c6e0b741b55a482e5229f2b90) --- scene/3d/mesh_instance_3d.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scene/3d/mesh_instance_3d.cpp b/scene/3d/mesh_instance_3d.cpp index 10a7a4e78b..86301ee53f 100644 --- a/scene/3d/mesh_instance_3d.cpp +++ b/scene/3d/mesh_instance_3d.cpp @@ -117,8 +117,10 @@ void MeshInstance3D::set_mesh(const Ref &p_mesh) { mesh = p_mesh; if (mesh.is_valid()) { - mesh->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &MeshInstance3D::_mesh_changed)); + // If mesh is a PrimitiveMesh, calling get_rid on it can trigger a changed callback + // so do this before connecting _mesh_changed. set_base(mesh->get_rid()); + mesh->connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &MeshInstance3D::_mesh_changed)); _mesh_changed(); } else { blend_shape_tracks.clear(); From 18bf2663f92e2dee528d23a18e336214c8581879 Mon Sep 17 00:00:00 2001 From: SlugFiller <5435495+SlugFiller@users.noreply.github.com> Date: Sun, 5 Mar 2023 08:21:08 +0200 Subject: [PATCH 07/30] Fix AABB calculation for meshes using Skeleton2D (cherry picked from commit 06a1fe03644c57256b90b2840db1ef902187145a) --- drivers/gles3/storage/mesh_storage.cpp | 17 +++++++++-------- .../renderer_rd/storage_rd/mesh_storage.cpp | 17 +++++++++-------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/drivers/gles3/storage/mesh_storage.cpp b/drivers/gles3/storage/mesh_storage.cpp index 1adba019ba..44c9dc714c 100644 --- a/drivers/gles3/storage/mesh_storage.cpp +++ b/drivers/gles3/storage/mesh_storage.cpp @@ -327,6 +327,7 @@ void MeshStorage::mesh_add_surface(RID p_mesh, const RS::SurfaceData &p_surface) } else { mesh->aabb.merge_with(p_surface.aabb); } + mesh->skeleton_aabb_version = 0; s->material = p_surface.material; @@ -541,12 +542,12 @@ AABB MeshStorage::mesh_get_aabb(RID p_mesh, RID p_skeleton) { Transform3D mtx; - mtx.basis.rows[0].x = dataptr[0]; - mtx.basis.rows[1].x = dataptr[1]; + mtx.basis.rows[0][0] = dataptr[0]; + mtx.basis.rows[0][1] = dataptr[1]; mtx.origin.x = dataptr[3]; - mtx.basis.rows[0].y = dataptr[4]; - mtx.basis.rows[1].y = dataptr[5]; + mtx.basis.rows[1][0] = dataptr[4]; + mtx.basis.rows[1][1] = dataptr[5]; mtx.origin.y = dataptr[7]; AABB baabb = mtx.xform(skbones[j]); @@ -1438,12 +1439,12 @@ void MeshStorage::_multimesh_re_create_aabb(MultiMesh *multimesh, const float *p t.origin.z = data[11]; } else { - t.basis.rows[0].x = data[0]; - t.basis.rows[1].x = data[1]; + t.basis.rows[0][0] = data[0]; + t.basis.rows[0][1] = data[1]; t.origin.x = data[3]; - t.basis.rows[0].y = data[4]; - t.basis.rows[1].y = data[5]; + t.basis.rows[1][0] = data[4]; + t.basis.rows[1][1] = data[5]; t.origin.y = data[7]; } diff --git a/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp b/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp index 96618c3352..b91e73c885 100644 --- a/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp @@ -438,6 +438,7 @@ void MeshStorage::mesh_add_surface(RID p_mesh, const RS::SurfaceData &p_surface) } else { mesh->aabb.merge_with(p_surface.aabb); } + mesh->skeleton_aabb_version = 0; s->material = p_surface.material; @@ -634,12 +635,12 @@ AABB MeshStorage::mesh_get_aabb(RID p_mesh, RID p_skeleton) { Transform3D mtx; - mtx.basis.rows[0].x = dataptr[0]; - mtx.basis.rows[1].x = dataptr[1]; + mtx.basis.rows[0][0] = dataptr[0]; + mtx.basis.rows[0][1] = dataptr[1]; mtx.origin.x = dataptr[3]; - mtx.basis.rows[0].y = dataptr[4]; - mtx.basis.rows[1].y = dataptr[5]; + mtx.basis.rows[1][0] = dataptr[4]; + mtx.basis.rows[1][1] = dataptr[5]; mtx.origin.y = dataptr[7]; AABB baabb = mtx.xform(skbones[j]); @@ -1501,12 +1502,12 @@ void MeshStorage::_multimesh_re_create_aabb(MultiMesh *multimesh, const float *p t.origin.z = data[11]; } else { - t.basis.rows[0].x = data[0]; - t.basis.rows[1].x = data[1]; + t.basis.rows[0][0] = data[0]; + t.basis.rows[0][1] = data[1]; t.origin.x = data[3]; - t.basis.rows[0].y = data[4]; - t.basis.rows[1].y = data[5]; + t.basis.rows[1][0] = data[4]; + t.basis.rows[1][1] = data[5]; t.origin.y = data[7]; } From d508d0a6423627859a92c4b4bd45ffa176114066 Mon Sep 17 00:00:00 2001 From: SlugFiller <5435495+SlugFiller@users.noreply.github.com> Date: Tue, 7 Mar 2023 08:09:39 +0200 Subject: [PATCH 08/30] Fixes a canvas item set to clip children being drawn as black if no children are visible (cherry picked from commit f25508befb4f0358ba8a8aaa35cdee4d9c20637c) --- drivers/gles3/rasterizer_canvas_gles3.cpp | 28 ++++++++++++------- servers/rendering/renderer_canvas_render.h | 1 + .../renderer_rd/renderer_canvas_render_rd.cpp | 28 ++++++++++++------- 3 files changed, 37 insertions(+), 20 deletions(-) diff --git a/drivers/gles3/rasterizer_canvas_gles3.cpp b/drivers/gles3/rasterizer_canvas_gles3.cpp index 2f7e68e463..522685bf87 100644 --- a/drivers/gles3/rasterizer_canvas_gles3.cpp +++ b/drivers/gles3/rasterizer_canvas_gles3.cpp @@ -396,6 +396,7 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_ Item *ci = p_item_list; Item *canvas_group_owner = nullptr; + bool skip_item = false; state.last_item_index = 0; @@ -464,6 +465,7 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_ Rect2i group_rect = ci->canvas_group_owner->global_rect_cache; texture_storage->render_target_copy_to_back_buffer(p_to_render_target, group_rect, false); if (ci->canvas_group_owner->canvas_group->mode == RS::CANVAS_GROUP_MODE_CLIP_AND_DRAW) { + ci->canvas_group_owner->use_canvas_group = false; items[item_count++] = ci->canvas_group_owner; } } else if (!backbuffer_cleared) { @@ -478,9 +480,8 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_ ci->canvas_group_owner = nullptr; //must be cleared } - if (!backbuffer_cleared && canvas_group_owner == nullptr && ci->canvas_group != nullptr && !backbuffer_copy) { - texture_storage->render_target_clear_back_buffer(p_to_render_target, Rect2i(), Color(0, 0, 0, 0)); - backbuffer_cleared = true; + if (canvas_group_owner == nullptr && ci->canvas_group != nullptr && ci->canvas_group->mode != RS::CANVAS_GROUP_MODE_CLIP_AND_DRAW) { + skip_item = true; } if (ci == canvas_group_owner) { @@ -498,6 +499,11 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_ canvas_group_owner = nullptr; // Backbuffer is dirty now and needs to be re-cleared if another CanvasGroup needs it. backbuffer_cleared = false; + + // Tell the renderer to paint this as a canvas group + ci->use_canvas_group = true; + } else { + ci->use_canvas_group = false; } if (backbuffer_copy) { @@ -513,9 +519,9 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_ texture_storage->render_target_copy_to_back_buffer(p_to_render_target, back_buffer_rect, backbuffer_gen_mipmaps); backbuffer_copy = false; - backbuffer_gen_mipmaps = false; material_screen_texture_cached = true; // After a backbuffer copy, screen texture makes no further copies. material_screen_texture_mipmaps_cached = backbuffer_gen_mipmaps; + backbuffer_gen_mipmaps = false; } if (backbuffer_gen_mipmaps) { @@ -526,14 +532,18 @@ void RasterizerCanvasGLES3::canvas_render_items(RID p_to_render_target, Item *p_ } // just add all items for now - items[item_count++] = ci; + if (skip_item) { + skip_item = false; + } else { + items[item_count++] = ci; + } if (!ci->next || item_count == MAX_RENDER_ITEMS - 1) { if (update_skeletons) { mesh_storage->update_mesh_instances(); update_skeletons = false; } - _render_items(p_to_render_target, item_count, canvas_transform_inverse, p_light_list, r_sdf_used); + _render_items(p_to_render_target, item_count, canvas_transform_inverse, p_light_list, r_sdf_used, canvas_group_owner != nullptr); //then reset item_count = 0; } @@ -586,11 +596,9 @@ void RasterizerCanvasGLES3::_render_items(RID p_to_render_target, int p_item_cou } RID material = ci->material_owner == nullptr ? ci->material : ci->material_owner->material; - if (ci->canvas_group != nullptr) { + if (ci->use_canvas_group) { if (ci->canvas_group->mode == RS::CANVAS_GROUP_MODE_CLIP_AND_DRAW) { - if (!p_to_backbuffer) { - material = default_clip_children_material; - } + material = default_clip_children_material; } else { if (material.is_null()) { if (ci->canvas_group->mode == RS::CANVAS_GROUP_MODE_CLIP_ONLY) { diff --git a/servers/rendering/renderer_canvas_render.h b/servers/rendering/renderer_canvas_render.h index dc838047cc..c30e53c29e 100644 --- a/servers/rendering/renderer_canvas_render.h +++ b/servers/rendering/renderer_canvas_render.h @@ -321,6 +321,7 @@ public: }; CanvasGroup *canvas_group = nullptr; + bool use_canvas_group = false; int light_mask; int z_final; diff --git a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp index 78bdd3f541..f49d8be37a 100644 --- a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp @@ -1110,11 +1110,9 @@ void RendererCanvasRenderRD::_render_items(RID p_to_render_target, int p_item_co RID material = ci->material_owner == nullptr ? ci->material : ci->material_owner->material; - if (ci->canvas_group != nullptr) { + if (ci->use_canvas_group) { if (ci->canvas_group->mode == RS::CANVAS_GROUP_MODE_CLIP_AND_DRAW) { - if (!p_to_backbuffer) { - material = default_clip_children_material; - } + material = default_clip_children_material; } else { if (material.is_null()) { if (ci->canvas_group->mode == RS::CANVAS_GROUP_MODE_CLIP_ONLY) { @@ -1381,6 +1379,7 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p bool backbuffer_gen_mipmaps = false; Item *canvas_group_owner = nullptr; + bool skip_item = false; bool update_skeletons = false; bool time_used = false; @@ -1453,6 +1452,7 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p Rect2i group_rect = ci->canvas_group_owner->global_rect_cache; texture_storage->render_target_copy_to_back_buffer(p_to_render_target, group_rect, false); if (ci->canvas_group_owner->canvas_group->mode == RS::CANVAS_GROUP_MODE_CLIP_AND_DRAW) { + ci->canvas_group_owner->use_canvas_group = false; items[item_count++] = ci->canvas_group_owner; } } else if (!backbuffer_cleared) { @@ -1467,9 +1467,8 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p ci->canvas_group_owner = nullptr; //must be cleared } - if (!backbuffer_cleared && canvas_group_owner == nullptr && ci->canvas_group != nullptr && !backbuffer_copy) { - texture_storage->render_target_clear_back_buffer(p_to_render_target, Rect2i(), Color(0, 0, 0, 0)); - backbuffer_cleared = true; + if (canvas_group_owner == nullptr && ci->canvas_group != nullptr && ci->canvas_group->mode != RS::CANVAS_GROUP_MODE_CLIP_AND_DRAW) { + skip_item = true; } if (ci == canvas_group_owner) { @@ -1488,6 +1487,11 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p canvas_group_owner = nullptr; // Backbuffer is dirty now and needs to be re-cleared if another CanvasGroup needs it. backbuffer_cleared = false; + + // Tell the renderer to paint this as a canvas group + ci->use_canvas_group = true; + } else { + ci->use_canvas_group = false; } if (backbuffer_copy) { @@ -1503,9 +1507,9 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p texture_storage->render_target_copy_to_back_buffer(p_to_render_target, back_buffer_rect, backbuffer_gen_mipmaps); backbuffer_copy = false; - backbuffer_gen_mipmaps = false; material_screen_texture_cached = true; // After a backbuffer copy, screen texture makes no further copies. material_screen_texture_mipmaps_cached = backbuffer_gen_mipmaps; + backbuffer_gen_mipmaps = false; } if (backbuffer_gen_mipmaps) { @@ -1515,7 +1519,11 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p material_screen_texture_mipmaps_cached = true; } - items[item_count++] = ci; + if (skip_item) { + skip_item = false; + } else { + items[item_count++] = ci; + } if (!ci->next || item_count == MAX_RENDER_ITEMS - 1) { if (update_skeletons) { @@ -1523,7 +1531,7 @@ void RendererCanvasRenderRD::canvas_render_items(RID p_to_render_target, Item *p update_skeletons = false; } - _render_items(p_to_render_target, item_count, canvas_transform_inverse, p_light_list, r_sdf_used, false); + _render_items(p_to_render_target, item_count, canvas_transform_inverse, p_light_list, r_sdf_used, canvas_group_owner != nullptr); //then reset item_count = 0; } From 08845dc3f000cd4de4ce1d6faabda398a5aed8b9 Mon Sep 17 00:00:00 2001 From: clayjohn Date: Tue, 7 Mar 2023 09:24:05 -0800 Subject: [PATCH 09/30] Propogate errors when creating an OpenGL context fails in X11 (cherry picked from commit e7ea3ef53189d4bc94c784e4805a5311701ba9aa) --- platform/linuxbsd/x11/display_server_x11.cpp | 4 +++- platform/linuxbsd/x11/gl_manager_x11.cpp | 23 ++++++++++++++++---- platform/linuxbsd/x11/gl_manager_x11.h | 2 +- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp index 7a59a1a398..aa31ec83b2 100644 --- a/platform/linuxbsd/x11/display_server_x11.cpp +++ b/platform/linuxbsd/x11/display_server_x11.cpp @@ -4873,7 +4873,9 @@ DisplayServerX11::WindowID DisplayServerX11::_create_window(WindowMode p_mode, V #ifdef GLES3_ENABLED if (gl_manager) { - visualInfo = gl_manager->get_vi(x11_display); + Error err; + visualInfo = gl_manager->get_vi(x11_display, err); + ERR_FAIL_COND_V_MSG(err != OK, INVALID_WINDOW_ID, "Can't acquire visual info from display."); vi_selected = true; } #endif diff --git a/platform/linuxbsd/x11/gl_manager_x11.cpp b/platform/linuxbsd/x11/gl_manager_x11.cpp index 03ba95f475..ee767dfa80 100644 --- a/platform/linuxbsd/x11/gl_manager_x11.cpp +++ b/platform/linuxbsd/x11/gl_manager_x11.cpp @@ -83,8 +83,13 @@ int GLManager_X11::_find_or_create_display(Display *p_x11_display) { d.context = memnew(GLManager_X11_Private); d.context->glx_context = nullptr; - //Error err = _create_context(d); - _create_context(d); + Error err = _create_context(d); + + if (err != OK) { + _displays.remove_at(new_display_id); + return -1; + } + return new_display_id; } @@ -191,8 +196,14 @@ Error GLManager_X11::_create_context(GLDisplay &gl_display) { return OK; } -XVisualInfo GLManager_X11::get_vi(Display *p_display) { - return _displays[_find_or_create_display(p_display)].x_vi; +XVisualInfo GLManager_X11::get_vi(Display *p_display, Error &r_error) { + int display_id = _find_or_create_display(p_display); + if (display_id < 0) { + r_error = FAILED; + return XVisualInfo(); + } + r_error = OK; + return _displays[display_id].x_vi; } Error GLManager_X11::window_create(DisplayServer::WindowID p_window_id, ::Window p_window, Display *p_display, int p_width, int p_height) { @@ -211,6 +222,10 @@ Error GLManager_X11::window_create(DisplayServer::WindowID p_window_id, ::Window win.x11_window = p_window; win.gldisplay_id = _find_or_create_display(p_display); + if (win.gldisplay_id == -1) { + return FAILED; + } + // the display could be invalid .. check NYI GLDisplay &gl_display = _displays[win.gldisplay_id]; ::Display *x11_display = gl_display.x11_display; diff --git a/platform/linuxbsd/x11/gl_manager_x11.h b/platform/linuxbsd/x11/gl_manager_x11.h index 0eb8ab64f4..0203dff679 100644 --- a/platform/linuxbsd/x11/gl_manager_x11.h +++ b/platform/linuxbsd/x11/gl_manager_x11.h @@ -114,7 +114,7 @@ private: Error _create_context(GLDisplay &gl_display); public: - XVisualInfo get_vi(Display *p_display); + XVisualInfo get_vi(Display *p_display, Error &r_error); Error window_create(DisplayServer::WindowID p_window_id, ::Window p_window, Display *p_display, int p_width, int p_height); void window_destroy(DisplayServer::WindowID p_window_id); void window_resize(DisplayServer::WindowID p_window_id, int p_width, int p_height); From 47dc4bc3072208b973d2a0d26c8f9502e09c7f40 Mon Sep 17 00:00:00 2001 From: Ryan Roden-Corrent Date: Wed, 8 Mar 2023 06:14:34 -0500 Subject: [PATCH 10/30] Don't unset local_coords on starting transform. This fixes a bug introduced by 806425621cfa3daba3ba9f6b020726490a3152a4, where dragging the gizmo no longer respected local transforms. I'm not sure why I called set_local_coords_enabled(false) in _compute_edit. Removing this line seems to fix gizmo-dragging local transforms, without breaking anything else. I also noticed that confirming a transform leaves the gizmo axis lines on the screen. This is fixed by calling update_transform_gizmo after clearing the edit mode/instant flags, so update_transform_gizmo knows not to render any axes. (cherry picked from commit d3d1223b970140b6a37d0c23e3b234c878be510a) --- editor/plugins/node_3d_editor_plugin.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp index 7c1f54dc61..333771ceb4 100644 --- a/editor/plugins/node_3d_editor_plugin.cpp +++ b/editor/plugins/node_3d_editor_plugin.cpp @@ -1110,7 +1110,6 @@ void Node3DEditorViewport::_compute_edit(const Point2 &p_point) { _edit.click_ray = _get_ray(p_point); _edit.click_ray_pos = _get_ray_pos(p_point); _edit.plane = TRANSFORM_VIEW; - spatial_editor->set_local_coords_enabled(false); spatial_editor->update_transform_gizmo(); _edit.center = spatial_editor->get_gizmo_transform().origin; @@ -4861,9 +4860,9 @@ void Node3DEditorViewport::update_transform(Point2 p_mousepos, bool p_shift) { void Node3DEditorViewport::finish_transform() { spatial_editor->set_local_coords_enabled(_edit.original_local); - spatial_editor->update_transform_gizmo(); _edit.mode = TRANSFORM_NONE; _edit.instant = false; + spatial_editor->update_transform_gizmo(); surface->queue_redraw(); } From 4ff705b37eca3b8de2acf5919caf2324cba9c49d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Aires=20Rast=C3=A9n?= Date: Sat, 4 Mar 2023 11:49:18 +0100 Subject: [PATCH 11/30] Fix instance uniforms breaking when setting a new mesh. Fixes #58113 (cherry picked from commit 26aecbfe572c7c1164cfb36088aaf443a73f99df) --- servers/rendering/renderer_scene_cull.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp index 813c1fa4ff..6a872da69e 100644 --- a/servers/rendering/renderer_scene_cull.cpp +++ b/servers/rendering/renderer_scene_cull.cpp @@ -653,6 +653,7 @@ void RendererSceneCull::instance_set_base(RID p_instance, RID p_base) { geom->geometry_instance->set_use_baked_light(instance->baked_light); geom->geometry_instance->set_use_dynamic_gi(instance->dynamic_gi); geom->geometry_instance->set_use_lightmap(RID(), instance->lightmap_uv_scale, instance->lightmap_slice_index); + geom->geometry_instance->set_instance_shader_uniforms_offset(instance->instance_allocated_shader_uniforms_offset); geom->geometry_instance->set_cast_double_sided_shadows(instance->cast_shadows == RS::SHADOW_CASTING_SETTING_DOUBLE_SIDED); if (instance->lightmap_sh.size() == 9) { geom->geometry_instance->set_lightmap_capture(instance->lightmap_sh.ptr()); From b4a1bfd6d5d9587c2771e9882e02569cd91d3dcb Mon Sep 17 00:00:00 2001 From: Haoyu Qiu Date: Wed, 8 Mar 2023 19:12:43 +0800 Subject: [PATCH 12/30] Fix coloring of the renderer options button (cherry picked from commit ac7a4f6e879715f1fece59facffbed3f78ab9b94) --- editor/editor_node.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 8040ba5f1c..0b438d8896 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -6494,13 +6494,15 @@ void EditorNode::_bottom_panel_raise_toggled(bool p_pressed) { } void EditorNode::_update_renderer_color() { - if (renderer->get_text() == "Forward+") { + String rendering_method = renderer->get_selected_metadata(); + + if (rendering_method == "forward_plus") { renderer->add_theme_color_override("font_color", Color::hex(0x5d8c3fff)); } - if (renderer->get_text() == "Mobile") { + if (rendering_method == "mobile") { renderer->add_theme_color_override("font_color", Color::hex(0xa5557dff)); } - if (renderer->get_text() == "Compatibility") { + if (rendering_method == "gl_compatibility") { renderer->add_theme_color_override("font_color", Color::hex(0x5586a4ff)); } } From f9bb1d3174e7ab88b738b48967972d13f53da627 Mon Sep 17 00:00:00 2001 From: RedworkDE <10944644+RedworkDE@users.noreply.github.com> Date: Tue, 7 Mar 2023 15:36:57 +0100 Subject: [PATCH 13/30] Fix buffer overrun in CPUParticles3D (cherry picked from commit 89980dd9c98a01b6d353a9a087f5a4caec2dd1aa) --- scene/3d/cpu_particles_3d.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scene/3d/cpu_particles_3d.cpp b/scene/3d/cpu_particles_3d.cpp index c88eb033de..23855b2d8e 100644 --- a/scene/3d/cpu_particles_3d.cpp +++ b/scene/3d/cpu_particles_3d.cpp @@ -1207,7 +1207,7 @@ void CPUParticles3D::_update_particle_data_buffer() { ptr[10] = t.basis.rows[2][2]; ptr[11] = t.origin.z; } else { - memset(ptr, 0, sizeof(Transform3D)); + memset(ptr, 0, sizeof(float) * 12); } Color c = r[idx].color; From 5ae484c13823cc3422b5bf6d3f320e6d1cf61b80 Mon Sep 17 00:00:00 2001 From: VolTer Date: Thu, 16 Feb 2023 04:49:42 +0100 Subject: [PATCH 14/30] Fix error spam when naming a func at the end of the script (cherry picked from commit 07dd627728b71dd3ea30bab9761a847a7e0c911e) --- modules/gdscript/gdscript_parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index c402b63f7b..00a3e41c2b 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -1521,7 +1521,7 @@ GDScriptParser::SuiteNode *GDScriptParser::parse_suite(const String &p_context, int error_count = 0; do { - if (!multiline && previous.type == GDScriptTokenizer::Token::SEMICOLON && check(GDScriptTokenizer::Token::NEWLINE)) { + if (is_at_end() || (!multiline && previous.type == GDScriptTokenizer::Token::SEMICOLON && check(GDScriptTokenizer::Token::NEWLINE))) { break; } Node *statement = parse_statement(); From 0c1abbd79efea87b358be8a00fa2d903ccae4a3b Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Wed, 8 Mar 2023 12:13:41 +0200 Subject: [PATCH 15/30] [Linux/X11] Add some missing keycodes/scancodes. (cherry picked from commit 5d35c600d5e4d6fc553246407e766d600f5b774e) --- platform/linuxbsd/x11/key_mapping_x11.cpp | 44 +++++++++++++++++------ platform/windows/key_mapping_windows.cpp | 2 +- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/platform/linuxbsd/x11/key_mapping_x11.cpp b/platform/linuxbsd/x11/key_mapping_x11.cpp index fe73162280..0f709872cb 100644 --- a/platform/linuxbsd/x11/key_mapping_x11.cpp +++ b/platform/linuxbsd/x11/key_mapping_x11.cpp @@ -85,8 +85,8 @@ void KeyMappingX11::initialize() { xkeysym_map[XK_Begin] = Key::CLEAR; xkeysym_map[XK_Insert] = Key::INSERT; xkeysym_map[XK_Delete] = Key::KEY_DELETE; - //xkeysym_map[XK_KP_Equal] - //xkeysym_map[XK_KP_Separator] + xkeysym_map[XK_KP_Equal] = Key::EQUAL; + xkeysym_map[XK_KP_Separator] = Key::COMMA; xkeysym_map[XK_KP_Decimal] = Key::KP_PERIOD; xkeysym_map[XK_KP_Delete] = Key::KP_PERIOD; xkeysym_map[XK_KP_Multiply] = Key::KP_MULTIPLY; @@ -220,7 +220,7 @@ void KeyMappingX11::initialize() { scancode_map[0x22] = Key::BRACKETLEFT; scancode_map[0x23] = Key::BRACKETRIGHT; scancode_map[0x24] = Key::ENTER; - scancode_map[0x25] = Key::CTRL; + scancode_map[0x25] = Key::CTRL; // Left scancode_map[0x26] = Key::A; scancode_map[0x27] = Key::S; scancode_map[0x28] = Key::D; @@ -233,7 +233,7 @@ void KeyMappingX11::initialize() { scancode_map[0x2F] = Key::SEMICOLON; scancode_map[0x30] = Key::APOSTROPHE; scancode_map[0x31] = Key::QUOTELEFT; - scancode_map[0x32] = Key::SHIFT; + scancode_map[0x32] = Key::SHIFT; // Left scancode_map[0x33] = Key::BACKSLASH; scancode_map[0x34] = Key::Z; scancode_map[0x35] = Key::X; @@ -245,9 +245,9 @@ void KeyMappingX11::initialize() { scancode_map[0x3B] = Key::COMMA; scancode_map[0x3C] = Key::PERIOD; scancode_map[0x3D] = Key::SLASH; - scancode_map[0x3E] = Key::SHIFT; + scancode_map[0x3E] = Key::SHIFT; // Right scancode_map[0x3F] = Key::KP_MULTIPLY; - scancode_map[0x40] = Key::ALT; + scancode_map[0x40] = Key::ALT; // Left scancode_map[0x41] = Key::SPACE; scancode_map[0x42] = Key::CAPSLOCK; scancode_map[0x43] = Key::F1; @@ -275,14 +275,23 @@ void KeyMappingX11::initialize() { scancode_map[0x59] = Key::KP_3; scancode_map[0x5A] = Key::KP_0; scancode_map[0x5B] = Key::KP_PERIOD; + //scancode_map[0x5C] + //scancode_map[0x5D] // Zenkaku Hankaku scancode_map[0x5E] = Key::SECTION; scancode_map[0x5F] = Key::F11; scancode_map[0x60] = Key::F12; + //scancode_map[0x61] // Romaji + //scancode_map[0x62] // Katakana + //scancode_map[0x63] // Hiragana + //scancode_map[0x64] // Henkan + //scancode_map[0x65] // Hiragana Katakana + //scancode_map[0x66] // Muhenkan + scancode_map[0x67] = Key::COMMA; // KP_Separator scancode_map[0x68] = Key::KP_ENTER; - scancode_map[0x69] = Key::CTRL; + scancode_map[0x69] = Key::CTRL; // Right scancode_map[0x6A] = Key::KP_DIVIDE; scancode_map[0x6B] = Key::PRINT; - scancode_map[0x6C] = Key::ALT; + scancode_map[0x6C] = Key::ALT; // Right scancode_map[0x6D] = Key::ENTER; scancode_map[0x6E] = Key::HOME; scancode_map[0x6F] = Key::UP; @@ -294,13 +303,28 @@ void KeyMappingX11::initialize() { scancode_map[0x75] = Key::PAGEDOWN; scancode_map[0x76] = Key::INSERT; scancode_map[0x77] = Key::KEY_DELETE; + //scancode_map[0x78] // Macro scancode_map[0x79] = Key::VOLUMEMUTE; scancode_map[0x7A] = Key::VOLUMEDOWN; scancode_map[0x7B] = Key::VOLUMEUP; + //scancode_map[0x7C] // Power + scancode_map[0x7D] = Key::EQUAL; // KP_Equal + //scancode_map[0x7E] // KP_PlusMinus scancode_map[0x7F] = Key::PAUSE; - scancode_map[0x85] = Key::META; - scancode_map[0x86] = Key::META; + scancode_map[0x80] = Key::LAUNCH0; + scancode_map[0x81] = Key::COMMA; // KP_Comma + //scancode_map[0x82] // Hangul + //scancode_map[0x83] // Hangul_Hanja + scancode_map[0x84] = Key::YEN; + scancode_map[0x85] = Key::META; // Left + scancode_map[0x86] = Key::META; // Right scancode_map[0x87] = Key::MENU; + + scancode_map[0xA6] = Key::BACK; // On Chromebooks + scancode_map[0xA7] = Key::FORWARD; // On Chromebooks + + scancode_map[0xB5] = Key::REFRESH; // On Chromebooks + scancode_map[0xBF] = Key::F13; scancode_map[0xC0] = Key::F14; scancode_map[0xC1] = Key::F15; diff --git a/platform/windows/key_mapping_windows.cpp b/platform/windows/key_mapping_windows.cpp index aa393464b6..b376854c0c 100644 --- a/platform/windows/key_mapping_windows.cpp +++ b/platform/windows/key_mapping_windows.cpp @@ -315,7 +315,7 @@ void KeyMappingWindows::initialize() { scansym_map[0x51] = Key::KP_3; scansym_map[0x52] = Key::KP_0; scansym_map[0x53] = Key::KP_PERIOD; - scansym_map[0x57] = Key::SECTION; + scansym_map[0x56] = Key::SECTION; scansym_map[0x57] = Key::F11; scansym_map[0x58] = Key::F12; scansym_map[0x5B] = Key::META; From e79477a4b5521243421038bd8aa4d18a6bc5c2d3 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Fri, 3 Mar 2023 11:07:34 +0100 Subject: [PATCH 16/30] Document using `String.uri_encode()` with `OS.shell_open()` (cherry picked from commit 81ac3c3e7157a290c02548e7ad6adf50fd6e5118) --- doc/classes/OS.xml | 1 + doc/classes/String.xml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml index ca090d596e..92ee2fb40b 100644 --- a/doc/classes/OS.xml +++ b/doc/classes/OS.xml @@ -634,6 +634,7 @@ - [code]OS.shell_open("https://godotengine.org")[/code] opens the default web browser on the official Godot website. - [code]OS.shell_open("mailto:example@example.com")[/code] opens the default email client with the "To" field set to [code]example@example.com[/code]. See [url=https://datatracker.ietf.org/doc/html/rfc2368]RFC 2368 - The [code]mailto[/code] URL scheme[/url] for a list of fields that can be added. Use [method ProjectSettings.globalize_path] to convert a [code]res://[/code] or [code]user://[/code] path into a system path for use with this method. + [b]Note:[/b] Use [method String.uri_encode] to encode characters within URLs in a URL-safe, portable way. This is especially required for line breaks. Otherwise, [method shell_open] may not work correctly in a project exported to the Web platform. [b]Note:[/b] This method is implemented on Android, iOS, Web, Linux, macOS and Windows. diff --git a/doc/classes/String.xml b/doc/classes/String.xml index 53b34332d7..5e443b018c 100644 --- a/doc/classes/String.xml +++ b/doc/classes/String.xml @@ -970,7 +970,7 @@ - Decodes the string from its URL-encoded format. This method is meant to properly decode the parameters in a URL when receiving an HTTP request. + Decodes the string from its URL-encoded format. This method is meant to properly decode the parameters in a URL when receiving an HTTP request. See also [method uri_encode]. [codeblocks] [gdscript] var url = "$DOCS_URL/?highlight=Godot%20Engine%3%docs" @@ -986,7 +986,7 @@ - Encodes the string to URL-friendly format. This method is meant to properly encode the parameters in a URL when sending an HTTP request. + Encodes the string to URL-friendly format. This method is meant to properly encode the parameters in a URL when sending an HTTP request. See also [method uri_decode]. [codeblocks] [gdscript] var prefix = "$DOCS_URL/?highlight=" From 006410ae46b59bb2699d0885a12d93f53e99a59e Mon Sep 17 00:00:00 2001 From: Chris Weber Date: Sat, 4 Mar 2023 17:24:00 +0100 Subject: [PATCH 17/30] increased max touches to 32 for ios (cherry picked from commit 54bd204377fb73a5871946005bd7cbbad4b91df9) --- platform/ios/godot_view.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/ios/godot_view.mm b/platform/ios/godot_view.mm index fafec79bf6..67e47092d8 100644 --- a/platform/ios/godot_view.mm +++ b/platform/ios/godot_view.mm @@ -39,7 +39,7 @@ #import -static const int max_touches = 8; +static const int max_touches = 32; static const float earth_gravity = 9.80665; @interface GodotView () { From 10424abb29709a9ef6c6761fc3c704ace0f642e8 Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Wed, 8 Mar 2023 22:27:42 +0100 Subject: [PATCH 18/30] Tweak command syntax in Vulkan renderer failure message This quotes the executable name so that copying it always works (even if the path contains spaces). The command is also indented from the rest of the text and is no longer single-quoted, as that can prevent the command from running if the line is copied in its entirety (with the quotes). (cherry picked from commit ddc9cc3e492861dff43617cecb24ae919e122455) --- platform/linuxbsd/x11/display_server_x11.cpp | 2 +- platform/macos/display_server_macos.mm | 6 +++--- platform/windows/display_server_windows.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/platform/linuxbsd/x11/display_server_x11.cpp b/platform/linuxbsd/x11/display_server_x11.cpp index aa31ec83b2..5be1bd236b 100644 --- a/platform/linuxbsd/x11/display_server_x11.cpp +++ b/platform/linuxbsd/x11/display_server_x11.cpp @@ -4850,7 +4850,7 @@ DisplayServer *DisplayServerX11::create_func(const String &p_rendering_driver, W vformat("Your video card drivers seem not to support the required Vulkan version.\n\n" "If possible, consider updating your video card drivers or using the OpenGL 3 driver.\n\n" "You can enable the OpenGL 3 driver by starting the engine from the\n" - "command line with the command:\n'%s --rendering-driver opengl3'\n\n" + "command line with the command:\n\n \"%s\" --rendering-driver opengl3\n\n" "If you recently updated your video card drivers, try rebooting.", executable_name), "Unable to initialize Vulkan video driver"); diff --git a/platform/macos/display_server_macos.mm b/platform/macos/display_server_macos.mm index e8eb5b419b..af80c1c590 100644 --- a/platform/macos/display_server_macos.mm +++ b/platform/macos/display_server_macos.mm @@ -3617,15 +3617,15 @@ DisplayServer *DisplayServerMacOS::create_func(const String &p_rendering_driver, if (p_rendering_driver == "vulkan") { String executable_command; if (OS::get_singleton()->get_bundle_resource_dir() == OS::get_singleton()->get_executable_path().get_base_dir()) { - executable_command = vformat("%s --rendering-driver opengl3", OS::get_singleton()->get_executable_path()); + executable_command = vformat("\"%s\" --rendering-driver opengl3", OS::get_singleton()->get_executable_path()); } else { - executable_command = vformat("open %s --args --rendering-driver opengl3", OS::get_singleton()->get_bundle_resource_dir().path_join("../..").simplify_path()); + executable_command = vformat("open \"%s\" --args --rendering-driver opengl3", OS::get_singleton()->get_bundle_resource_dir().path_join("../..").simplify_path()); } OS::get_singleton()->alert( vformat("Your video card drivers seem not to support the required Vulkan version.\n\n" "If possible, consider updating your macOS version or using the OpenGL 3 driver.\n\n" "You can enable the OpenGL 3 driver by starting the engine from the\n" - "command line with the command:\n'%s'", + "command line with the command:\n\n %s", executable_command), "Unable to initialize Vulkan video driver"); } else { diff --git a/platform/windows/display_server_windows.cpp b/platform/windows/display_server_windows.cpp index 360e446de7..66dc9a2a5a 100644 --- a/platform/windows/display_server_windows.cpp +++ b/platform/windows/display_server_windows.cpp @@ -4312,7 +4312,7 @@ DisplayServer *DisplayServerWindows::create_func(const String &p_rendering_drive vformat("Your video card drivers seem not to support the required Vulkan version.\n\n" "If possible, consider updating your video card drivers or using the OpenGL 3 driver.\n\n" "You can enable the OpenGL 3 driver by starting the engine from the\n" - "command line with the command:\n'%s --rendering-driver opengl3'\n\n" + "command line with the command:\n\n \"%s\" --rendering-driver opengl3\n\n" "If you have recently updated your video card drivers, try rebooting.", executable_name), "Unable to initialize Vulkan video driver"); From 26ab941507b11de491a11a24b5a1dd72a72082f5 Mon Sep 17 00:00:00 2001 From: Hayden Leete Date: Thu, 9 Mar 2023 16:54:17 +1300 Subject: [PATCH 19/30] Fix errors when closing floating docks dock->get_index() on line 4463 was not behaving as expected due to dock having an internal sibling, so now we just get the index excluding internal nodes. line 4742 would throw an error if you made multiple docks floating then redocked the end docks first, but no longer (cherry picked from commit 21578e0bb4f3dd99bb288a1d631b064fa76b884f) --- editor/editor_node.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index 0b438d8896..385806a3a7 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -4750,8 +4750,8 @@ void EditorNode::_dock_floating_close_request(Control *p_control) { p_control->get_parent()->remove_child(p_control); dock_slot[window_slot]->add_child(p_control); - dock_slot[window_slot]->move_child(p_control, MIN((int)window->get_meta("dock_index"), dock_slot[window_slot]->get_tab_count())); - dock_slot[window_slot]->set_current_tab(window->get_meta("dock_index")); + dock_slot[window_slot]->move_child(p_control, MIN((int)window->get_meta("dock_index"), dock_slot[window_slot]->get_tab_count() - 1)); + dock_slot[window_slot]->set_current_tab(dock_slot[window_slot]->get_tab_idx_from_control(p_control)); dock_slot[window_slot]->set_tab_title(dock_slot[window_slot]->get_tab_idx_from_control(p_control), TTRGET(p_control->get_name())); window->queue_free(); @@ -4772,7 +4772,7 @@ void EditorNode::_dock_make_float() { Size2 dock_size = dock->get_size() + borders * 2; Point2 dock_screen_pos = dock->get_global_position() + get_tree()->get_root()->get_position() - borders; - int dock_index = dock->get_index(); + int dock_index = dock->get_index(false); dock_slot[dock_popup_selected_idx]->remove_child(dock); Window *window = memnew(Window); From 9e5e6568b71c6222c0739a7c3c484c3715847490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Thu, 9 Mar 2023 10:46:35 +0100 Subject: [PATCH 20/30] Vulkan: Fix VMA build with GCC 13 Fixes #74647. (cherry picked from commit b113e6d4ff18dc1b1e6f4ec1bd0e307fd1d8623d) --- thirdparty/vulkan/patches/VMA-fix-gcc13.patch | 26 +++++++++++++++++++ thirdparty/vulkan/vk_mem_alloc.h | 4 +++ 2 files changed, 30 insertions(+) create mode 100644 thirdparty/vulkan/patches/VMA-fix-gcc13.patch diff --git a/thirdparty/vulkan/patches/VMA-fix-gcc13.patch b/thirdparty/vulkan/patches/VMA-fix-gcc13.patch new file mode 100644 index 0000000000..08928503a7 --- /dev/null +++ b/thirdparty/vulkan/patches/VMA-fix-gcc13.patch @@ -0,0 +1,26 @@ +From 29d492b60c84ca784ea0943efc7d2e6e0f3bdaac Mon Sep 17 00:00:00 2001 +From: Adam Sawicki +Date: Thu, 19 Jan 2023 13:19:55 +0100 +Subject: [PATCH] Added missing #include + +For snprintf, for compatibility with GCC 13. +Fixes #312 - thanks @marxin ! +--- + thirdparty/vulkan/vk_mem_alloc.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h +index b787c36..0fe459b 100644 +--- a/thirdparty/vulkan/vk_mem_alloc.h ++++ b/thirdparty/vulkan/vk_mem_alloc.h +@@ -2614,6 +2614,10 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeStatsString( + #include // For std::popcount + #endif + ++#if VMA_STATS_STRING_ENABLED ++ #include // For snprintf ++#endif ++ + /******************************************************************************* + CONFIGURATION SECTION + diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h index 184ee005d8..ea30060649 100644 --- a/thirdparty/vulkan/vk_mem_alloc.h +++ b/thirdparty/vulkan/vk_mem_alloc.h @@ -2582,6 +2582,10 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeStatsString( #include // For std::popcount #endif +#if VMA_STATS_STRING_ENABLED + #include // For snprintf +#endif + /******************************************************************************* CONFIGURATION SECTION From 38ad9c52b231ae9cb862197b5eed7eda797dadd8 Mon Sep 17 00:00:00 2001 From: Haoyu Qiu Date: Thu, 9 Mar 2023 14:37:41 +0800 Subject: [PATCH 21/30] Add missing TTRs in tiles editor and array inspector (cherry picked from commit bef7f14885ab6ee9cdf4116f67dfa12239746677) --- editor/editor_inspector.cpp | 10 +++++----- editor/plugins/tiles/tile_data_editors.cpp | 4 ++-- editor/plugins/tiles/tile_set_atlas_source_editor.cpp | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp index bc0a876c7c..563bf5ce7f 100644 --- a/editor/editor_inspector.cpp +++ b/editor/editor_inspector.cpp @@ -1687,11 +1687,11 @@ void EditorInspectorArray::_panel_gui_input(Ref p_event, int p_index void EditorInspectorArray::_move_element(int p_element_index, int p_to_pos) { String action_name; if (p_element_index < 0) { - action_name = vformat("Add element to property array with prefix %s.", array_element_prefix); + action_name = vformat(TTR("Add element to property array with prefix %s."), array_element_prefix); } else if (p_to_pos < 0) { - action_name = vformat("Remove element %d from property array with prefix %s.", p_element_index, array_element_prefix); + action_name = vformat(TTR("Remove element %d from property array with prefix %s."), p_element_index, array_element_prefix); } else { - action_name = vformat("Move element %d to position %d in property array with prefix %s.", p_element_index, p_to_pos, array_element_prefix); + action_name = vformat(TTR("Move element %d to position %d in property array with prefix %s."), p_element_index, p_to_pos, array_element_prefix); } EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); undo_redo->create_action(action_name); @@ -1838,7 +1838,7 @@ void EditorInspectorArray::_move_element(int p_element_index, int p_to_pos) { void EditorInspectorArray::_clear_array() { EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(vformat("Clear property array with prefix %s.", array_element_prefix)); + undo_redo->create_action(vformat(TTR("Clear property array with prefix %s."), array_element_prefix)); if (mode == MODE_USE_MOVE_ARRAY_ELEMENT_FUNCTION) { for (int i = count - 1; i >= 0; i--) { // Call the function. @@ -1891,7 +1891,7 @@ void EditorInspectorArray::_resize_array(int p_size) { } EditorUndoRedoManager *undo_redo = EditorUndoRedoManager::get_singleton(); - undo_redo->create_action(vformat("Resize property array with prefix %s.", array_element_prefix)); + undo_redo->create_action(vformat(TTR("Resize property array with prefix %s."), array_element_prefix)); if (p_size > count) { if (mode == MODE_USE_MOVE_ARRAY_ELEMENT_FUNCTION) { for (int i = count; i < p_size; i++) { diff --git a/editor/plugins/tiles/tile_data_editors.cpp b/editor/plugins/tiles/tile_data_editors.cpp index 73d2da63b7..8327fa5762 100644 --- a/editor/plugins/tiles/tile_data_editors.cpp +++ b/editor/plugins/tiles/tile_data_editors.cpp @@ -1233,7 +1233,7 @@ TileDataDefaultEditor::TileDataDefaultEditor() { picker_button = memnew(Button); picker_button->set_flat(true); picker_button->set_toggle_mode(true); - picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", Key::P)); + picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", TTR("Picker"), Key::P)); toolbar->add_child(picker_button); } @@ -2720,7 +2720,7 @@ TileDataTerrainsEditor::TileDataTerrainsEditor() { picker_button = memnew(Button); picker_button->set_flat(true); picker_button->set_toggle_mode(true); - picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", "Picker", Key::P)); + picker_button->set_shortcut(ED_SHORTCUT("tiles_editor/picker", TTR("Picker"), Key::P)); toolbar->add_child(picker_button); // Setup diff --git a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp index 235e34d9b5..42c296e825 100644 --- a/editor/plugins/tiles/tile_set_atlas_source_editor.cpp +++ b/editor/plugins/tiles/tile_set_atlas_source_editor.cpp @@ -2561,7 +2561,7 @@ TileSetAtlasSourceEditor::TileSetAtlasSourceEditor() { tools_settings_erase_button = memnew(Button); tools_settings_erase_button->set_flat(true); tools_settings_erase_button->set_toggle_mode(true); - tools_settings_erase_button->set_shortcut(ED_SHORTCUT("tiles_editor/eraser", "Eraser", Key::E)); + tools_settings_erase_button->set_shortcut(ED_SHORTCUT("tiles_editor/eraser", TTR("Eraser"), Key::E)); tools_settings_erase_button->set_shortcut_context(this); tool_settings->add_child(tools_settings_erase_button); From 7ac80569b31ea428e1d5017895ceceaf9d22557c Mon Sep 17 00:00:00 2001 From: Mikael Hermansson Date: Thu, 9 Mar 2023 17:31:56 +0100 Subject: [PATCH 22/30] Fix extension bindings for motion collision/result structs (cherry picked from commit be64ffd25d0be68dce2b568c79347bab8101ac23) --- servers/register_server_types.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/servers/register_server_types.cpp b/servers/register_server_types.cpp index 8cc2cc0756..7cc9a82699 100644 --- a/servers/register_server_types.cpp +++ b/servers/register_server_types.cpp @@ -158,8 +158,8 @@ void register_server_types() { GDREGISTER_NATIVE_STRUCT(PhysicsServer3DExtensionRayResult, "Vector3 position;Vector3 normal;RID rid;ObjectID collider_id;Object *collider;int shape"); GDREGISTER_NATIVE_STRUCT(PhysicsServer3DExtensionShapeResult, "RID rid;ObjectID collider_id;Object *collider;int shape"); GDREGISTER_NATIVE_STRUCT(PhysicsServer3DExtensionShapeRestInfo, "Vector3 point;Vector3 normal;RID rid;ObjectID collider_id;int shape;Vector3 linear_velocity"); - GDREGISTER_NATIVE_STRUCT(PhysicsServer3DExtensionMotionCollision, "Vector3 position;Vector3 normal;Vector3 collider_velocity;real_t depth;int local_shape;ObjectID collider_id;RID collider;int collider_shape"); - GDREGISTER_NATIVE_STRUCT(PhysicsServer3DExtensionMotionResult, "Vector3 travel;Vector3 remainder;real_t collision_safe_fraction;real_t collision_unsafe_fraction;PhysicsServer3DExtensionMotionCollision collisions[32];int collision_count"); + GDREGISTER_NATIVE_STRUCT(PhysicsServer3DExtensionMotionCollision, "Vector3 position;Vector3 normal;Vector3 collider_velocity;Vector3 collider_angular_velocity;real_t depth;int local_shape;ObjectID collider_id;RID collider;int collider_shape"); + GDREGISTER_NATIVE_STRUCT(PhysicsServer3DExtensionMotionResult, "Vector3 travel;Vector3 remainder;real_t collision_depth;real_t collision_safe_fraction;real_t collision_unsafe_fraction;PhysicsServer3DExtensionMotionCollision collisions[32];int collision_count"); GDREGISTER_ABSTRACT_CLASS(NavigationServer2D); GDREGISTER_ABSTRACT_CLASS(NavigationServer3D); From 5824967f2f5d2835f7216dcb5d2d4139f4b8608b Mon Sep 17 00:00:00 2001 From: yedpodtrzitko Date: Fri, 10 Mar 2023 18:10:05 +0800 Subject: [PATCH 23/30] clear filter input in Project Settings when opening Layers (cherry picked from commit e13bcf5b845fba1dbb2bbb02c8f14e7d3733a188) --- editor/editor_properties.cpp | 2 +- editor/plugins/asset_library_editor_plugin.cpp | 2 +- editor/project_settings_editor.cpp | 6 +++++- editor/project_settings_editor.h | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 801f1ca5b6..b8e491b243 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -1210,7 +1210,7 @@ void EditorPropertyLayers::_button_pressed() { void EditorPropertyLayers::_menu_pressed(int p_menu) { if (p_menu == grid->layer_count) { - ProjectSettingsEditor::get_singleton()->popup_project_settings(); + ProjectSettingsEditor::get_singleton()->popup_project_settings(true); ProjectSettingsEditor::get_singleton()->set_general_page(basename); } else { if (grid->value & (1 << p_menu)) { diff --git a/editor/plugins/asset_library_editor_plugin.cpp b/editor/plugins/asset_library_editor_plugin.cpp index 2639765283..151d46b673 100644 --- a/editor/plugins/asset_library_editor_plugin.cpp +++ b/editor/plugins/asset_library_editor_plugin.cpp @@ -1398,7 +1398,7 @@ void EditorAssetLibrary::_asset_open() { } void EditorAssetLibrary::_manage_plugins() { - ProjectSettingsEditor::get_singleton()->popup_project_settings(); + ProjectSettingsEditor::get_singleton()->popup_project_settings(true); ProjectSettingsEditor::get_singleton()->set_plugins_page(); } diff --git a/editor/project_settings_editor.cpp b/editor/project_settings_editor.cpp index 374ce98d63..c8fbd76f69 100644 --- a/editor/project_settings_editor.cpp +++ b/editor/project_settings_editor.cpp @@ -45,7 +45,7 @@ void ProjectSettingsEditor::connect_filesystem_dock_signals(FileSystemDock *p_fs localization_editor->connect_filesystem_dock_signals(p_fs_dock); } -void ProjectSettingsEditor::popup_project_settings() { +void ProjectSettingsEditor::popup_project_settings(bool p_clear_filter) { // Restore valid window bounds or pop up at default size. Rect2 saved_size = EditorSettings::get_singleton()->get_project_metadata("dialog_bounds", "project_settings", Rect2()); if (saved_size != Rect2()) { @@ -62,6 +62,10 @@ void ProjectSettingsEditor::popup_project_settings() { autoload_settings->update_autoload(); plugin_settings->update_plugins(); import_defaults_editor->clear(); + + if (p_clear_filter) { + search_box->clear(); + } } void ProjectSettingsEditor::queue_save() { diff --git a/editor/project_settings_editor.h b/editor/project_settings_editor.h index 31f644da74..eaac7e8c5a 100644 --- a/editor/project_settings_editor.h +++ b/editor/project_settings_editor.h @@ -116,7 +116,7 @@ protected: public: static ProjectSettingsEditor *get_singleton() { return singleton; } - void popup_project_settings(); + void popup_project_settings(bool p_clear_filter = false); void set_plugins_page(); void set_general_page(const String &p_category); void update_plugins(); From 23f2c1234c906dbef35697ffca1324b5b8303560 Mon Sep 17 00:00:00 2001 From: Dmitrii Maganov Date: Thu, 9 Mar 2023 23:53:16 +0200 Subject: [PATCH 24/30] GDScript: Fix autocomplete inside a block with a type test condition (cherry picked from commit e289a4ab2c404991d684b6c77b65d24f41be5b63) --- modules/gdscript/gdscript_editor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index 63dfd4d27c..536cb344f4 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -1956,7 +1956,7 @@ static bool _guess_identifier_type(GDScriptParser::CompletionContext &p_context, GDScriptParser::CompletionContext c = p_context; c.current_line = type_test->operand->start_line; c.current_suite = suite; - if ((!id_type.is_set() || id_type.is_variant()) && type_test->test_datatype.is_hard_type()) { + if (type_test->test_datatype.is_hard_type()) { id_type = type_test->test_datatype; if (last_assign_line < c.current_line) { // Override last assignment. From 59a78ecf5af2f3677d6895eab9054825020f85f7 Mon Sep 17 00:00:00 2001 From: justchen1369 Date: Fri, 10 Mar 2023 11:42:09 -0500 Subject: [PATCH 25/30] Fix exported type for Menubar start_index (cherry picked from commit dbfecdb3b04956db58ee199fdbd9f7c03794e269) --- scene/gui/menu_bar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scene/gui/menu_bar.cpp b/scene/gui/menu_bar.cpp index 5b27983851..0c12b98ad7 100644 --- a/scene/gui/menu_bar.cpp +++ b/scene/gui/menu_bar.cpp @@ -666,7 +666,7 @@ void MenuBar::_bind_methods() { ClassDB::bind_method(D_METHOD("get_menu_popup", "menu"), &MenuBar::get_menu_popup); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "flat"), "set_flat", "is_flat"); - ADD_PROPERTY(PropertyInfo(Variant::BOOL, "start_index"), "set_start_index", "get_start_index"); + ADD_PROPERTY(PropertyInfo(Variant::INT, "start_index"), "set_start_index", "get_start_index"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "switch_on_hover"), "set_switch_on_hover", "is_switch_on_hover"); ADD_PROPERTY(PropertyInfo(Variant::BOOL, "prefer_global_menu"), "set_prefer_global_menu", "is_prefer_global_menu"); From 5f6a53456987fbffd9b6d12714485c337b0c17ac Mon Sep 17 00:00:00 2001 From: clayjohn Date: Fri, 10 Mar 2023 10:48:45 -0800 Subject: [PATCH 26/30] Use linear filtering without mipmaps for ProceduralSkyMaterial and PhysicalSkyMaterial (cherry picked from commit 572ac915145e7ccb6d32ab5c356076820e964433) --- scene/resources/sky_material.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scene/resources/sky_material.cpp b/scene/resources/sky_material.cpp index 9528b23e32..065132516b 100644 --- a/scene/resources/sky_material.cpp +++ b/scene/resources/sky_material.cpp @@ -269,7 +269,7 @@ uniform vec4 sky_top_color : source_color = vec4(0.385, 0.454, 0.55, 1.0); uniform vec4 sky_horizon_color : source_color = vec4(0.646, 0.656, 0.67, 1.0); uniform float sky_curve : hint_range(0, 1) = 0.15; uniform float sky_energy = 1.0; // In Lux. -uniform sampler2D sky_cover : source_color, hint_default_black; +uniform sampler2D sky_cover : filter_linear, source_color, hint_default_black; uniform vec4 sky_cover_modulate : source_color = vec4(1.0, 1.0, 1.0, 1.0); uniform vec4 ground_bottom_color : source_color = vec4(0.2, 0.169, 0.133, 1.0); uniform vec4 ground_horizon_color : source_color = vec4(0.646, 0.656, 0.67, 1.0); @@ -676,7 +676,7 @@ uniform float sun_disk_scale : hint_range(0, 360) = 1.0; uniform vec4 ground_color : source_color = vec4(0.1, 0.07, 0.034, 1.0); uniform float exposure : hint_range(0, 128) = 1.0; -uniform sampler2D night_sky : source_color, hint_default_black; +uniform sampler2D night_sky : filter_linear, source_color, hint_default_black; const vec3 UP = vec3( 0.0, 1.0, 0.0 ); From c59c68cdec847bdcb8b0bd140324228edd7d74f6 Mon Sep 17 00:00:00 2001 From: Yuri Sizov Date: Fri, 10 Mar 2023 18:16:00 +0100 Subject: [PATCH 27/30] Make sure Script Debugger is updated with the editor theme (cherry picked from commit 239eb31c900682f1d4fea56546096b5282d2a352) --- editor/debugger/script_editor_debugger.cpp | 48 +++++++++++++--------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp index 304beec681..9f69b5dc2a 100644 --- a/editor/debugger/script_editor_debugger.cpp +++ b/editor/debugger/script_editor_debugger.cpp @@ -509,6 +509,11 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da String tooltip = oe.warning ? TTR("Warning:") : TTR("Error:"); TreeItem *error = error_tree->create_item(r); + if (oe.warning) { + error->set_meta("_is_warning", true); + } else { + error->set_meta("_is_error", true); + } error->set_collapsed(true); error->set_icon(0, get_theme_icon(oe.warning ? SNAME("Warning") : SNAME("Error"), SNAME("EditorIcons"))); @@ -798,6 +803,8 @@ void ScriptEditorDebugger::_notification(int p_what) { [[fallthrough]]; } case NOTIFICATION_THEME_CHANGED: { + tabs->add_theme_style_override("panel", get_theme_stylebox(SNAME("DebuggerPanel"), SNAME("EditorStyles"))); + skip_breakpoints->set_icon(get_theme_icon(skip_breakpoints_value ? SNAME("DebugSkipBreakpointsOn") : SNAME("DebugSkipBreakpointsOff"), SNAME("EditorIcons"))); copy->set_icon(get_theme_icon(SNAME("ActionCopy"), SNAME("EditorIcons"))); step->set_icon(get_theme_icon(SNAME("DebugStep"), SNAME("EditorIcons"))); @@ -809,6 +816,24 @@ void ScriptEditorDebugger::_notification(int p_what) { search->set_right_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons"))); reason->add_theme_color_override("font_color", get_theme_color(SNAME("error_color"), SNAME("Editor"))); + + TreeItem *error_root = error_tree->get_root(); + if (error_root) { + TreeItem *error = error_root->get_first_child(); + while (error) { + if (error->has_meta("_is_warning")) { + error->set_icon(0, get_theme_icon(SNAME("Warning"), SNAME("EditorIcons"))); + error->set_custom_color(0, get_theme_color(SNAME("warning_color"), SNAME("Editor"))); + error->set_custom_color(1, get_theme_color(SNAME("warning_color"), SNAME("Editor"))); + } else if (error->has_meta("_is_error")) { + error->set_icon(0, get_theme_icon(SNAME("Error"), SNAME("EditorIcons"))); + error->set_custom_color(0, get_theme_color(SNAME("error_color"), SNAME("Editor"))); + error->set_custom_color(1, get_theme_color(SNAME("error_color"), SNAME("Editor"))); + } + + error = error->get_next(); + } + } } break; case NOTIFICATION_PROCESS: { @@ -871,21 +896,6 @@ void ScriptEditorDebugger::_notification(int p_what) { break; }; } break; - - case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: { - if (tabs->has_theme_stylebox_override("panel")) { - tabs->add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox(SNAME("DebuggerPanel"), SNAME("EditorStyles"))); - } - - copy->set_icon(get_theme_icon(SNAME("ActionCopy"), SNAME("EditorIcons"))); - step->set_icon(get_theme_icon(SNAME("DebugStep"), SNAME("EditorIcons"))); - next->set_icon(get_theme_icon(SNAME("DebugNext"), SNAME("EditorIcons"))); - dobreak->set_icon(get_theme_icon(SNAME("Pause"), SNAME("EditorIcons"))); - docontinue->set_icon(get_theme_icon(SNAME("DebugContinue"), SNAME("EditorIcons"))); - vmem_refresh->set_icon(get_theme_icon(SNAME("Reload"), SNAME("EditorIcons"))); - vmem_export->set_icon(get_theme_icon(SNAME("Save"), SNAME("EditorIcons"))); - search->set_right_icon(get_theme_icon(SNAME("Search"), SNAME("EditorIcons"))); - } break; } } @@ -1557,9 +1567,9 @@ void ScriptEditorDebugger::_item_menu_id_pressed(int p_option) { String type; - if (ti->get_icon(0) == get_theme_icon(SNAME("Warning"), SNAME("EditorIcons"))) { + if (ti->has_meta("_is_warning")) { type = "W "; - } else if (ti->get_icon(0) == get_theme_icon(SNAME("Error"), SNAME("EditorIcons"))) { + } else if (ti->has_meta("_is_error")) { type = "E "; } @@ -1700,10 +1710,8 @@ void ScriptEditorDebugger::toggle_profiler(const String &p_profiler, bool p_enab ScriptEditorDebugger::ScriptEditorDebugger() { tabs = memnew(TabContainer); - tabs->add_theme_style_override("panel", EditorNode::get_singleton()->get_gui_base()->get_theme_stylebox(SNAME("DebuggerPanel"), SNAME("EditorStyles"))); - tabs->connect("tab_changed", callable_mp(this, &ScriptEditorDebugger::_tab_changed)); - add_child(tabs); + tabs->connect("tab_changed", callable_mp(this, &ScriptEditorDebugger::_tab_changed)); InspectorDock::get_inspector_singleton()->connect("object_id_selected", callable_mp(this, &ScriptEditorDebugger::_remote_object_selected)); From 31760165285be23a334885186d75c8b3ce017819 Mon Sep 17 00:00:00 2001 From: Marius Hanl Date: Mon, 6 Mar 2023 22:18:43 +0100 Subject: [PATCH 28/30] Convert OpenSimplexNoise to FastNoiseLite - class name and octaves property (cherry picked from commit 862296273b3f446f4bbcfc5ea682a866ffe1ebcf) --- editor/renames_map_3_to_4.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/editor/renames_map_3_to_4.cpp b/editor/renames_map_3_to_4.cpp index b956930c0e..9e2ba1e1dc 100644 --- a/editor/renames_map_3_to_4.cpp +++ b/editor/renames_map_3_to_4.cpp @@ -1096,6 +1096,7 @@ const char *RenamesMap3To4::gdscript_properties_renames[][2] = { { "margin_top", "offset_top" }, // Control -- Breaks NinePatchRect, StyleBox. { "mid_height", "height" }, // CapsuleMesh { "neighbor_dist", "neighbor_distance" }, // NavigationAgent2D, NavigationAgent3D + { "octaves", "fractal_octaves" }, // OpenSimplexNoise -> FastNoiseLite { "offset_h", "drag_horizontal_offset" }, // Camera2D { "offset_v", "drag_vertical_offset" }, // Camera2D { "off_disabled", "unchecked_disabled" }, // Theme @@ -1189,6 +1190,7 @@ const char *RenamesMap3To4::csharp_properties_renames[][2] = { { "MarginTop", "OffsetTop" }, // Control -- Breaks NinePatchRect, StyleBox. { "MidHeight", "Height" }, // CapsuleMesh { "NeighborDist", "NeighborDistance" }, // NavigationAgent2D, NavigationAgent3D + { "Octaves", "FractalOctaves" }, // OpenSimplexNoise -> FastNoiseLite { "OffsetH", "DragHorizontalOffset" }, // Camera2D { "OffsetV", "DragVerticalOffset" }, // Camera2D { "OffDisabled", "UncheckedDisabled" }, // Theme @@ -1525,6 +1527,7 @@ const char *RenamesMap3To4::class_renames[][2] = { { "NetworkedMultiplayerPeer", "MultiplayerPeer" }, { "Occluder", "OccluderInstance3D" }, { "OmniLight", "OmniLight3D" }, + { "OpenSimplexNoise", "FastNoiseLite" }, { "PHashTranslation", "OptimizedTranslation" }, { "PacketPeerGDNative", "PacketPeerExtension" }, { "PanoramaSky", "Sky" }, From 0cf5de8f194b48f771c3ff3d44cb26fc83f220bb Mon Sep 17 00:00:00 2001 From: pcamp Date: Sun, 12 Mar 2023 19:53:12 -0500 Subject: [PATCH 29/30] Fix typo in Window class. "event as" -> "events will be" (cherry picked from commit 112977be262256b5cd3ac6713557dba74d905f44) --- doc/classes/Window.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/classes/Window.xml b/doc/classes/Window.xml index b8f731809a..a8237efd16 100644 --- a/doc/classes/Window.xml +++ b/doc/classes/Window.xml @@ -530,7 +530,7 @@ [b]Note:[/b] Fullscreen mode is not exclusive full screen on Windows and Linux. - If [code]true[/code], all mouse event as passed to the underlying window of the same application. See also [member mouse_passthrough_polygon]. + If [code]true[/code], all mouse events will be passed to the underlying window of the same application. See also [member mouse_passthrough_polygon]. [b]Note:[/b] This property is implemented on Linux (X11), macOS and Windows. From 38c0ad7c6c6b70f1ecac0a7962a60c3105b3d8e8 Mon Sep 17 00:00:00 2001 From: the-sink Date: Mon, 27 Feb 2023 09:03:56 -0800 Subject: [PATCH 30/30] Redraw 2d viewport when guides are cleared (cherry picked from commit 0c051f41b16af834ad8b1fb46682aeef16fc88d6) --- editor/plugins/canvas_item_editor_plugin.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 75a444c877..fd44e9221e 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -4556,6 +4556,7 @@ void CanvasItemEditor::_popup_callback(int p_op) { undo_redo->add_do_method(root, "remove_meta", "_edit_vertical_guides_"); undo_redo->add_undo_method(root, "set_meta", "_edit_vertical_guides_", vguides); } + undo_redo->add_do_method(viewport, "queue_redraw"); undo_redo->add_undo_method(viewport, "queue_redraw"); undo_redo->commit_action(); }