Browse Source

Merge pull request #11337 from mhilbrunner/cherrypick-sync

Update 4.5 with cherrypicks
Max Hilbrunner 2 months ago
parent
commit
0a87897f30

+ 94 - 18
_tools/redirects/redirects.csv

@@ -8,9 +8,6 @@ source,destination
 /community/tutorials/vr/index.html,/tutorials/vr/index.html
 /community/tutorials/vr/index.html,/tutorials/vr/index.html
 /community/tutorials/vr/vr_primer.html,/tutorials/vr/vr_primer.html
 /community/tutorials/vr/vr_primer.html,/tutorials/vr/vr_primer.html
 /content/3d/making_trees.html,/tutorials/content/making_trees.html
 /content/3d/making_trees.html,/tutorials/content/making_trees.html
-/contributing/_contributing.html,/community/contributing/
-/contributing/development/compiling/compiling_with_mono.html,/engine_details/development/compiling/compiling_with_dotnet.html
-/contributing/development/core_and_modules/introduction_to_godot_development.html,/engine_details/development/core_and_modules/index.html
 /development/compiling/compiling_for_android.html,/engine_details/development/compiling/compiling_for_android.html
 /development/compiling/compiling_for_android.html,/engine_details/development/compiling/compiling_for_android.html
 /development/compiling/compiling_for_ios.html,/engine_details/development/compiling/compiling_for_ios.html
 /development/compiling/compiling_for_ios.html,/engine_details/development/compiling/compiling_for_ios.html
 /development/compiling/compiling_for_linuxbsd.html,/engine_details/development/compiling/compiling_for_linuxbsd.html
 /development/compiling/compiling_for_linuxbsd.html,/engine_details/development/compiling/compiling_for_linuxbsd.html
@@ -27,8 +24,8 @@ source,destination
 /development/compiling/introduction_to_the_buildsystem.html,/engine_details/development/compiling/introduction_to_the_buildsystem.html
 /development/compiling/introduction_to_the_buildsystem.html,/engine_details/development/compiling/introduction_to_the_buildsystem.html
 /development/compiling/optimizing_for_size.html,/engine_details/development/compiling/optimizing_for_size.html
 /development/compiling/optimizing_for_size.html,/engine_details/development/compiling/optimizing_for_size.html
 /development/consoles/consoles.html,/tutorials/platform/consoles.html
 /development/consoles/consoles.html,/tutorials/platform/consoles.html
-/development/cpp/binding_to_external_libraries.html,/engine_details/development/core_and_modules/binding_to_external_libraries.html
-/development/cpp/common_engine_methods_and_macros.html,/engine_details/development/core_and_modules/common_engine_methods_and_macros.html
+/development/cpp/binding_to_external_libraries.html,/engine_details/architecture/binding_to_external_libraries.html
+/development/cpp/common_engine_methods_and_macros.html,/engine_details/architecture/common_engine_methods_and_macros.html
 /development/cpp/configuring_an_ide/android_studio.html,/engine_details/development/configuring_an_ide/android_studio.html
 /development/cpp/configuring_an_ide/android_studio.html,/engine_details/development/configuring_an_ide/android_studio.html
 /development/cpp/configuring_an_ide/clion.html,/engine_details/development/configuring_an_ide/clion.html
 /development/cpp/configuring_an_ide/clion.html,/engine_details/development/configuring_an_ide/clion.html
 /development/cpp/configuring_an_ide/code_blocks.html,/engine_details/development/configuring_an_ide/code_blocks.html
 /development/cpp/configuring_an_ide/code_blocks.html,/engine_details/development/configuring_an_ide/code_blocks.html
@@ -38,19 +35,19 @@ source,destination
 /development/cpp/configuring_an_ide/visual_studio.html,/engine_details/development/configuring_an_ide/visual_studio.html
 /development/cpp/configuring_an_ide/visual_studio.html,/engine_details/development/configuring_an_ide/visual_studio.html
 /development/cpp/configuring_an_ide/visual_studio_code.html,/engine_details/development/configuring_an_ide/visual_studio_code.html
 /development/cpp/configuring_an_ide/visual_studio_code.html,/engine_details/development/configuring_an_ide/visual_studio_code.html
 /development/cpp/configuring_an_ide/xcode.html,/engine_details/development/configuring_an_ide/xcode.html
 /development/cpp/configuring_an_ide/xcode.html,/engine_details/development/configuring_an_ide/xcode.html
-/development/cpp/core_types.html,/engine_details/development/core_and_modules/core_types.html
-/development/cpp/custom_audiostreams.html,/engine_details/development/core_and_modules/custom_audiostreams.html
-/development/cpp/custom_godot_servers.html,/engine_details/development/core_and_modules/custom_godot_servers.html
-/development/cpp/custom_modules_in_cpp.html,/engine_details/development/core_and_modules/custom_modules_in_cpp.html
-/development/cpp/custom_resource_format_loaders.html,/engine_details/development/core_and_modules/custom_resource_format_loaders.html
-/development/cpp/index.html,/engine_details/development/core_and_modules/index.html
-/development/cpp/inheritance_class_tree.html,/engine_details/development/core_and_modules/inheritance_class_tree.html
-/development/cpp/introduction_to_godot_development.html,/engine_details/development/core_and_modules/introduction_to_godot_development.html
+/development/cpp/core_types.html,/engine_details/architecture/core_types.html
+/development/cpp/custom_audiostreams.html,/engine_details/architecture/custom_audiostreams.html
+/development/cpp/custom_godot_servers.html,/engine_details/architecture/custom_godot_servers.html
+/development/cpp/custom_modules_in_cpp.html,/engine_details/architecture/custom_modules_in_cpp.html
+/development/cpp/custom_resource_format_loaders.html,/engine_details/architecture/custom_resource_format_loaders.html
+/development/cpp/index.html,/engine_details/architecture/index.html
+/development/cpp/inheritance_class_tree.html,/engine_details/architecture/inheritance_class_tree.html
+/development/cpp/introduction_to_godot_development.html,https://contributing.godotengine.org/en/latest/engine/introduction.html
 /development/cpp/macos_debug.html,/engine_details/development/debugging/macos_debug.html
 /development/cpp/macos_debug.html,/engine_details/development/debugging/macos_debug.html
-/development/cpp/object_class.html,/engine_details/development/core_and_modules/object_class.html
-/development/cpp/unit_testing.html,/engine_details/development/core_and_modules/unit_testing.html
+/development/cpp/object_class.html,/engine_details/architecture/object_class.html
+/development/cpp/unit_testing.html,/engine_details/architecture/unit_testing.html
 /development/cpp/using_cpp_profilers.html,/engine_details/development/debugging/using_cpp_profilers.html
 /development/cpp/using_cpp_profilers.html,/engine_details/development/debugging/using_cpp_profilers.html
-/development/cpp/variant_class.html,/engine_details/development/core_and_modules/variant_class.html
+/development/cpp/variant_class.html,/engine_details/architecture/variant_class.html
 /development/cpp/vulkan/index.html,/engine_details/development/debugging/vulkan/index.html
 /development/cpp/vulkan/index.html,/engine_details/development/debugging/vulkan/index.html
 /development/cpp/vulkan/vulkan_validation_layers.html,/engine_details/development/debugging/vulkan/vulkan_validation_layers.html
 /development/cpp/vulkan/vulkan_validation_layers.html,/engine_details/development/debugging/vulkan/vulkan_validation_layers.html
 /development/editor/creating_icons.html,/engine_details/editor/creating_icons.html
 /development/editor/creating_icons.html,/engine_details/editor/creating_icons.html
@@ -297,7 +294,7 @@ source,destination
 /reference/gdscript_more_efficiently.html,/learning/scripting/gdscript/gdscript_advanced.html
 /reference/gdscript_more_efficiently.html,/learning/scripting/gdscript/gdscript_advanced.html
 /reference/gdscript_printf.html,/learning/scripting/gdscript/gdscript_format_string.html
 /reference/gdscript_printf.html,/learning/scripting/gdscript/gdscript_format_string.html
 /reference/inheritance_class_tree.html,/development/cpp/inheritance_class_tree.html
 /reference/inheritance_class_tree.html,/development/cpp/inheritance_class_tree.html
-/reference/introduction_to_godot_development.html,/development/cpp/introduction_to_godot_development.html
+/reference/introduction_to_godot_development.html,https://contributing.godotengine.org/en/latest/engine/introduction.html
 /reference/introduction_to_the_buildsystem.html,/development/compiling/introduction_to_the_buildsystem.html
 /reference/introduction_to_the_buildsystem.html,/development/compiling/introduction_to_the_buildsystem.html
 /reference/locales.html,/learning/features/misc/locales.html
 /reference/locales.html,/learning/features/misc/locales.html
 /reference/object_class.html,/development/cpp/object_class.html
 /reference/object_class.html,/development/cpp/object_class.html
@@ -403,6 +400,85 @@ source,destination
 /tutorials/viewports/multiple_resolutions.html,/tutorials/rendering/multiple_resolutions.html
 /tutorials/viewports/multiple_resolutions.html,/tutorials/rendering/multiple_resolutions.html
 /tutorials/viewports/using_viewport_as_texture.html,/tutorials/shaders/using_viewport_as_texture.html
 /tutorials/viewports/using_viewport_as_texture.html,/tutorials/shaders/using_viewport_as_texture.html
 /tutorials/viewports/viewports.html,/tutorials/rendering/viewports.html
 /tutorials/viewports/viewports.html,/tutorials/rendering/viewports.html
-/contributing/development/compiling/compiling_for_uwp.html,/about/faq.html#which-platforms-are-supported-by-godot
 /tutorials/export/exporting_for_uwp.html,/about/faq.html#which-platforms-are-supported-by-godot
 /tutorials/export/exporting_for_uwp.html,/about/faq.html#which-platforms-are-supported-by-godot
 /tutorials/xr/openxr_passthrough.html,/tutorials/xr/ar_passthrough.html
 /tutorials/xr/openxr_passthrough.html,/tutorials/xr/ar_passthrough.html
+/contributing/development/compiling/compiling_for_uwp.html,/about/faq.html#which-platforms-are-supported-by-godot
+/contributing/_contributing.html,https://contributing.godotengine.org
+/contributing/development/compiling/compiling_with_mono.html,/engine_details/development/compiling/compiling_with_dotnet.html
+/contributing/architecture/introduction_to_godot_development.html,/engine_details/architecture/index.html
+/contributing/development/best_practices_for_engine_contributors.html,https://contributing.godotengine.org/en/latest/engine/guidelines/best_practices.html
+/contributing/development/code_style_guidelines.html,https://contributing.godotengine.org/en/latest/engine/guidelines/code_style.html
+/contributing/development/cpp_usage_guidelines.html,https://contributing.godotengine.org/en/latest/engine/guidelines/cpp_usage_guidelines.html
+/contributing/development/editor/editor_style_guide.html,https://contributing.godotengine.org/en/latest/engine/guidelines/editor_style_guide.html
+/contributing/development/editor/index.html,/engine_details/editor/index.html
+/contributing/development/index.html,/engine_details/development/index.html
+/contributing/documentation/building_the_manual.html,https://contributing.godotengine.org/en/latest/documentation/manual/building_the_manual.html
+/contributing/documentation/content_guidelines.html,https://contributing.godotengine.org/en/latest/documentation/guidelines/content_guidelines.html
+/contributing/documentation/contributing_to_the_documentation.html,https://contributing.godotengine.org/en/latest/documentation/manual/index.html
+/contributing/documentation/docs_contribution_checklist.html,https://contributing.godotengine.org/en/latest/documentation/guidelines/docs_contribution_checklist.html
+/contributing/documentation/docs_image_guidelines.html,https://contributing.godotengine.org/en/latest/documentation/guidelines/docs_image_guidelines.html
+/contributing/documentation/docs_writing_guidelines.html,https://contributing.godotengine.org/en/latest/documentation/guidelines/docs_writing_guidelines.html
+/contributing/documentation/editor_and_docs_localization.html,https://contributing.godotengine.org/en/latest/documentation/translation/index.html
+/contributing/documentation/index.html,https://contributing.godotengine.org/en/latest/documentation/overview.html
+/contributing/documentation/updating_the_class_reference.html,https://contributing.godotengine.org/en/latest/documentation/class_reference.html
+/contributing/how_to_contribute.html,https://contributing.godotengine.org/en/latest/organization/how_to_contribute.html
+/contributing/workflow/bisecting_regressions.html,https://contributing.godotengine.org/en/latest/reporting_issues/bisecting.html
+/contributing/workflow/bug_triage_guidelines.html,https://contributing.godotengine.org/en/latest/triage/guidelines.html
+/contributing/workflow/first_steps.html,https://contributing.godotengine.org/en/latest/engine/introduction.html
+/contributing/workflow/index.html,https://contributing.godotengine.org/en/latest/engine/introduction.html
+/contributing/workflow/pr_review_guidelines.html,https://contributing.godotengine.org/en/latest/organization/pull_requests/review_guidelines.html
+/contributing/workflow/pr_workflow.html,https://contributing.godotengine.org/en/latest/organization/pull_requests/creating_pull_requests.html
+/contributing/workflow/testing_pull_requests.html,https://contributing.godotengine.org/en/latest/organization/pull_requests/testing.html
+/contributing/development/core_and_modules/2d_coordinate_systems.html,/engine_details/architecture/2d_coordinate_systems.html
+/contributing/development/core_and_modules/common_engine_methods_and_macros.html,/engine_details/architecture/common_engine_methods_and_macros.html
+/contributing/development/core_and_modules/core_types.html,//architecture/core_types.html
+/contributing/development/core_and_modules/custom_audiostreams.html,//architecture/custom_audiostreams.html
+/contributing/development/core_and_modules/custom_godot_servers.html,//architecture/custom_godot_servers.html
+/contributing/development/core_and_modules/custom_modules_in_cpp.html,//architecture/custom_modules_in_cpp.html
+/contributing/development/core_and_modules/custom_platform_ports.html,//architecture/custom_platform_ports.html
+/contributing/development/core_and_modules/custom_resource_format_loaders.html,//architecture/custom_resource_format_loaders.html
+/contributing/development/core_and_modules/godot_architecture_diagram.html,//architecture/godot_architecture_diagram.html
+/contributing/development/core_and_modules/index.html,//architecture/index.html
+/contributing/development/core_and_modules/inheritance_class_tree.html,//architecture/inheritance_class_tree.html
+/contributing/development/core_and_modules/internal_rendering_architecture.html,//architecture/internal_rendering_architecture.html
+/contributing/development/core_and_modules/object_class.html,//architecture/object_class.html
+/contributing/development/core_and_modules/scripting_development.html,//architecture/scripting_development.html
+/contributing/development/core_and_modules/unit_testing.html,//architecture/unit_testing.html
+/contributing/development/core_and_modules/variant_class.html,//architecture/variant_class.html
+/contributing/documentation/class_reference_primer.html,engine_details/class_reference/index.html
+/contributing/development/compiling/compiling_for_android.html,/engine_details/development/compiling/compiling_for_android.html,
+/contributing/development/compiling/compiling_for_ios.html,/engine_details/development/compiling/compiling_for_ios.html
+/contributing/development/compiling/compiling_for_linuxbsd.html,/engine_details/development/compiling/compiling_for_linuxbsd.html
+/contributing/development/compiling/compiling_for_macos.html,/engine_details/development/compiling/compiling_for_macos.html
+/contributing/development/compiling/compiling_for_visionos.html,/engine_details/development/compiling/compiling_for_visionos.html
+/contributing/development/compiling/compiling_for_web.html,/engine_details/development/compiling/compiling_for_web.html
+/contributing/development/compiling/compiling_for_windows.html,/engine_details/development/compiling/compiling_for_windows.html
+/contributing/development/compiling/compiling_with_dotnet.html,/engine_details/development/compiling/compiling_with_dotnet.html
+/contributing/development/compiling/compiling_with_script_encryption_key.html,/engine_details/development/compiling/compiling_with_script_encryption_key.html
+/contributing/development/compiling/cross-compiling_for_ios_on_linux.html,/engine_details/development/compiling/cross-compiling_for_ios_on_linux.html
+/contributing/development/compiling/getting_source.html,/engine_details/development/compiling/getting_source.html
+/contributing/development/compiling/index.html,/engine_details/development/compiling/index.html
+/contributing/development/compiling/introduction_to_the_buildsystem.html,/engine_details/development/compiling/introduction_to_the_buildsystem.html
+/contributing/development/compiling/optimizing_for_size.html,/engine_details/development/compiling/optimizing_for_size.html
+/contributing/development/configuring_an_ide/android_studio.html,/engine_details/development/configuring_an_ide/android_studio.html
+/contributing/development/configuring_an_ide/clion.html,/engine_details/development/configuring_an_ide/clion.html
+/contributing/development/configuring_an_ide/code_blocks.html,/engine_details/development/configuring_an_ide/code_blocks.html
+/contributing/development/configuring_an_ide/index.html,/engine_details/development/configuring_an_ide/index.html
+/contributing/development/configuring_an_ide/kdevelop.html,/engine_details/development/configuring_an_ide/kdevelop.html
+/contributing/development/configuring_an_ide/qt_creator.html,/engine_details/development/configuring_an_ide/qt_creator.html
+/contributing/development/configuring_an_ide/rider.html,/engine_details/development/configuring_an_ide/rider.html
+/contributing/development/configuring_an_ide/rider.html,/engine_details/development/configuring_an_ide/rider.html
+/contributing/development/configuring_an_ide/visual_studio.html,/engine_details/development/configuring_an_ide/visual_studio.html
+/contributing/development/configuring_an_ide/visual_studio_code.html,/engine_details/development/configuring_an_ide/visual_studio_code.html
+/contributing/development/configuring_an_ide/xcode.html,/engine_details/development/configuring_an_ide/xcode.html
+/contributing/development/debugging/index.html,/engine_details/development/debugging/index.html
+/contributing/development/debugging/macos_debug.html,/engine_details/development/debugging/macos_debug.html
+/contributing/development/debugging/using_cpp_profilers.html,/engine_details/development/debugging/using_cpp_profilers.html
+/contributing/development/debugging/using_sanitizers.html,/engine_details/development/debugging/using_sanitizers.html
+/contributing/development/debugging/vulkan/index.html,/engine_details/development/debugging/vulkan/index.html
+/contributing/development/debugging/vulkan/vulkan_validation_layers.html,/engine_details/development/debugging/vulkan/vulkan_validation_layers.html
+/contributing/development/handling_compatibility_breakages.html,/engine_details/development/handling_compatibility_breakages.html
+/contributing/development/editor/creating_icons.html,/engine_details/editor/creating_icons.html
+/contributing/development/editor/index.html,/engine_details/editor/index.html
+/contributing/development/editor/introduction_to_editor_development.html,/engine_details/editor/introduction_to_editor_development.html
+/contributing/development/file_formats/gdscript_grammar.html,/engine_details/file_formats/gdscript_grammar.html

+ 1 - 1
about/complying_with_licenses.rst

@@ -44,7 +44,7 @@ text somewhere in your game or derivative project.
 
 
 This text reads as follows:
 This text reads as follows:
 
 
-::
+.. code-block:: none
 
 
     This game uses Godot Engine, available under the following license:
     This game uses Godot Engine, available under the following license:
 
 

+ 13 - 9
engine_details/architecture/core_types.rst

@@ -142,7 +142,7 @@ scripting API.
 | Godot datatype        | Closest C++ STL datatype | Comment                                                                               |
 | Godot datatype        | Closest C++ STL datatype | Comment                                                                               |
 +=======================+==========================+=======================================================================================+
 +=======================+==========================+=======================================================================================+
 | |string| 📜           | ``std::string``          | **Use this as the "default" string type.** ``String`` uses UTF-32 encoding            |
 | |string| 📜           | ``std::string``          | **Use this as the "default" string type.** ``String`` uses UTF-32 encoding            |
-|                       |                          | to improve performance thanks to its fixed character size.                            |
+|                       |                          | to simplify processing thanks to its fixed character size.                            |
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 | |vector|              | ``std::vector``          | **Use this as the "default" vector type.** Uses copy-on-write (COW) semantics.        |
 | |vector|              | ``std::vector``          | **Use this as the "default" vector type.** Uses copy-on-write (COW) semantics.        |
 |                       |                          | This means it's generally slower but can be copied around almost for free.            |
 |                       |                          | This means it's generally slower but can be copied around almost for free.            |
@@ -180,8 +180,10 @@ scripting API.
 |                       |                          | no heap allocations.                                                                  |
 |                       |                          | no heap allocations.                                                                  |
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 | |span|                | ``std::span``            | Represents read-only access to a contiguous array without needing to copy any data.   |
 | |span|                | ``std::span``            | Represents read-only access to a contiguous array without needing to copy any data.   |
-|                       |                          | See `pull request description <https://github.com/godotengine/godot/pull/100293>`__   |
-|                       |                          | for details.                                                                          |
+|                       |                          | Note that ``Span`` is designed to be a high performance API: It does not perform      |
+|                       |                          | parameter correctness checks in the same way you might be used to with other Godot    |
+|                       |                          | containers. Use with care.                                                            |
+|                       |                          | `Span` can be constructed from most array-like containers (e.g. ``vector.span()``).   |
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 | |rb_set|              | ``std::set``             | Uses a `red-black tree <https://en.wikipedia.org/wiki/Red-black_tree>`__              |
 | |rb_set|              | ``std::set``             | Uses a `red-black tree <https://en.wikipedia.org/wiki/Red-black_tree>`__              |
 |                       |                          | for faster access.                                                                    |
 |                       |                          | for faster access.                                                                    |
@@ -195,8 +197,9 @@ scripting API.
 |                       |                          | Use this map type when either of these affordances are needed. Use ``AHashMap``       |
 |                       |                          | Use this map type when either of these affordances are needed. Use ``AHashMap``       |
 |                       |                          | otherwise.                                                                            |
 |                       |                          | otherwise.                                                                            |
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
-| |rb_map|              | ``std::map``             | Uses a `red-black tree <https://en.wikipedia.org/wiki/Red-black-tree>`__              |
-|                       |                          | for faster access.                                                                    |
+| |rb_map|              | ``std::map``             | Map type that uses a                                                                  |
+|                       |                          | `red-black tree <https://en.wikipedia.org/wiki/Red-black-tree>`__ to find keys.       |
+|                       |                          | The performance benefits of ``RBMap`` aren't established, so prefer using other types.|
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 | |dictionary| 📜       | ``std::unordered_map``   | Keys and values can be of any Variant type. No static typing is imposed.              |
 | |dictionary| 📜       | ``std::unordered_map``   | Keys and values can be of any Variant type. No static typing is imposed.              |
 |                       |                          | Uses shared reference counting, similar to ``std::shared_ptr``.                       |
 |                       |                          | Uses shared reference counting, similar to ``std::shared_ptr``.                       |
@@ -204,7 +207,8 @@ scripting API.
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 | |typed_dictionary| 📜 | ``std::unordered_map``   | Subclass of ``Dictionary`` but with static typing for its keys and values.            |
 | |typed_dictionary| 📜 | ``std::unordered_map``   | Subclass of ``Dictionary`` but with static typing for its keys and values.            |
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
-| |pair|                | ``std::pair``            | Stores a single key-value pair.                                                       |
+| |pair|                | ``std::pair``            | Stores a single pair. See also ``KeyValue`` in the same file, which uses read-only    |
+|                       |                          | keys.                                                                                 |
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 +-----------------------+--------------------------+---------------------------------------------------------------------------------------+
 
 
 .. |string| replace:: `String <https://github.com/godotengine/godot/blob/master/core/string/ustring.h>`__
 .. |string| replace:: `String <https://github.com/godotengine/godot/blob/master/core/string/ustring.h>`__
@@ -214,8 +218,8 @@ scripting API.
 .. |string_name| replace:: `StringName <https://github.com/godotengine/godot/blob/master/core/string/string_name.h>`__
 .. |string_name| replace:: `StringName <https://github.com/godotengine/godot/blob/master/core/string/string_name.h>`__
 .. |local_vector| replace:: `LocalVector <https://github.com/godotengine/godot/blob/master/core/templates/local_vector.h>`__
 .. |local_vector| replace:: `LocalVector <https://github.com/godotengine/godot/blob/master/core/templates/local_vector.h>`__
 .. |array| replace:: `Array <https://github.com/godotengine/godot/blob/master/core/variant/array.h>`__
 .. |array| replace:: `Array <https://github.com/godotengine/godot/blob/master/core/variant/array.h>`__
-.. |typed_array| replace:: `TypedArray <https://github.com/godotengine/godot/blob/master/core/variant/array.h>`__
-.. |packed_array| replace:: `Packed*Array <https://github.com/godotengine/godot/blob/master/core/variant/array.h>`__
+.. |typed_array| replace:: `TypedArray <https://github.com/godotengine/godot/blob/master/core/variant/typed_array.h>`__
+.. |packed_array| replace:: `Packed*Array <https://github.com/godotengine/godot/blob/master/core/variant/variant.h>`__
 .. |list| replace:: `List <https://github.com/godotengine/godot/blob/master/core/templates/list.h>`__
 .. |list| replace:: `List <https://github.com/godotengine/godot/blob/master/core/templates/list.h>`__
 .. |fixed_vector| replace:: `FixedVector <https://github.com/godotengine/godot/blob/master/core/templates/fixed_vector.h>`__
 .. |fixed_vector| replace:: `FixedVector <https://github.com/godotengine/godot/blob/master/core/templates/fixed_vector.h>`__
 .. |span| replace:: `Span <https://github.com/godotengine/godot/blob/master/core/templates/span.h>`__
 .. |span| replace:: `Span <https://github.com/godotengine/godot/blob/master/core/templates/span.h>`__
@@ -224,7 +228,7 @@ scripting API.
 .. |a_hash_map| replace:: `AHashMap <https://github.com/godotengine/godot/blob/master/core/templates/a_hash_map.h>`__
 .. |a_hash_map| replace:: `AHashMap <https://github.com/godotengine/godot/blob/master/core/templates/a_hash_map.h>`__
 .. |rb_map| replace:: `RBMap <https://github.com/godotengine/godot/blob/master/core/templates/rb_map.h>`__
 .. |rb_map| replace:: `RBMap <https://github.com/godotengine/godot/blob/master/core/templates/rb_map.h>`__
 .. |dictionary| replace:: `Dictionary <https://github.com/godotengine/godot/blob/master/core/variant/dictionary.h>`__
 .. |dictionary| replace:: `Dictionary <https://github.com/godotengine/godot/blob/master/core/variant/dictionary.h>`__
-.. |typed_dictionary| replace:: `TypedDictionary <https://github.com/godotengine/godot/blob/master/core/variant/dictionary.h>`__
+.. |typed_dictionary| replace:: `TypedDictionary <https://github.com/godotengine/godot/blob/master/core/variant/typed_dictionary.h>`__
 .. |pair| replace:: `Pair <https://github.com/godotengine/godot/blob/master/core/templates/pair.h>`__
 .. |pair| replace:: `Pair <https://github.com/godotengine/godot/blob/master/core/templates/pair.h>`__
 
 
 Math types
 Math types

+ 1 - 1
engine_details/architecture/internal_rendering_architecture.rst

@@ -300,7 +300,7 @@ This diagram represents the structure of rendering classes in Godot, including t
 
 
 .. image:: img/rendering_architecture_diagram.webp
 .. image:: img/rendering_architecture_diagram.webp
 
 
-`View at full size <https://raw.githubusercontent.com/godotengine/godot-docs/master/contributing/development/core_and_modules/img/rendering_architecture_diagram.webp>`__
+`View at full size <https://raw.githubusercontent.com/godotengine/godot-docs/master/engine_details/architecture/img/rendering_architecture_diagram.webp>`__
 
 
 .. _doc_internal_rendering_architecture_core_shaders:
 .. _doc_internal_rendering_architecture_core_shaders:
 
 

+ 8 - 0
engine_details/development/compiling/compiling_for_ios.rst

@@ -74,6 +74,14 @@ The MoltenVK static ``.xcframework`` folder must also be placed in the
 ``ios_xcode`` folder once it has been created. MoltenVK is always statically
 ``ios_xcode`` folder once it has been created. MoltenVK is always statically
 linked on iOS; there is no dynamic linking option available, unlike macOS.
 linked on iOS; there is no dynamic linking option available, unlike macOS.
 
 
+.. warning::
+
+    Compiling for the iOS simulator is currently not supported as per
+    `GH-102149 <https://github.com/godotengine/godot/issues/102149>`__.
+
+    Apple Silicon Macs can run iOS apps natively, so you can run exported iOS projects
+    directly on an Apple Silicon Mac without needing the iOS simulator.
+
 Run
 Run
 ---
 ---
 
 

+ 85 - 79
tutorials/editor/default_key_mapping.rst

@@ -251,85 +251,91 @@ Others must be manually bound in the Editor Settings if desired.
 Text editor
 Text editor
 -----------
 -----------
 
 
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Action name               | Windows, Linux                  | macOS                            | Editor setting                                  |
-+===========================+=================================+==================================+=================================================+
-| Cut                       | :kbd:`Ctrl + X`                 | :kbd:`Cmd + X`                   | ``script_text_editor/cut``                      |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Copy                      | :kbd:`Ctrl + C`                 | :kbd:`Cmd + C`                   | ``script_text_editor/copy``                     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Paste                     | :kbd:`Ctrl + V`                 | :kbd:`Cmd + V`                   | ``script_text_editor/paste``                    |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Select All                | :kbd:`Ctrl + A`                 | :kbd:`Cmd + A`                   | ``script_text_editor/select_all``               |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Find                      | :kbd:`Ctrl + F`                 | :kbd:`Cmd + F`                   | ``script_text_editor/find``                     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Find Next                 | :kbd:`F3`                       | :kbd:`Cmd + G`                   | ``script_text_editor/find_next``                |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Find Previous             | :kbd:`Shift + F3`               | :kbd:`Cmd + Shift + G`           | ``script_text_editor/find_previous``            |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Find in Files             | :kbd:`Ctrl + Shift + F`         | :kbd:`Cmd + Shift + F`           | ``script_text_editor/find_in_files``            |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Replace                   | :kbd:`Ctrl + R`                 | :kbd:`Opt + Cmd + F`             | ``script_text_editor/replace``                  |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Replace in Files          | :kbd:`Ctrl + Shift + R`         | :kbd:`Cmd + Shift + R`           | ``script_text_editor/replace_in_files``         |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Undo                      | :kbd:`Ctrl + Z`                 | :kbd:`Cmd + Z`                   | ``script_text_editor/undo``                     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Redo                      | :kbd:`Ctrl + Y`                 | :kbd:`Cmd + Y`                   | ``script_text_editor/redo``                     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Move Up                   | :kbd:`Alt + Up Arrow`           | :kbd:`Opt + Up Arrow`            | ``script_text_editor/move_up``                  |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Move Down                 | :kbd:`Alt + Down Arrow`         | :kbd:`Opt + Down Arrow`          | ``script_text_editor/move_down``                |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Delete Line               | :kbd:`Ctrl + Shift + K`         | :kbd:`Cmd + Shift + K`           | ``script_text_editor/delete_line``              |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Toggle Comment            | :kbd:`Ctrl + K`                 | :kbd:`Cmd + K`                   | ``script_text_editor/toggle_comment``           |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Fold/Unfold Line          | :kbd:`Alt + F`                  | :kbd:`Ctrl + Cmd + F`            | ``script_text_editor/toggle_fold_line``         |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Duplicate Lines           | :kbd:`Ctrl + Alt + Down Arrow`  | :kbd:`Cmd + Shift + Down Arrow`  | ``script_text_editor/duplicate_lines``          |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Duplicate Selection       | :kbd:`Ctrl + Shift + D`         | :kbd:`Cmd + Shift + C`           | ``script_text_editor/duplicate_selection``      |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Complete Symbol           | :kbd:`Ctrl + Space`             | :kbd:`Ctrl + Space`              | ``script_text_editor/complete_symbol``          |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Evaluate Selection        | :kbd:`Ctrl + Shift + E`         | :kbd:`Cmd + Shift + E`           | ``script_text_editor/evaluate_selection``       |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Trim Trailing Whitespace  | :kbd:`Ctrl + Alt + T`           | :kbd:`Opt + Cmd + T`             | ``script_text_editor/trim_trailing_whitespace`` |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Uppercase                 | :kbd:`Shift + F4`               | :kbd:`Shift + F4`                | ``script_text_editor/convert_to_uppercase``     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Lowercase                 | :kbd:`Shift + F5`               | :kbd:`Shift + F5`                | ``script_text_editor/convert_to_lowercase``     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Capitalize                | :kbd:`Shift + F6`               | :kbd:`Shift + F6`                | ``script_text_editor/capitalize``               |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Convert Indent to Spaces  | :kbd:`Ctrl + Shift + Y`         | :kbd:`Cmd + Shift + Y`           | ``script_text_editor/convert_indent_to_spaces`` |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Convert Indent to Tabs    | :kbd:`Ctrl + Shift + I`         | :kbd:`Cmd + Shift + I`           | ``script_text_editor/convert_indent_to_tabs``   |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Auto Indent               | :kbd:`Ctrl + I`                 | :kbd:`Cmd + I`                   | ``script_text_editor/auto_indent``              |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Toggle Bookmark           | :kbd:`Ctrl + Alt + B`           | :kbd:`Opt + Cmd + B`             | ``script_text_editor/toggle_bookmark``          |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Go to Next Bookmark       | :kbd:`Ctrl + B`                 | :kbd:`Cmd + B`                   | ``script_text_editor/goto_next_bookmark``       |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Go to Previous Bookmark   | :kbd:`Ctrl + Shift + B`         | :kbd:`Cmd + Shift + B`           | ``script_text_editor/goto_previous_bookmark``   |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Go to Function            | :kbd:`Ctrl + Alt + F`           | :kbd:`Ctrl + Cmd + J`            | ``script_text_editor/goto_function``            |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Go to Line                | :kbd:`Ctrl + L`                 | :kbd:`Cmd + L`                   | ``script_text_editor/goto_line``                |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Toggle Breakpoint         | :kbd:`F9`                       | :kbd:`Cmd + Shift + B`           | ``script_text_editor/toggle_breakpoint``        |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Remove All Breakpoints    | :kbd:`Ctrl + Shift + F9`        | :kbd:`Cmd + Shift + F9`          | ``script_text_editor/remove_all_breakpoints``   |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Go to Next Breakpoint     | :kbd:`Ctrl + .`                 | :kbd:`Cmd + .`                   | ``script_text_editor/goto_next_breakpoint``     |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Go to Previous Breakpoint | :kbd:`Ctrl + ,`                 | :kbd:`Cmd + ,`                   | ``script_text_editor/goto_previous_breakpoint`` |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
-| Contextual Help           | :kbd:`Alt + F1`                 | :kbd:`Opt + Shift + Space`       | ``script_text_editor/contextual_help``          |
-+---------------------------+---------------------------------+----------------------------------+-------------------------------------------------+
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Action name               | Windows, Linux                  | macOS                            | Editor setting                                       |
++===========================+=================================+==================================+======================================================+
+| Cut                       | :kbd:`Ctrl + X`                 | :kbd:`Cmd + X`                   | ``script_text_editor/cut``                           |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Copy                      | :kbd:`Ctrl + C`                 | :kbd:`Cmd + C`                   | ``script_text_editor/copy``                          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Paste                     | :kbd:`Ctrl + V`                 | :kbd:`Cmd + V`                   | ``script_text_editor/paste``                         |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Select All                | :kbd:`Ctrl + A`                 | :kbd:`Cmd + A`                   | ``script_text_editor/select_all``                    |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Find                      | :kbd:`Ctrl + F`                 | :kbd:`Cmd + F`                   | ``script_text_editor/find``                          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Find Next                 | :kbd:`F3`                       | :kbd:`Cmd + G`                   | ``script_text_editor/find_next``                     |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Find Previous             | :kbd:`Shift + F3`               | :kbd:`Cmd + Shift + G`           | ``script_text_editor/find_previous``                 |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Find in Files             | :kbd:`Ctrl + Shift + F`         | :kbd:`Cmd + Shift + F`           | ``script_text_editor/find_in_files``                 |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Replace                   | :kbd:`Ctrl + R`                 | :kbd:`Opt + Cmd + F`             | ``script_text_editor/replace``                       |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Replace in Files          | :kbd:`Ctrl + Shift + R`         | :kbd:`Cmd + Shift + R`           | ``script_text_editor/replace_in_files``              |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Undo                      | :kbd:`Ctrl + Z`                 | :kbd:`Cmd + Z`                   | ``script_text_editor/undo``                          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Redo                      | :kbd:`Ctrl + Y`                 | :kbd:`Cmd + Y`                   | ``script_text_editor/redo``                          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Move Up                   | :kbd:`Alt + Up Arrow`           | :kbd:`Opt + Up Arrow`            | ``script_text_editor/move_up``                       |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Move Down                 | :kbd:`Alt + Down Arrow`         | :kbd:`Opt + Down Arrow`          | ``script_text_editor/move_down``                     |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Delete Line               | :kbd:`Ctrl + Shift + K`         | :kbd:`Cmd + Shift + K`           | ``script_text_editor/delete_line``                   |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Toggle Comment            | :kbd:`Ctrl + K`                 | :kbd:`Cmd + K`                   | ``script_text_editor/toggle_comment``                |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Fold/Unfold Line          | :kbd:`Alt + F`                  | :kbd:`Ctrl + Cmd + F`            | ``script_text_editor/toggle_fold_line``              |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Duplicate Lines           | :kbd:`Ctrl + Alt + Down Arrow`  | :kbd:`Cmd + Shift + Down Arrow`  | ``script_text_editor/duplicate_lines``               |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Duplicate Selection       | :kbd:`Ctrl + Shift + D`         | :kbd:`Cmd + Shift + C`           | ``script_text_editor/duplicate_selection``           |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Select Down               | :kbd:`Ctrl + Shift + Down Arrow`| :kbd:`Shift + Opt + Down Arrow`  | ``common/ui_text_caret_add_below``                   |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Select Up                 | :kbd:`Ctrl + Shift + Up Arrow`  | :kbd:`Shift + Opt + Up Arrow`    | ``common/ui_text_caret_add_above``                   |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Select Next Occurrence    | :kbd:`Ctrl + D`                 | :kbd:`Cmd + D`                   | ``common/ui_text_add_selection_for_next_occurrence`` |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Complete Symbol           | :kbd:`Ctrl + Space`             | :kbd:`Ctrl + Space`              | ``script_text_editor/complete_symbol``               |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Evaluate Selection        | :kbd:`Ctrl + Shift + E`         | :kbd:`Cmd + Shift + E`           | ``script_text_editor/evaluate_selection``            |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Trim Trailing Whitespace  | :kbd:`Ctrl + Alt + T`           | :kbd:`Opt + Cmd + T`             | ``script_text_editor/trim_trailing_whitespace``      |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Uppercase                 | :kbd:`Shift + F4`               | :kbd:`Shift + F4`                | ``script_text_editor/convert_to_uppercase``          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Lowercase                 | :kbd:`Shift + F5`               | :kbd:`Shift + F5`                | ``script_text_editor/convert_to_lowercase``          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Capitalize                | :kbd:`Shift + F6`               | :kbd:`Shift + F6`                | ``script_text_editor/capitalize``                    |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Convert Indent to Spaces  | :kbd:`Ctrl + Shift + Y`         | :kbd:`Cmd + Shift + Y`           | ``script_text_editor/convert_indent_to_spaces``      |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Convert Indent to Tabs    | :kbd:`Ctrl + Shift + I`         | :kbd:`Cmd + Shift + I`           | ``script_text_editor/convert_indent_to_tabs``        |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Auto Indent               | :kbd:`Ctrl + I`                 | :kbd:`Cmd + I`                   | ``script_text_editor/auto_indent``                   |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Toggle Bookmark           | :kbd:`Ctrl + Alt + B`           | :kbd:`Opt + Cmd + B`             | ``script_text_editor/toggle_bookmark``               |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Go to Next Bookmark       | :kbd:`Ctrl + B`                 | :kbd:`Cmd + B`                   | ``script_text_editor/goto_next_bookmark``            |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Go to Previous Bookmark   | :kbd:`Ctrl + Shift + B`         | :kbd:`Cmd + Shift + B`           | ``script_text_editor/goto_previous_bookmark``        |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Go to Function            | :kbd:`Ctrl + Alt + F`           | :kbd:`Ctrl + Cmd + J`            | ``script_text_editor/goto_function``                 |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Go to Line                | :kbd:`Ctrl + L`                 | :kbd:`Cmd + L`                   | ``script_text_editor/goto_line``                     |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Toggle Breakpoint         | :kbd:`F9`                       | :kbd:`Cmd + Shift + B`           | ``script_text_editor/toggle_breakpoint``             |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Remove All Breakpoints    | :kbd:`Ctrl + Shift + F9`        | :kbd:`Cmd + Shift + F9`          | ``script_text_editor/remove_all_breakpoints``        |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Go to Next Breakpoint     | :kbd:`Ctrl + .`                 | :kbd:`Cmd + .`                   | ``script_text_editor/goto_next_breakpoint``          |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Go to Previous Breakpoint | :kbd:`Ctrl + ,`                 | :kbd:`Cmd + ,`                   | ``script_text_editor/goto_previous_breakpoint``      |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
+| Contextual Help           | :kbd:`Alt + F1`                 | :kbd:`Opt + Shift + Space`       | ``script_text_editor/contextual_help``               |
++---------------------------+---------------------------------+----------------------------------+------------------------------------------------------+
 
 
 Script editor
 Script editor
 -------------
 -------------

+ 2 - 2
tutorials/editor/inspector_dock.rst

@@ -18,7 +18,7 @@ Usage
 If the inspector dock is visible, clicking on a node in the scene tree will automatically
 If the inspector dock is visible, clicking on a node in the scene tree will automatically
 display its properties.
 display its properties.
 If it is not visible, you can show it by navigating to
 If it is not visible, you can show it by navigating to
-**Editor > Editor Settings > Editor Docks > Inspector**.
+**Editor > Editor Docks > Inspector**.
 
 
 At the top of the dock are the file and navigation buttons.
 At the top of the dock are the file and navigation buttons.
 
 
@@ -129,4 +129,4 @@ various view and edit options.
 .. Using the tool menu
 .. Using the tool menu
 .. List each property type and how to edit it
 .. List each property type and how to edit it
 .. For numerical inputs, mention and link to a page about formulas
 .. For numerical inputs, mention and link to a page about formulas
-.. Refer to :ref:`doc_filesystem_dock`
+.. Refer to :ref:`doc_filesystem_dock`

+ 9 - 0
tutorials/export/exporting_for_ios.rst

@@ -57,6 +57,15 @@ When the export completes, the output folder should look like this:
 
 
 .. image:: img/ios_export_output.webp
 .. image:: img/ios_export_output.webp
 
 
+
+.. warning::
+
+    Exporting for the iOS simulator is currently not supported as per
+    `GH-102149 <https://github.com/godotengine/godot/issues/102149>`__.
+
+    Apple Silicon Macs can run iOS apps natively, so you can run exported iOS projects
+    directly on an Apple Silicon Mac without needing the iOS simulator.
+
 Opening **exported_xcode_project_name.xcodeproj** lets you build and deploy
 Opening **exported_xcode_project_name.xcodeproj** lets you build and deploy
 like any other iOS app.
 like any other iOS app.
 
 

+ 1 - 1
tutorials/migrating/upgrading_to_godot_4.1.rst

@@ -195,7 +195,7 @@ Method ``create_action`` adds a new ``backward_undo_ops`` optional parameter
 Behavior changes
 Behavior changes
 ----------------
 ----------------
 
 
-In 4.1 some behavior changes have been introduced, which might require you to adjust your project.
+In 4.1, some behavior changes have been introduced, which might require you to adjust your project.
 
 
 ==================================================================================================================================================================================================  ===========
 ==================================================================================================================================================================================================  ===========
 Change                                                                                                                                                                                              Introduced
 Change                                                                                                                                                                                              Introduced

+ 2 - 2
tutorials/migrating/upgrading_to_godot_4.3.rst

@@ -224,7 +224,7 @@ Type renamed to ``EditorSceneFormatImporterFBX2GLTF``
 Behavior changes
 Behavior changes
 ----------------
 ----------------
 
 
-In 4.3 some behavior changes have been introduced, which might require you to adjust your project.
+In 4.3, some behavior changes have been introduced, which might require you to adjust your project.
 
 
 Core
 Core
 ~~~~
 ~~~~
@@ -299,7 +299,7 @@ Multiplayer
 
 
     This is a breaking change for the high-level multiplayer protocol making it incompatible with previous Godot versions.
     This is a breaking change for the high-level multiplayer protocol making it incompatible with previous Godot versions.
     Upgrade both your server and client versions to Godot 4.3 to handle this change gracefully.
     Upgrade both your server and client versions to Godot 4.3 to handle this change gracefully.
-    
+
     Note that high-level multiplayer facilities are only ever meant to be compatible with server and client using the same Godot version. It is recommended to implement some kind of version checking.
     Note that high-level multiplayer facilities are only ever meant to be compatible with server and client using the same Godot version. It is recommended to implement some kind of version checking.
 
 
 Rendering
 Rendering

+ 56 - 3
tutorials/migrating/upgrading_to_godot_4.5.rst

@@ -39,7 +39,7 @@ Core
 Change                                                                                                                    GDScript Compatible  C# Binary Compatible  C# Source Compatible  Introduced
 Change                                                                                                                    GDScript Compatible  C# Binary Compatible  C# Source Compatible  Introduced
 ========================================================================================================================  ===================  ====================  ====================  ============
 ========================================================================================================================  ===================  ====================  ====================  ============
 **JSONRPC**
 **JSONRPC**
-Method ``set_scope`` replaced by ``set_method`` optional parameter                                                        |❌|                 |✔️ with compat|      |✔️ with compat|      `GH-104890`_
+Method ``set_scope`` replaced by ``set_method``                                                                           |❌|                 |❌ with stub|        |❌ with stub|        `GH-104890`_
 **Node**
 **Node**
 Method ``get_rpc_config`` renamed to ``get_node_rpc_config``                                                              |❌|                 |✔️ with compat|      |✔️ with compat|      `GH-106848`_
 Method ``get_rpc_config`` renamed to ``get_node_rpc_config``                                                              |❌|                 |✔️ with compat|      |✔️ with compat|      `GH-106848`_
 Method ``set_name`` changes ``name`` parameter type from ``String`` to ``StringName``                                     |✔️|                 |✔️ with compat|      |✔️ with compat|      `GH-76560`_
 Method ``set_name`` changes ``name`` parameter type from ``String`` to ``StringName``                                     |✔️|                 |✔️ with compat|      |✔️ with compat|      `GH-76560`_
@@ -64,7 +64,7 @@ Method ``instance_set_interpolated`` removed
 .. note::
 .. note::
 
 
     In C#, the enum ``RenderingDevice.Features`` breaks compatibility because of the way the bindings generator
     In C#, the enum ``RenderingDevice.Features`` breaks compatibility because of the way the bindings generator
-    detects the enum prefix. New members where added to the enum in `GH-103941`_ that caused the enum member
+    detects the enum prefix. New members were added to the enum in `GH-103941`_ that caused the enum member
     ``Address`` to be renamed to ``BufferDeviceAddress``.
     ``Address`` to be renamed to ``BufferDeviceAddress``.
 
 
 GLTF
 GLTF
@@ -188,7 +188,19 @@ Method ``_get_option_icon`` changes return type from ``ImageTexture`` to ``Textu
 Behavior changes
 Behavior changes
 ----------------
 ----------------
 
 
-In 4.5 some behavior changes have been introduced, which might require you to adjust your project.
+In 4.5, some behavior changes have been introduced, which might require you to adjust your project.
+
+TileMapLayer
+~~~~~~~~~~~~
+
+:ref:`TileMapLayer.get_coords_for_body_rid() <class_TileMapLayer_method_get_coords_for_body_rid>`
+will return different values in 4.5 compared to 4.4,
+as TileMapLayer physics chunking is enabled by default. Higher values of
+:ref:`TileMapLayer.physics_quadrant_size <class_TileMapLayer_property_physics_quadrant_size>`
+will make this function less precise. To get the exact cell coordinates like in 4.4 and prior
+versions, you need to set
+:ref:`TileMapLayer.physics_quadrant_size <class_TileMapLayer_property_physics_quadrant_size>`
+to ``1``, which disables physics chunking.
 
 
 3D Model Import
 3D Model Import
 ~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~
@@ -204,6 +216,27 @@ new behavior, you must change the "Naming Version" option at the bottom of the I
 Core
 Core
 ~~~~
 ~~~~
 
 
+.. note::
+
+    :ref:`Resource.duplicate(true) <class_Resource_method_duplicate>` (which performs
+    deep duplication) now only duplicates resources internal to the resource file
+    it's called on. In 4.4, this duplicated everything instead, including external resources.
+    If you were deep-duplicating a resource that contained references to other
+    external resources, those external resources aren't duplicated anymore. You must call
+    :ref:`Resource.duplicate_deep(RESOURCE_DEEP_DUPLICATE_ALL) <class_Resource_method_duplicate_deep>`
+    instead to keep the old behavior.
+
+.. note::
+
+    :ref:`ProjectSettings.add_property_info() <class_ProjectSettings_method_add_property_info>`
+    now prints a warning when the dictionary parameter has missing keys or invalid keys.
+    Most importantly, it will now warn when a ``usage`` key is passed, as this key is not used.
+    This was also the case before 4.5, but it was silently ignored instead.
+    As a reminder, to set property usage information correctly, you must use
+    :ref:`ProjectSettings.set_as_basic() <class_ProjectSettings_method_set_as_basic>`,
+    :ref:`ProjectSettings.set_restart_if_changed() <class_ProjectSettings_method_set_restart_if_changed>`,
+    or :ref:`ProjectSettings.set_as_internal() <class_ProjectSettings_method_set_as_internal>` instead.
+
 .. note::
 .. note::
 
 
     In C#, ``StringExtensions.PathJoin`` now avoids adding an extra path separator when the original string is empty,
     In C#, ``StringExtensions.PathJoin`` now avoids adding an extra path separator when the original string is empty,
@@ -220,6 +253,25 @@ Core
     the shortest arc between the two input vectors. Previously, it would return incorrect values for certain inputs
     the shortest arc between the two input vectors. Previously, it would return incorrect values for certain inputs
     (`GH-107618`_).
     (`GH-107618`_).
 
 
+Navigation
+~~~~~~~~~~
+
+.. note::
+
+    By default, the regions in a NavigationServer map now update asynchronously using threads to improve performance.
+    This can cause additional delay in the update due to thread synchronisation.
+    The asynchronous region update can be toggled with the ``navigation/world/region_use_async_iterations`` project setting.
+
+.. note::
+    The merging of navmeshes in the NavigationServer has changed processing order. Regions now merge and cache
+    internal navmeshes first, then the remaining free edges are merged by the navigation map.
+    If a project had navigation map synchronisation errors before, it might now have shifted
+    affected edges, making already existing errors in a layout more noticeable in the pathfinding.
+    The ``navigation/2d_or_3d/merge_rasterizer_cell_scale`` project setting can be set to a lower value
+    to increase the detail of the rasterization grid (with `0.01` being the smallest cell size possible).
+    If edge merge errors still persist with the lowest possible rasterization scale value,
+    the error may be caused by overlap: two navmeshes are stacked on top of each other, causing geometry conflict.
+
 Physics
 Physics
 ~~~~~~~
 ~~~~~~~
 
 
@@ -241,6 +293,7 @@ Text
     to the same value you were passing as ``size_in_percent``.
     to the same value you were passing as ``size_in_percent``.
 
 
 .. |❌| replace:: :abbr:`❌ (This API breaks compatibility.)`
 .. |❌| replace:: :abbr:`❌ (This API breaks compatibility.)`
+.. |❌ with stub| replace:: :abbr:`❌ (Stub compatibility methods were added to prevent crashes. However, this API is not functional anymore.)`
 .. |✔️| replace:: :abbr:`✔️ (This API does not break compatibility.)`
 .. |✔️| replace:: :abbr:`✔️ (This API does not break compatibility.)`
 .. |✔️ with compat| replace:: :abbr:`✔️ (This API does not break compatibility. A compatibility method was added.)`
 .. |✔️ with compat| replace:: :abbr:`✔️ (This API does not break compatibility. A compatibility method was added.)`
 
 

+ 24 - 23
tutorials/platform/android/android_in_app_purchases.rst

@@ -21,7 +21,7 @@ Initialize the plugin
 
 
 To use the ``GodotGooglePlayBilling`` API:
 To use the ``GodotGooglePlayBilling`` API:
 
 
-1. Access the ``BillingClient`` autoload singleton, it's automatically added when the plugin is enabled.
+1. Access the ``BillingClient``.
 2. Connect to its signals to receive billing results.
 2. Connect to its signals to receive billing results.
 3. Call ``start_connection``.
 3. Call ``start_connection``.
 
 
@@ -29,17 +29,19 @@ Initialization example:
 
 
 ::
 ::
 
 
+    var billing_client: BillingClient
     func _ready():
     func _ready():
-        BillingClient.connected.connect(_on_connected) # No params
-        BillingClient.disconnected.connect(_on_disconnected) # No params
-        BillingClient.connect_error.connect(_on_connect_error) # response_code: int, debug_message: String
-        BillingClient.query_product_details_response.connect(_on_query_product_details_response) # response: Dictionary
-        BillingClient.query_purchases_response.connect(_on_query_purchases_response) # response: Dictionary
-        BillingClient.on_purchase_updated.connect(_on_purchase_updated) # response: Dictionary
-        BillingClient.consume_purchase_response.connect(_on_consume_purchase_response) # response: Dictionary
-        BillingClient.acknowledge_purchase_response.connect(_on_acknowledge_purchase_response) # response: Dictionary
-
-        BillingClient.start_connection()
+        billing_client = BillingClient.new()
+        billing_client.connected.connect(_on_connected) # No params
+        billing_client.disconnected.connect(_on_disconnected) # No params
+        billing_client.connect_error.connect(_on_connect_error) # response_code: int, debug_message: String
+        billing_client.query_product_details_response.connect(_on_query_product_details_response) # response: Dictionary
+        billing_client.query_purchases_response.connect(_on_query_purchases_response) # response: Dictionary
+        billing_client.on_purchase_updated.connect(_on_purchase_updated) # response: Dictionary
+        billing_client.consume_purchase_response.connect(_on_consume_purchase_response) # response: Dictionary
+        billing_client.acknowledge_purchase_response.connect(_on_acknowledge_purchase_response) # response: Dictionary
+
+        billing_client.start_connection()
 
 
 The API must be in a connected state prior to use. The ``connected`` signal is sent
 The API must be in a connected state prior to use. The ``connected`` signal is sent
 when the connection process succeeds. You can also use ``is_ready()`` to determine if the plugin
 when the connection process succeeds. You can also use ``is_ready()`` to determine if the plugin
@@ -76,12 +78,12 @@ Example use of ``query_product_details()``:
 ::
 ::
 
 
     func _on_connected():
     func _on_connected():
-      BillingClient.query_product_details(["my_iap_item"], BillingClient.ProductType.INAPP) # BillingClient.ProductType.SUBS for subscriptions.
+      billing_client.query_product_details(["my_iap_item"], BillingClient.ProductType.INAPP) # BillingClient.ProductType.SUBS for subscriptions.
 
 
     func _on_query_product_details_response(query_result: Dictionary):
     func _on_query_product_details_response(query_result: Dictionary):
         if query_result.response_code == BillingClient.BillingResponseCode.OK:
         if query_result.response_code == BillingClient.BillingResponseCode.OK:
             print("Product details query success")
             print("Product details query success")
-            for available_product in query_result.result_array:
+            for available_product in query_result.product_details:
                 print(available_product)
                 print(available_product)
         else:
         else:
             print("Product details query failed")
             print("Product details query failed")
@@ -105,12 +107,12 @@ Example use of ``query_purchases()``:
 ::
 ::
 
 
     func _query_purchases():
     func _query_purchases():
-        BillingClient.query_purchases(BillingClient.ProductType.INAPP) # Or BillingClient.ProductType.SUBS for subscriptions.
+        billing_client.query_purchases(BillingClient.ProductType.INAPP) # Or BillingClient.ProductType.SUBS for subscriptions.
 
 
     func _on_query_purchases_response(query_result: Dictionary):
     func _on_query_purchases_response(query_result: Dictionary):
         if query_result.response_code == BillingClient.BillingResponseCode.OK:
         if query_result.response_code == BillingClient.BillingResponseCode.OK:
             print("Purchase query success")
             print("Purchase query success")
-            for purchase in query_result.result_array:
+            for purchase in query_result.purchases:
                 _process_purchase(purchase)
                 _process_purchase(purchase)
         else:
         else:
             print("Purchase query failed")
             print("Purchase query failed")
@@ -120,9 +122,8 @@ Example use of ``query_purchases()``:
 Purchase an item
 Purchase an item
 ~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~
 
 
-To launch the billing flow for an item:
-- Use ``purchase()`` for in-app products, passing the product ID string.
-- Use ``purchase_subscription()`` for subscriptions, passing the product ID and base plan ID. You may also optionally provide an offer ID.
+To launch the billing flow for an item: Use ``purchase()`` for in-app products, passing the product ID string.
+Use ``purchase_subscription()`` for subscriptions, passing the product ID and base plan ID. You may also optionally provide an offer ID.
 
 
 For both ``purchase()`` and ``purchase_subscription()``, you can optionally pass a boolean to indicate whether
 For both ``purchase()`` and ``purchase_subscription()``, you can optionally pass a boolean to indicate whether
 offers are `personallised <https://developer.android.com/google/play/billing/integrate#personalized-price>`_
 offers are `personallised <https://developer.android.com/google/play/billing/integrate#personalized-price>`_
@@ -136,7 +137,7 @@ Example use of ``purchase()``:
 
 
 ::
 ::
 
 
-    var result = BillingClient.purchase("my_iap_item")
+    var result = billing_client.purchase("my_iap_item")
     if result.response_code == BillingClient.BillingResponseCode.OK:
     if result.response_code == BillingClient.BillingResponseCode.OK:
         print("Billing flow launch success")
         print("Billing flow launch success")
     else:
     else:
@@ -151,7 +152,7 @@ The result of the purchase will be sent through the ``on_purchases_updated`` sig
     func _on_purchases_updated(result: Dictionary):
     func _on_purchases_updated(result: Dictionary):
         if result.response_code == BillingClient.BillingResponseCode.OK:
         if result.response_code == BillingClient.BillingResponseCode.OK:
             print("Purchase update received")
             print("Purchase update received")
-            for purchase in result.result_array:
+            for purchase in result.purchases:
                 _process_purchase(purchase)
                 _process_purchase(purchase)
         else:
         else:
             print("Purchase update error")
             print("Purchase update error")
@@ -229,7 +230,7 @@ Example use of ``consume_purchase()``:
         if "my_consumable_iap_item" in purchase.product_ids and purchase.purchase_state == BillingClient.PurchaseState.PURCHASED:
         if "my_consumable_iap_item" in purchase.product_ids and purchase.purchase_state == BillingClient.PurchaseState.PURCHASED:
             # Add code to store payment so we can reconcile the purchase token
             # Add code to store payment so we can reconcile the purchase token
             # in the completion callback against the original purchase
             # in the completion callback against the original purchase
-            BillingClient.consume_purchase(purchase.purchase_token)
+            billing_client.consume_purchase(purchase.purchase_token)
 
 
     func _on_consume_purchase_response(result: Dictionary):
     func _on_consume_purchase_response(result: Dictionary):
         if result.response_code == BillingClient.BillingResponseCode.OK:
         if result.response_code == BillingClient.BillingResponseCode.OK:
@@ -265,7 +266,7 @@ Example use of ``acknowledge_purchase()``:
                 not purchase.is_acknowledged:
                 not purchase.is_acknowledged:
             # Add code to store payment so we can reconcile the purchase token
             # Add code to store payment so we can reconcile the purchase token
             # in the completion callback against the original purchase
             # in the completion callback against the original purchase
-            BillingClient.acknowledge_purchase(purchase.purchase_token)
+            billing_client.acknowledge_purchase(purchase.purchase_token)
 
 
     func _on_acknowledge_purchase_response(result: Dictionary):
     func _on_acknowledge_purchase_response(result: Dictionary):
         if result.response_code == BillingClient.BillingResponseCode.OK:
         if result.response_code == BillingClient.BillingResponseCode.OK:
@@ -342,6 +343,6 @@ Example use of ``update_subscription``:
 
 
 ::
 ::
 
 
-    BillingClient.update_subscription(_active_subscription_purchase.purchase_token, \
+    billing_client.update_subscription(_active_subscription_purchase.purchase_token, \
                         BillingClient.ReplacementMode.WITH_TIME_PRORATION, "new_sub_product_id", "base_plan_id")
                         BillingClient.ReplacementMode.WITH_TIME_PRORATION, "new_sub_product_id", "base_plan_id")
 
 

+ 1 - 1
tutorials/scripting/cpp/gdextension_docs_system.rst

@@ -85,7 +85,7 @@ You can set text as bold, italic, underlined, colored, codeblocks etc. by embedd
 
 
     [b]this text will be shown as bold[/b]
     [b]this text will be shown as bold[/b]
 
 
-Currently they supported tags for the GDExtension documentation system are:
+Currently, the supported tags for the GDExtension documentation system are:
 
 
 .. list-table::
 .. list-table::
   :class: wrap-normal
   :class: wrap-normal

+ 80 - 0
tutorials/scripting/gdscript/static_typing.rst

@@ -479,6 +479,86 @@ Currently, ``UNSAFE_*`` warnings do not cover all cases that unsafe lines cover.
 Common unsafe operations and their safe counterparts
 Common unsafe operations and their safe counterparts
 ----------------------------------------------------
 ----------------------------------------------------
 
 
+Global scope methods
+~~~~~~~~~~~~~~~~~~~~
+
+The following global scope methods are not statically typed, but they have
+typed counterparts available. These methods return statically typed values:
+
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| Method                                               | Statically typed equivalents                                                        |
++======================================================+=====================================================================================+
+| :ref:`abs()<class_@GlobalScope_method_abs>`          | | :ref:`absf() <class_@GlobalScope_method_absf>`,                                   |
+|                                                      |   :ref:`absi() <class_@GlobalScope_method_absi>`                                    |
+|                                                      | | :ref:`Vector2.abs() <class_Vector2_method_abs>`,                                  |
+|                                                      |   :ref:`Vector2i.abs() <class_Vector2i_method_abs>`                                 |
+|                                                      | | :ref:`Vector3.abs() <class_Vector3_method_abs>`,                                  |
+|                                                      |   :ref:`Vector3i.abs() <class_Vector3i_method_abs>`                                 |
+|                                                      | | :ref:`Vector4.abs() <class_Vector4_method_abs>`,                                  |
+|                                                      |   :ref:`Vector4i.abs() <class_Vector4i_method_abs>`                                 |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`ceil() <class_@GlobalScope_method_ceil>`       | | :ref:`ceilf() <class_@GlobalScope_method_ceilf>`,                                 |
+|                                                      |   :ref:`ceili() <class_@GlobalScope_method_ceili>`                                  |
+|                                                      | | :ref:`Vector2.ceil() <class_Vector2_method_ceil>`                                 |
+|                                                      | | :ref:`Vector3.ceil() <class_Vector3_method_ceil>`                                 |
+|                                                      | | :ref:`Vector4.ceil() <class_Vector4_method_ceil>`                                 |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`clamp() <class_@GlobalScope_method_clamp>`     | | :ref:`clampf() <class_@GlobalScope_method_clampf>`,                               |
+|                                                      |   :ref:`clampi() <class_@GlobalScope_method_clampi>`                                |
+|                                                      | | :ref:`Vector2.clamp() <class_Vector2_method_clamp>`,                              |
+|                                                      |   :ref:`Vector2i.clamp() <class_Vector2i_method_clamp>`                             |
+|                                                      | | :ref:`Vector3.clamp() <class_Vector3_method_clamp>`,                              |
+|                                                      |   :ref:`Vector3i.clamp() <class_Vector3i_method_clamp>`                             |
+|                                                      | | :ref:`Vector4.clamp() <class_Vector4_method_clamp>`,                              |
+|                                                      |   :ref:`Vector4i.clamp() <class_Vector4i_method_clamp>`                             |
+|                                                      | | :ref:`Color.clamp() <class_Color_method_clamp>`                                   |
+|                                                      | | (untyped ``clamp()`` does not work on Color)                                      |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`floor() <class_@GlobalScope_method_floor>`     | | :ref:`floorf() <class_@GlobalScope_method_floorf>`,                               |
+|                                                      |   :ref:`floori() <class_@GlobalScope_method_floori>`                                |
+|                                                      | | :ref:`Vector2.floor() <class_Vector2_method_floor>`                               |
+|                                                      | | :ref:`Vector3.floor() <class_Vector3_method_floor>`                               |
+|                                                      | | :ref:`Vector4.floor() <class_Vector4_method_floor>`                               |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`lerp() <class_@GlobalScope_method_lerp>`       | | :ref:`lerpf() <class_@GlobalScope_method_lerpf>`                                  |
+|                                                      | | :ref:`Vector2.lerp() <class_Vector2_method_lerp>`                                 |
+|                                                      | | :ref:`Vector3.lerp() <class_Vector3_method_lerp>`                                 |
+|                                                      | | :ref:`Vector4.lerp() <class_Vector4_method_lerp>`                                 |
+|                                                      | | :ref:`Color.lerp() <class_Color_method_lerp>`                                     |
+|                                                      | | :ref:`Quaternion.slerp() <class_Quaternion_method_slerp>`                         |
+|                                                      | | :ref:`Basis.slerp() <class_Basis_method_slerp>`                                   |
+|                                                      | | :ref:`Transform2D.interpolate_with() <class_Transform2D_method_interpolate_with>` |
+|                                                      | | :ref:`Transform3D.interpolate_with() <class_Transform3D_method_interpolate_with>` |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`round() <class_@GlobalScope_method_round>`     | | :ref:`roundf() <class_@GlobalScope_method_roundf>`,                               |
+|                                                      |   :ref:`roundi() <class_@GlobalScope_method_roundi>`                                |
+|                                                      | | :ref:`Vector2.round() <class_Vector2_method_round>`                               |
+|                                                      | | :ref:`Vector3.round() <class_Vector3_method_round>`                               |
+|                                                      | | :ref:`Vector4.round() <class_Vector4_method_round>`                               |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`sign() <class_@GlobalScope_method_sign>`       | | :ref:`signf() <class_@GlobalScope_method_signf>`                                  |
+|                                                      | | :ref:`signi() <class_@GlobalScope_method_signi>`                                  |
+|                                                      | | :ref:`Vector2.sign() <class_Vector2_method_sign>`,                                |
+|                                                      |   :ref:`Vector2i.sign() <class_Vector2i_method_sign>`                               |
+|                                                      | | :ref:`Vector3.sign() <class_Vector3_method_sign>`,                                |
+|                                                      |   :ref:`Vector3i.sign() <class_Vector3i_method_sign>`                               |
+|                                                      | | :ref:`Vector4.sign() <class_Vector4_method_sign>`,                                |
+|                                                      |   :ref:`Vector4i.sign() <class_Vector4i_method_sign>`                               |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+| :ref:`snapped() <class_@GlobalScope_method_snapped>` | | :ref:`snappedf() <class_@GlobalScope_method_snappedf>`                            |
+|                                                      | | :ref:`snappedi() <class_@GlobalScope_method_snappedi>`                            |
+|                                                      | | :ref:`Vector2.snapped() <class_Vector2_method_snapped>`,                          |
+|                                                      |   :ref:`Vector2i.snapped() <class_Vector2i_method_snapped>`                         |
+|                                                      | | :ref:`Vector3.snapped() <class_Vector3_method_snapped>`,                          |
+|                                                      |   :ref:`Vector3i.snapped() <class_Vector3i_method_snapped>`                         |
+|                                                      | | :ref:`Vector4.snapped() <class_Vector4_method_snapped>`,                          |
+|                                                      |   :ref:`Vector4i.snapped() <class_Vector4i_method_snapped>`                         |
++------------------------------------------------------+-------------------------------------------------------------------------------------+
+
+When using static typing, use the typed global scope methods whenever possible.
+This ensures you have safe lines and benefit from typed instructions for
+better performance.
+
 ``UNSAFE_PROPERTY_ACCESS`` and ``UNSAFE_METHOD_ACCESS`` warnings
 ``UNSAFE_PROPERTY_ACCESS`` and ``UNSAFE_METHOD_ACCESS`` warnings
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 

+ 4 - 0
tutorials/scripting/logging.rst

@@ -225,6 +225,8 @@ Here is a minimal working example of a custom logger, with the script added as a
         func _log_message(message: String, error: bool) -> void:
         func _log_message(message: String, error: bool) -> void:
             # Do something with `message`.
             # Do something with `message`.
             # `error` is `true` for messages printed to the standard error stream (stderr) with `print_error()`.
             # `error` is `true` for messages printed to the standard error stream (stderr) with `print_error()`.
+            # Note that this method will be called from threads other than the main thread, possibly at the same
+            # time, so you will need to have some kind of thread-safety as part of it, like a Mutex.
             pass
             pass
 
 
         func _log_error(
         func _log_error(
@@ -239,6 +241,8 @@ Here is a minimal working example of a custom logger, with the script added as a
         ) -> void:
         ) -> void:
             # Do something with the error. The error text is in `rationale`.
             # Do something with the error. The error text is in `rationale`.
             # See the Logger class reference for details on other parameters.
             # See the Logger class reference for details on other parameters.
+            # Note that this method will be called from threads other than the main thread, possibly at the same
+            # time, so you will need to have some kind of thread-safety as part of it, like a Mutex.
             pass
             pass
 
 
     # Use `_init()` to initialize the logger as early as possible, which ensures that messages
     # Use `_init()` to initialize the logger as early as possible, which ensures that messages

+ 9 - 5
tutorials/shaders/shader_reference/spatial_shader.rst

@@ -192,7 +192,9 @@ shader, this value can be used as desired.
 +----------------------------------------+--------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------+
 | in vec3 **NODE_POSITION_VIEW**         | Node position, in view space.                          |
 | in vec3 **NODE_POSITION_VIEW**         | Node position, in view space.                          |
 +----------------------------------------+--------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------+
-| in vec3 **CAMERA_POSITION_WORLD**      | Camera position, in world space.                       |
+| in vec3 **CAMERA_POSITION_WORLD**      | Camera position, in world space. Represents the        |
+|                                        | midpoint of the two eyes when in multiview/stereo      |
+|                                        | rendering.                                             |
 +----------------------------------------+--------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------+
 | in vec3 **CAMERA_DIRECTION_WORLD**     | Camera direction, in world space.                      |
 | in vec3 **CAMERA_DIRECTION_WORLD**     | Camera direction, in world space.                      |
 +----------------------------------------+--------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------+
@@ -210,8 +212,8 @@ shader, this value can be used as desired.
 +----------------------------------------+--------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------+
 | in int **VIEW_RIGHT**                  | Constant for right eye, always ``1``.                  |
 | in int **VIEW_RIGHT**                  | Constant for right eye, always ``1``.                  |
 +----------------------------------------+--------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------+
-| in vec3 **EYE_OFFSET**                 | Position offset for the eye being rendered.            |
-|                                        | Only applicable for multiview rendering.               |
+| in vec3 **EYE_OFFSET**                 | Position offset for the eye being rendered, in view    |
+|                                        | space. Only applicable for multiview rendering.        |
 +----------------------------------------+--------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------+
 | inout vec3 **VERTEX**                  | Position of the vertex, in model space.                |
 | inout vec3 **VERTEX**                  | Position of the vertex, in model space.                |
 |                                        | In world space if ``world_vertex_coords`` is used.     |
 |                                        | In world space if ``world_vertex_coords`` is used.     |
@@ -322,7 +324,8 @@ these properties, and if you don't write to them, Godot will optimize away the c
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 | in vec3 **NODE_POSITION_VIEW**         | Node position, in view space.                                                                    |
 | in vec3 **NODE_POSITION_VIEW**         | Node position, in view space.                                                                    |
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
-| in vec3 **CAMERA_POSITION_WORLD**      | Camera position, in world space.                                                                 |
+| in vec3 **CAMERA_POSITION_WORLD**      | Camera position, in world space. Represents the midpoint of the two eyes when in                 |
+|                                        | multiview/stereo rendering.                                                                      |
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 | in vec3 **CAMERA_DIRECTION_WORLD**     | Camera direction, in world space.                                                                |
 | in vec3 **CAMERA_DIRECTION_WORLD**     | Camera direction, in world space.                                                                |
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
@@ -343,7 +346,8 @@ these properties, and if you don't write to them, Godot will optimize away the c
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 | in int **VIEW_RIGHT**                  | Constant for right eye, always ``1``.                                                            |
 | in int **VIEW_RIGHT**                  | Constant for right eye, always ``1``.                                                            |
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
-| in vec3 **EYE_OFFSET**                 | Position offset for the eye being rendered. Only applicable for multiview rendering.             |
+| in vec3 **EYE_OFFSET**                 | Position offset for the eye being rendered, in view space. Only applicable for multiview         |
+|                                        | rendering.                                                                                       |
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 | sampler2D **SCREEN_TEXTURE**           | Removed in Godot 4. Use a ``sampler2D`` with ``hint_screen_texture`` instead.                    |
 | sampler2D **SCREEN_TEXTURE**           | Removed in Godot 4. Use a ``sampler2D`` with ``hint_screen_texture`` instead.                    |
 +----------------------------------------+--------------------------------------------------------------------------------------------------+
 +----------------------------------------+--------------------------------------------------------------------------------------------------+

+ 38 - 0
tutorials/shaders/shaders_style_guide.rst

@@ -377,6 +377,44 @@ the console, extra indentation should **not** be added within ``#if``,
         #endif
         #endif
     }
     }
 
 
+Applying formatting automatically
+---------------------------------
+
+To automatically format shader files, you can use
+`clang-format <https://clang.llvm.org/docs/ClangFormat.html>`__ on one or several
+``.gdshader`` files, as the syntax is close enough to a C-style language.
+
+However, the default style in clang-format doesn't follow this style guide,
+so you need to save this file as ``.clang-format`` in your project's root folder:
+
+.. code-block:: yaml
+
+    BasedOnStyle: LLVM
+    AlignAfterOpenBracket: DontAlign
+    AlignOperands: DontAlign
+    AlignTrailingComments:
+    Kind: Never
+    OverEmptyLines: 0
+    AllowAllParametersOfDeclarationOnNextLine: false
+    AllowShortFunctionsOnASingleLine: Inline
+    BreakConstructorInitializers: AfterColon
+    ColumnLimit: 0
+    ContinuationIndentWidth: 8
+    IndentCaseLabels: true
+    IndentWidth: 4
+    InsertBraces: true
+    KeepEmptyLinesAtTheStartOfBlocks: false
+    RemoveSemicolon: true
+    SpacesInLineCommentPrefix:
+    Minimum: 0 # We want a minimum of 1 for comments, but allow 0 for disabled code.
+    Maximum: -1
+    TabWidth: 4
+    UseTab: Always
+
+While in the project root, you can then call ``clang-format -i path/to/shader.gdshader``
+in a terminal to format a single shader file, or ``clang-format -i path/to/folder/*.gdshader``
+to format all shaders in a folder.
+
 Code order
 Code order
 ----------
 ----------