ソースを参照

Merge pull request #76998 from akien-mga/4.0-cherrypicks

Cherry-picks for the 4.0 branch (future 4.0.3) - 4th batch
Rémi Verschelde 2 年 前
コミット
2ac4e3bb30
100 ファイル変更1922 行追加1977 行削除
  1. 9 5
      .github/workflows/static_checks.yml
  2. 4 0
      .gitignore
  3. 72 23
      CHANGELOG.md
  4. 1 1
      COPYRIGHT.txt
  5. 4 2
      SConstruct
  6. 25 1
      core/input/input.cpp
  7. 1 1
      core/io/dir_access.h
  8. 1 1
      core/io/file_access.h
  9. 2 2
      core/math/basis.cpp
  10. 10 10
      core/math/convex_hull.cpp
  11. 6 4
      core/math/math_funcs.h
  12. 2 1
      core/math/quaternion.cpp
  13. 8 8
      core/math/static_raycaster.h
  14. 4 4
      core/os/time.cpp
  15. 3 12
      core/templates/local_vector.h
  16. 2 2
      doc/classes/@GlobalScope.xml
  17. 23 3
      doc/classes/AudioStreamGenerator.xml
  18. 2 2
      doc/classes/BaseMaterial3D.xml
  19. 7 6
      doc/classes/CanvasItem.xml
  20. 1 1
      doc/classes/CodeEdit.xml
  21. 1 0
      doc/classes/Control.xml
  22. 1 1
      doc/classes/CurveTexture.xml
  23. 1 1
      doc/classes/Decal.xml
  24. 1 0
      doc/classes/DirAccess.xml
  25. 6 6
      doc/classes/DisplayServer.xml
  26. 2 2
      doc/classes/EditorSettings.xml
  27. 1 1
      doc/classes/FontFile.xml
  28. 1 1
      doc/classes/GPUParticlesCollisionHeightField3D.xml
  29. 4 3
      doc/classes/GeometryInstance3D.xml
  30. 1 0
      doc/classes/Input.xml
  31. 1 1
      doc/classes/Light3D.xml
  32. 19 1
      doc/classes/MultiplayerPeerExtension.xml
  33. 7 0
      doc/classes/Node.xml
  34. 2 2
      doc/classes/Node3D.xml
  35. 3 3
      doc/classes/OS.xml
  36. 6 5
      doc/classes/ParticleProcessMaterial.xml
  37. 44 14
      doc/classes/ProjectSettings.xml
  38. 5 0
      doc/classes/RDAttachmentFormat.xml
  39. 4 2
      doc/classes/RDFramebufferPass.xml
  40. 6 0
      doc/classes/RDPipelineColorBlendState.xml
  41. 70 0
      doc/classes/RDPipelineColorBlendStateAttachment.xml
  42. 3 0
      doc/classes/RDPipelineDepthStencilState.xml
  43. 8 0
      doc/classes/RDPipelineMultisampleState.xml
  44. 8 0
      doc/classes/RDPipelineRasterizationState.xml
  45. 5 0
      doc/classes/RDPipelineSpecializationConstant.xml
  46. 16 0
      doc/classes/RDSamplerState.xml
  47. 7 0
      doc/classes/RDShaderFile.xml
  48. 17 0
      doc/classes/RDShaderSPIRV.xml
  49. 11 0
      doc/classes/RDShaderSource.xml
  50. 11 0
      doc/classes/RDTextureFormat.xml
  51. 7 0
      doc/classes/RDTextureView.xml
  52. 4 0
      doc/classes/RDUniform.xml
  53. 2 0
      doc/classes/RDVertexAttribute.xml
  54. 7 7
      doc/classes/ReflectionProbe.xml
  55. 414 4
      doc/classes/RenderingDevice.xml
  56. 186 75
      doc/classes/RenderingServer.xml
  57. 1 0
      doc/classes/ResourceLoader.xml
  58. 1 1
      doc/classes/RichTextLabel.xml
  59. 11 1
      doc/classes/ScrollContainer.xml
  60. 4 0
      doc/classes/ShaderGlobalsOverride.xml
  61. 1 1
      doc/classes/SkeletonModification2D.xml
  62. 1 1
      doc/classes/Sky.xml
  63. 1 1
      doc/classes/StreamPeerTLS.xml
  64. 1 1
      doc/classes/SyntaxHighlighter.xml
  65. 14 0
      doc/classes/TextServerDummy.xml
  66. 1 1
      doc/classes/TileSet.xml
  67. 1 1
      doc/classes/TileSetScenesCollectionSource.xml
  68. 4 2
      doc/classes/Viewport.xml
  69. 2 1
      doc/classes/ViewportTexture.xml
  70. 2 1
      doc/classes/Window.xml
  71. 1 1
      doc/classes/X509Certificate.xml
  72. 7 281
      doc/translations/es.po
  73. 202 384
      doc/translations/fr.po
  74. 159 695
      doc/translations/zh_CN.po
  75. 5 1
      drivers/gl_context/SCsub
  76. 4 3
      drivers/gles3/rasterizer_gles3.cpp
  77. 1 1
      drivers/gles3/storage/material_storage.cpp
  78. 2 2
      drivers/pulseaudio/audio_driver_pulseaudio.cpp
  79. 6 6
      drivers/unix/file_access_unix.cpp
  80. 14 34
      drivers/vulkan/rendering_device_vulkan.cpp
  81. 22 1
      drivers/wasapi/audio_driver_wasapi.cpp
  82. 9 6
      drivers/windows/dir_access_windows.cpp
  83. 3 0
      drivers/windows/dir_access_windows.h
  84. 8 0
      drivers/windows/file_access_windows.cpp
  85. 1 0
      drivers/windows/file_access_windows.h
  86. 1 1
      editor/debugger/script_editor_debugger.cpp
  87. 8 2
      editor/editor_command_palette.cpp
  88. 1 1
      editor/editor_data.cpp
  89. 1 0
      editor/editor_node.cpp
  90. 0 1
      editor/editor_properties.cpp
  91. 1 1
      editor/editor_properties_array_dict.cpp
  92. 2 0
      editor/export/project_export.cpp
  93. 273 273
      editor/import/collada.cpp
  94. 36 36
      editor/import/collada.h
  95. 1 1
      editor/import/post_import_plugin_skeleton_rest_fixer.cpp
  96. 6 6
      editor/plugins/collision_shape_2d_editor_plugin.cpp
  97. 11 1
      editor/plugins/material_editor_plugin.cpp
  98. 2 0
      editor/plugins/material_editor_plugin.h
  99. 7 5
      editor/plugins/node_3d_editor_plugin.cpp
  100. 4 4
      editor/plugins/node_3d_editor_plugin.h

+ 9 - 5
.github/workflows/static_checks.yml

@@ -28,14 +28,18 @@ jobs:
 
       - name: Get changed files
         id: changed-files
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         run: |
           if [ "${{ github.event_name }}" == "pull_request" ]; then
-            files=$(git diff-tree --no-commit-id --name-only -r ${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }} 2> /dev/null || true)
+            files=$(gh pr diff ${{ github.event.pull_request.number }} --name-only)
           elif [ "${{ github.event_name }}" == "push" -a "${{ github.event.forced }}" == "false" -a "${{ github.event.created }}" == "false" ]; then
             files=$(git diff-tree --no-commit-id --name-only -r ${{ github.event.before }}..${{ github.event.after }} 2> /dev/null || true)
           fi
           echo "$files" >> changed.txt
           cat changed.txt
+          files=$(echo "$files" | grep -v 'thirdparty' | xargs -I {} sh -c 'echo "./{}"' | tr '\n' ' ')
+          echo "CHANGED_FILES=$files" >> $GITHUB_ENV
 
       - name: File formatting checks (file_format.sh)
         run: |
@@ -98,9 +102,9 @@ jobs:
           fi
 
       - name: Spell checks via codespell
+        if: github.event_name == 'pull_request' && env.CHANGED_FILES != ''
         uses: codespell-project/actions-codespell@v1
         with:
-          skip: ./.*,./**/.*,./bin,./thirdparty,*.desktop,*.gen.*,*.po,*.pot,*.rc,./AUTHORS.md,./COPYRIGHT.txt,./DONORS.md,./core/input/gamecontrollerdb.txt,./core/string/locales.h,./editor/project_converter_3_to_4.cpp,./misc/scripts/codespell.sh,./platform/android/java/lib/src/com,./platform/web/node_modules,./platform/web/package-lock.json
-          check_hidden: false
-          ignore_words_list: curvelinear,doubleclick,expct,findn,gird,hel,inout,lod,nd,numer,ot,te
-          only_warn: true
+          skip: "./bin,./thirdparty,*.desktop,*.gen.*,*.po,*.pot,*.rc,./AUTHORS.md,./COPYRIGHT.txt,./DONORS.md,./core/input/gamecontrollerdb.txt,./core/string/locales.h,./editor/project_converter_3_to_4.cpp,./misc/scripts/codespell.sh,./platform/android/java/lib/src/com,./platform/web/node_modules,./platform/web/package-lock.json"
+          ignore_words_list: "curvelinear,doubleclick,expct,findn,gird,hel,inout,lod,nd,numer,ot,te,vai"
+          path: ${{ env.CHANGED_FILES }}

+ 4 - 0
.gitignore

@@ -63,6 +63,10 @@ tests/data/*.translation
 # Binutils tmp linker output of the form "stXXXXXX" where "X" is alphanumeric
 st[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]
 
+# Python development
+.venv
+venv
+
 # Python generated
 __pycache__/
 *.pyc

+ 72 - 23
CHANGELOG.md

@@ -10,9 +10,14 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 
 ### Added
 
+#### 2D
+
+- Add info label to TileMap editor ([GH-68800](https://github.com/godotengine/godot/pull/68800)).
+
 #### Documentation
 
 - Create an "Editor-only" section in the online class reference ([GH-76410](https://github.com/godotengine/godot/pull/76410)).
+- Improve RenderingServer, RenderingDevice, ShaderGlobalsOverride documentation ([GH-76008](https://github.com/godotengine/godot/pull/76008)).
 
 #### Editor
 
@@ -26,12 +31,17 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 
 #### Navigation
 
-- Navigation: Expose NavigationAgent path postprocessing and pathfinding algorithm options ([GH-75326](https://github.com/godotengine/godot/pull/75326)).
+- Expose NavigationAgent path postprocessing and pathfinding algorithm options ([GH-75326](https://github.com/godotengine/godot/pull/75326)).
 
 #### Physics
 
 - Warn when a concave polygon is assigned to ConvexPolygonShape2D ([GH-56671](https://github.com/godotengine/godot/pull/56671)).
 
+#### Rendering
+
+- Expose viewports render target RID ([GH-75517](https://github.com/godotengine/godot/pull/75517)).
+- Allow creation of rendering buffers at any time ([GH-75937](https://github.com/godotengine/godot/pull/75937)).
+
 ### Changed
 
 #### 3D
@@ -40,11 +50,8 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 
 #### Buildsystem
 
-- Wait for static check results before starting other CI builds ([GH-65232](https://github.com/godotengine/godot/pull/65232)).
 - Err when trying to build the editor without its required modules ([GH-74980](https://github.com/godotengine/godot/pull/74980)).
-- Remove obsolete 'tools' in a CI workflow name ([GH-75687](https://github.com/godotengine/godot/pull/75687)).
-- Visibly print trailing whitespace when static checks fail ([GH-75700](https://github.com/godotengine/godot/pull/75700)).
-- CI: Speed up static checks by checking only changed files ([GH-76263](https://github.com/godotengine/godot/pull/76263)).
+- Enable shadow warnings and fix raised errors ([GH-76946](https://github.com/godotengine/godot/pull/76946)).
 
 #### C#/.NET
 
@@ -53,8 +60,8 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 #### Core
 
 - Lift restriction that resource load thread requester has to be the initiator ([GH-73862](https://github.com/godotengine/godot/pull/73862)).
-- Use HashMap instead of RBMap for ids in Windows TTS ([GH-75933](https://github.com/godotengine/godot/pull/75933)).
 - Rename internal root canvas group to start with underscore ([GH-76149](https://github.com/godotengine/godot/pull/76149)).
+- Make acos and asin safe ([GH-76906](https://github.com/godotengine/godot/pull/76906)).
 
 #### Editor
 
@@ -66,6 +73,10 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 - Adjust size of some dialogs ([GH-75895](https://github.com/godotengine/godot/pull/75895)).
 - Change cursor consistently when panning in the 2D Editor ([GH-75997](https://github.com/godotengine/godot/pull/75997)).
 - Validate renderer selection in project manager and expose default renderer setting as an enum ([GH-76331](https://github.com/godotengine/godot/pull/76331)).
+- Improve the UX of ViewportTexture in the editor ([GH-64388](https://github.com/godotengine/godot/pull/64388)).
+- Close built-in shaders when closing scene ([GH-75864](https://github.com/godotengine/godot/pull/75864)).
+- Command Palette search now also uses original English command names ([GH-76523](https://github.com/godotengine/godot/pull/76523)).
+- Preserve scene unique names when saving branch as scene ([GH-76609](https://github.com/godotengine/godot/pull/76609)).
 
 #### GUI
 
@@ -82,6 +93,8 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 
 - gltf: Remove obsolete hack to embed gltf textures in advanced import ([GH-75636](https://github.com/godotengine/godot/pull/75636)).
 - Expose more compression formats in Image and fix compress check ([GH-76014](https://github.com/godotengine/godot/pull/76014)).
+- Use DXT1 when compressing PNGs with RGB format ([GH-76516](https://github.com/godotengine/godot/pull/76516)).
+- gltf: Permit sparse accessors without a bufferView ([GH-76875](https://github.com/godotengine/godot/pull/76875)).
 
 #### Network
 
@@ -90,31 +103,37 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 #### Particles
 
 - Translate inactive GPUParticles3D particles to -INF ([GH-75162](https://github.com/godotengine/godot/pull/75162)).
-- Use angle_rand to calculate base_angle in particles process material ([GH-75999](https://github.com/godotengine/godot/pull/75999)).
+- Use `angle_rand` to calculate `base_angle` in particles process material ([GH-75999](https://github.com/godotengine/godot/pull/75999)).
 - Don't store instance transform origin in RD 3D renderer unless requested ([GH-76003](https://github.com/godotengine/godot/pull/76003)).
 
 #### Physics
 
-- Modify contact_max_allowed_penetration precision to 3 significant digits ([GH-75665](https://github.com/godotengine/godot/pull/75665)).
+- Modify `contact_max_allowed_penetration` precision to 3 significant digits ([GH-75665](https://github.com/godotengine/godot/pull/75665)).
 
 #### Porting
 
 - Android: Downgrade Android gradle plugin to version 7.2.1 ([GH-76325](https://github.com/godotengine/godot/pull/76325)).
+- Linux: Ensure WindowData minimized/maximized are mutually exclusive ([GH-76868](https://github.com/godotengine/godot/pull/76868)).
+- Linux: Don't use udev for joypad hotloading when running in a sandbox ([GH-76961](https://github.com/godotengine/godot/pull/76961)).
+- Windows: Support long path in file access ([GH-76739](https://github.com/godotengine/godot/pull/76739)).
 
 #### Rendering
 
 - Recreate swap chain when suboptimal to avoid error spam ([GH-72859](https://github.com/godotengine/godot/pull/72859)).
-- Use MODELVIEW_MATRIX when on double precision ([GH-75462](https://github.com/godotengine/godot/pull/75462)).
-- Check for instancing without relying on instance_count when drawing 2D meshes ([GH-75954](https://github.com/godotengine/godot/pull/75954)).
+- Use `MODELVIEW_MATRIX` when on double precision ([GH-75462](https://github.com/godotengine/godot/pull/75462)).
+- Check for instancing without relying on `instance_count` when drawing 2D meshes ([GH-75954](https://github.com/godotengine/godot/pull/75954)).
 
 #### Shaders
 
-- Write out render_mode even when mode is set to default in VisualShaders ([GH-75957](https://github.com/godotengine/godot/pull/75957)).
+- Write out `render_mode` even when mode is set to default in VisualShaders ([GH-75957](https://github.com/godotengine/godot/pull/75957)).
 
 #### Thirdparty
 
-- thorvg updated to 0.8.4.
+- astcenc updated to 4.4.0.
+- doctest updated to 2.4.11.
 - mbedtls updated to 2.28.3.
+- thorvg updated to 0.9.0.
+- CA root certificates updated to 2023-03-23 bundle from Mozilla.
 
 ### Fixed
 
@@ -124,19 +143,25 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 - Fix rendering odd-sized tiles ([GH-74814](https://github.com/godotengine/godot/pull/74814)).
 - Fix TouchScreenButton not redrawn when texture changes ([GH-75016](https://github.com/godotengine/godot/pull/75016)).
 
+#### 3D
+
+- 3D: Fixes to CSG robustness ([GH-74771](https://github.com/godotengine/godot/pull/74771)).
+- 3D: Fix infinite loop in CSG `Build2DFaces::_find_edge_intersections` ([GH-76521](https://github.com/godotengine/godot/pull/76521)).
+- 3D: Fix `SurfaceTool::create_from_blend_shape()` ([GH-76669](https://github.com/godotengine/godot/pull/76669)).
+
 #### Animation
 
-- Fix blend_shape (shapekey) empty name import ([GH-75990](https://github.com/godotengine/godot/pull/75990)).
+- Fix `blend_shape` (shapekey) empty name import ([GH-75990](https://github.com/godotengine/godot/pull/75990)).
 
 #### Audio
 
-- Fix crash caused by invalid mix_rate assignment due to bogus project settings ([GH-69833](https://github.com/godotengine/godot/pull/69833)).
+- Fix crash caused by invalid `mix_rate` assignment due to bogus project settings ([GH-69833](https://github.com/godotengine/godot/pull/69833)).
 - Fix AudioStreamPlayer2D crash when PhysicsServer2D runs on thread ([GH-75728](https://github.com/godotengine/godot/pull/75728)).
 
 #### Buildsystem
 
-- Fix the Python type error when creating the .sln file ([GH-75309](https://github.com/godotengine/godot/pull/75309)).
-- Fix forced optimization in dev_build ([GH-75909](https://github.com/godotengine/godot/pull/75909)).
+- Fix the Python type error when creating the `.sln` file ([GH-75309](https://github.com/godotengine/godot/pull/75309)).
+- Fix forced optimization in `dev_build` ([GH-75909](https://github.com/godotengine/godot/pull/75909)).
 
 #### Core
 
@@ -145,6 +170,9 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 - Fix moving position indicator out of bounds in FileAccessMemory ([GH-75641](https://github.com/godotengine/godot/pull/75641)).
 - Fix expected argument count in Callable call error text ([GH-76259](https://github.com/godotengine/godot/pull/76259)).
 - Fix lerp error message ([GH-76314](https://github.com/godotengine/godot/pull/76314)).
+- Make `LocalVector` respect its `tight` template parameter ([GH-64120](https://github.com/godotengine/godot/pull/64120)).
+- Prevent errors when using ViewportTexture ([GH-75751](https://github.com/godotengine/godot/pull/75751)).
+- Fix size error in `BitMap.opaque_to_polygons` ([GH-76536](https://github.com/godotengine/godot/pull/76536)).
 
 #### Editor
 
@@ -154,15 +182,22 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 - Initialize editor values on first launch ([GH-75799](https://github.com/godotengine/godot/pull/75799)).
 - Fix connect signal dialog not allowing Unicode method name ([GH-75814](https://github.com/godotengine/godot/pull/75814)).
 - Fix method dialog label ([GH-75844](https://github.com/godotengine/godot/pull/75844)).
-- Fix editor spin slider remaining editable if set read_only while editing ([GH-76122](https://github.com/godotengine/godot/pull/76122)).
+- Fix editor spin slider remaining editable if set `read_only` while editing ([GH-76122](https://github.com/godotengine/godot/pull/76122)).
 - Fix layout list not resizing in editor layout dialog ([GH-76364](https://github.com/godotengine/godot/pull/76364)).
 - Fix `line_spacing` in code editor will not take effect immediately on change ([GH-76396](https://github.com/godotengine/godot/pull/76396)).
 - Fix inconsistent file dialog settings usage ([GH-76421](https://github.com/godotengine/godot/pull/76421)).
+- Fix Node arrays appear as Object arrays in the inspector ([GH-76530](https://github.com/godotengine/godot/pull/76530)).
+- Fix CollisionShape2D editor crashes ([GH-76546](https://github.com/godotengine/godot/pull/76546), [GH-76798](https://github.com/godotengine/godot/pull/76798)).
+- Fix 2D shader preview draws over uniform ([GH-76555](https://github.com/godotengine/godot/pull/76555)).
 
 #### Export
 
 - Fix validation of codesigning certificate password on macOS ([GH-74326](https://github.com/godotengine/godot/pull/74326)).
 
+#### GDExtension
+
+- Add missing bindings and documentation for MultiplayerPeerExtension ([GH-75116](https://github.com/godotengine/godot/pull/75116)).
+
 #### GDScript
 
 - Add missing member type check when resolving `extends` ([GH-75879](https://github.com/godotengine/godot/pull/75879)).
@@ -172,25 +207,27 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 - Fix mixed tabs and spaces issues ([GH-76286](https://github.com/godotengine/godot/pull/76286)).
 - Fix wrong file name on function call error ([GH-76404](https://github.com/godotengine/godot/pull/76404)).
 - Don't fail when freed object is returned ([GH-76483](https://github.com/godotengine/godot/pull/76483)).
+- Don't send empty LSP completion command ([GH-76790](https://github.com/godotengine/godot/pull/76790)).
 
 #### GUI
 
-- Fixed RichTextLabel wrong selection offset in padded table cell ([GH-71742](https://github.com/godotengine/godot/pull/71742)).
+- Fix RichTextLabel wrong selection offset in padded table cell ([GH-71742](https://github.com/godotengine/godot/pull/71742)).
 - Fix commenting collapsed function issue ([GH-75070](https://github.com/godotengine/godot/pull/75070)).
 - Fix fill align and trim with enabled dropcap in `RichTextLabel` ([GH-75504](https://github.com/godotengine/godot/pull/75504)).
 - Fix descriptions not showing for theme properties ([GH-75559](https://github.com/godotengine/godot/pull/75559)).
 - Fix some theme values affect the editor by setting a default value for them ([GH-75566](https://github.com/godotengine/godot/pull/75566)).
 - Fix several GraphEdit operations at zoom levels other than 100% ([GH-75595](https://github.com/godotengine/godot/pull/75595)).
-- Fix uninitialized member in CodeEdit ([GH-75829](https://github.com/godotengine/godot/pull/75829)).
 - Fix offset calculation in Tree when there are hidden items ([GH-75977](https://github.com/godotengine/godot/pull/75977)).
 - Add missing LineEdit constants in editor theme ([GH-76123](https://github.com/godotengine/godot/pull/76123)).
 - Fix blurry borders on antialiased StyleBoxFlat ([GH-76132](https://github.com/godotengine/godot/pull/76132)).
 - Fix fractional ascent for image fonts with odd height ([GH-76136](https://github.com/godotengine/godot/pull/76136)).
+- Fix right click in selection of additional caret ([GH-76472](https://github.com/godotengine/godot/pull/76472)).
 
 #### Import
 
-- SVG: fix tvg::Picture->size() and scale based errors. ([GH-75034](https://github.com/godotengine/godot/pull/75034)).
+- SVG: Fix `tvg::Picture->size()` and scale based errors ([GH-75034](https://github.com/godotengine/godot/pull/75034)).
 - Fix OBJ mesh importer smoothing handling ([GH-75315](https://github.com/godotengine/godot/pull/75315)).
+- Fix animation silhouette using incorrect index ([GH-76499](https://github.com/godotengine/godot/pull/76499)).
 
 #### Input
 
@@ -216,25 +253,37 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 #### Porting
 
 - Android: Fix issue with resizing the display when using the compatibility renderer ([GH-76464](https://github.com/godotengine/godot/pull/76464)).
+- Android: Allow concurrent buffering and dispatch of input events ([GH-76399](https://github.com/godotengine/godot/pull/76399)).
+- Android: Fix double tap & drag on Android ([GH-76791](https://github.com/godotengine/godot/pull/76791)).
 - iOS: Fix splash screen rotation ([GH-76037](https://github.com/godotengine/godot/pull/76037)).
+- iOS: Fix loading of GDExtension dylibs auto converted to framework ([GH-76510](https://github.com/godotengine/godot/pull/76510)).
 - Windows: Fix clipboard relying on focused window ([GH-73878](https://github.com/godotengine/godot/pull/73878)).
 - Windows: Fix queuing utterances in rapid succession ([GH-75880](https://github.com/godotengine/godot/pull/75880)).
 - Windows: Cleanup COM library initialization/uninitialization ([GH-75881](https://github.com/godotengine/godot/pull/75881)).
 - Windows: Fix StringFileInfo structure ([GH-76001](https://github.com/godotengine/godot/pull/76001)).
+- Windows: Add mono audio support to WASAPI ([GH-76541](https://github.com/godotengine/godot/pull/76541)).
 
 #### Rendering
 
 - Fix interpolation of R0 for metallic and calculation of the Fresnel Shlick term in SSR ([GH-75368](https://github.com/godotengine/godot/pull/75368)).
 - Fix `get_test_texture()` returning an almost fully white texture ([GH-75632](https://github.com/godotengine/godot/pull/75632)).
 - Ensure that depth write state is updated before transparent pass in OpenGL3 renderer ([GH-75968](https://github.com/godotengine/godot/pull/75968)).
-- Fix editor lock on sdf collision bake on error ([GH-76257](https://github.com/godotengine/godot/pull/76257)).
+- Fix editor lock on SDF collision bake on error ([GH-76257](https://github.com/godotengine/godot/pull/76257)).
 - Fix issues with Vulkan layout transitions ([GH-76315](https://github.com/godotengine/godot/pull/76315)).
 - Fix breakages of volumetric fog on voxel GI changes ([GH-76437](https://github.com/godotengine/godot/pull/76437)).
+- Fix GLES3 rendering on Android studio emulator ([GH-74945](https://github.com/godotengine/godot/pull/74945)).
+- Fix more voxel GI issues ([GH-76550](https://github.com/godotengine/godot/pull/76550)).
+- Use proper UV in cubemap downsampler raster (Fixes reflections in mobile renderer) ([GH-76692](https://github.com/godotengine/godot/pull/76692)).
 
 #### Shaders
 
 - Fix crashes caused due to missing type specifier on visual shader editor ([GH-75809](https://github.com/godotengine/godot/pull/75809)).
 - Fix Shader Preprocessor line numbering when disabled ([GH-76479](https://github.com/godotengine/godot/pull/76479)).
+- Fix rotation issue with `NODE_POSITION_VIEW` shader built-in ([GH-76109](https://github.com/godotengine/godot/pull/76109)).
+
+#### XR
+
+- Fix incorrect HTC action map entries ([GH-74930](https://github.com/godotengine/godot/pull/74930)).
 
 
 ## [4.0.2] - 2023-04-04
@@ -257,7 +306,7 @@ See the [release announcement](https://godotengine.org/article/maintenance-relea
 - Android: Use the new API for virtual keyboard height detection on Android, bugfix for old API ([GH-74398](https://github.com/godotengine/godot/pull/74398)).
 - Android: Configure maven central snapshot versions for the Godot Android library ([GH-74470](https://github.com/godotengine/godot/pull/74470)).
 - Android: Add "filesRoot" path to Android provider paths xml ([GH-74673](https://github.com/godotengine/godot/pull/74673)).
-- macOS: Re-add support for the `_sc_` inside app bundle. ([GH-73429](https://github.com/godotengine/godot/pull/73429)).
+- macOS: Re-add support for the `_sc_` inside app bundle ([GH-73429](https://github.com/godotengine/godot/pull/73429)).
 
 #### Project converter
 
@@ -1943,7 +1992,7 @@ See the [release announcement](https://godotengine.org/article/godot-3-3-has-arr
 - Support for automatically building Android templates before exporting.
   - This makes 3rd-party SDK integration easier.
 - Support for [texture atlases in 2D](https://godotengine.org/article/atlas-support-returns-godot-3-2).
-- Major improvements to the visual shader system. ([News post 1](https://godotengine.org/article/major-update-for-visual-shader-in-godot-3-2), [News post 2](https://godotengine.org/article/major-update-visual-shaders-godot-3-2-part-2))
+- Major improvements to the visual shader system ([News post 1](https://godotengine.org/article/major-update-for-visual-shader-in-godot-3-2), [News post 2](https://godotengine.org/article/major-update-visual-shaders-godot-3-2-part-2)).
   - Redesigned visual shader editor with drag-and-drop capability.
     - Textures can be dragged from the FileSystem dock to be added as nodes.
   - Most functions available in GLSL are now exposed.

+ 1 - 1
COPYRIGHT.txt

@@ -169,7 +169,7 @@ License: Expat
 
 Files: ./thirdparty/doctest/
 Comment: doctest
-Copyright: 2016-2021, Viktor Kirilov
+Copyright: 2016-2023, Viktor Kirilov
 License: Expat
 
 Files: ./thirdparty/embree/

+ 4 - 2
SConstruct

@@ -686,7 +686,8 @@ if selected_platform in platform_list:
             if env["warnings"] == "extra":
                 env.Append(CCFLAGS=["/W4"])
             elif env["warnings"] == "all":
-                env.Append(CCFLAGS=["/W3"])
+                # C4458 is like -Wshadow. Part of /W4 but let's apply it for the default /W3 too.
+                env.Append(CCFLAGS=["/W3", "/w34458"])
             elif env["warnings"] == "moderate":
                 env.Append(CCFLAGS=["/W2"])
             # Disable warnings which we don't plan to fix.
@@ -715,7 +716,7 @@ if selected_platform in platform_list:
         common_warnings = []
 
         if methods.using_gcc(env):
-            common_warnings += ["-Wshadow-local", "-Wno-misleading-indentation"]
+            common_warnings += ["-Wshadow", "-Wno-misleading-indentation"]
             if cc_version_major == 7:  # Bogus warning fixed in 8+.
                 common_warnings += ["-Wno-strict-overflow"]
             if cc_version_major < 11:
@@ -725,6 +726,7 @@ if selected_platform in platform_list:
             if cc_version_major >= 12:  # False positives in our error macros, see GH-58747.
                 common_warnings += ["-Wno-return-type"]
         elif methods.using_clang(env) or methods.using_emcc(env):
+            common_warnings += ["-Wshadow-field-in-constructor", "-Wshadow-uncaptured-local"]
             # We often implement `operator<` for structs of pointers as a requirement
             # for putting them in `Set` or `Map`. We don't mind about unreliable ordering.
             common_warnings += ["-Wno-ordered-compare-function-pointers"]

+ 25 - 1
core/input/input.cpp

@@ -35,6 +35,10 @@
 #include "core/input/input_map.h"
 #include "core/os/os.h"
 
+#ifdef DEV_ENABLED
+#include "core/os/thread.h"
+#endif
+
 static const char *_joy_buttons[(size_t)JoyButton::SDL_MAX] = {
 	"a",
 	"b",
@@ -486,6 +490,10 @@ Vector3 Input::get_gyroscope() const {
 }
 
 void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_emulated) {
+	// This function does the final delivery of the input event to user land.
+	// Regardless where the event came from originally, this has to happen on the main thread.
+	DEV_ASSERT(Thread::get_caller_id() == Thread::get_main_id());
+
 	// Notes on mouse-touch emulation:
 	// - Emulated mouse events are parsed, that is, re-routed to this method, so they make the same effects
 	//   as true mouse events. The only difference is the situation is flagged as emulated so they are not
@@ -537,7 +545,9 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
 			touch_event->set_position(mb->get_position());
 			touch_event->set_double_tap(mb->is_double_click());
 			touch_event->set_device(InputEvent::DEVICE_ID_EMULATION);
+			_THREAD_SAFE_UNLOCK_
 			event_dispatch_function(touch_event);
+			_THREAD_SAFE_LOCK_
 		}
 	}
 
@@ -563,7 +573,9 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
 			drag_event->set_velocity(get_last_mouse_velocity());
 			drag_event->set_device(InputEvent::DEVICE_ID_EMULATION);
 
+			_THREAD_SAFE_UNLOCK_
 			event_dispatch_function(drag_event);
+			_THREAD_SAFE_LOCK_
 		}
 	}
 
@@ -664,7 +676,9 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
 
 	if (ge.is_valid()) {
 		if (event_dispatch_function) {
+			_THREAD_SAFE_UNLOCK_
 			event_dispatch_function(ge);
+			_THREAD_SAFE_LOCK_
 		}
 	}
 
@@ -687,7 +701,9 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
 	}
 
 	if (event_dispatch_function) {
+		_THREAD_SAFE_UNLOCK_
 		event_dispatch_function(p_event);
+		_THREAD_SAFE_LOCK_
 	}
 }
 
@@ -831,6 +847,7 @@ bool Input::is_emulating_touch_from_mouse() const {
 // Calling this whenever the game window is focused helps unsticking the "touch mouse"
 // if the OS or its abstraction class hasn't properly reported that touch pointers raised
 void Input::ensure_touch_mouse_raised() {
+	_THREAD_SAFE_METHOD_
 	if (mouse_from_touch_index != -1) {
 		mouse_from_touch_index = -1;
 
@@ -937,8 +954,15 @@ void Input::flush_buffered_events() {
 	_THREAD_SAFE_METHOD_
 
 	while (buffered_events.front()) {
-		_parse_input_event_impl(buffered_events.front()->get(), false);
+		// The final delivery of the input event involves releasing the lock.
+		// While the lock is released, another thread may lock it and add new events to the back.
+		// Therefore, we get each event and pop it while we still have the lock,
+		// to ensure the list is in a consistent state.
+		List<Ref<InputEvent>>::Element *E = buffered_events.front();
+		Ref<InputEvent> e = E->get();
 		buffered_events.pop_front();
+
+		_parse_input_event_impl(e, false);
 	}
 }
 

+ 1 - 1
core/io/dir_access.h

@@ -68,7 +68,7 @@ protected:
 	virtual String _get_root_string() const;
 
 	AccessType get_access_type() const;
-	String fix_path(String p_path) const;
+	virtual String fix_path(String p_path) const;
 
 	template <class T>
 	static Ref<DirAccess> _create_builtin() {

+ 1 - 1
core/io/file_access.h

@@ -80,7 +80,7 @@ protected:
 	static void _bind_methods();
 
 	AccessType get_access_type() const;
-	String fix_path(const String &p_path) const;
+	virtual String fix_path(const String &p_path) const;
 	virtual Error open_internal(const String &p_path, int p_mode_flags) = 0; ///< open a file
 	virtual uint64_t _get_modified_time(const String &p_file) = 0;
 	virtual void _set_access_type(AccessType p_access);

+ 2 - 2
core/math/basis.cpp

@@ -807,8 +807,8 @@ void Basis::get_axis_angle(Vector3 &r_axis, real_t &r_angle) const {
 	z = (rows[1][0] - rows[0][1]) / s;
 
 	r_axis = Vector3(x, y, z);
-	// CLAMP to avoid NaN if the value passed to acos is not in [0,1].
-	r_angle = Math::acos(CLAMP((rows[0][0] + rows[1][1] + rows[2][2] - 1) / 2, (real_t)0.0, (real_t)1.0));
+	// acos does clamping.
+	r_angle = Math::acos((rows[0][0] + rows[1][1] + rows[2][2] - 1) / 2);
 }
 
 void Basis::set_quaternion(const Quaternion &p_quaternion) {

+ 10 - 10
core/math/convex_hull.cpp

@@ -596,9 +596,9 @@ private:
 		}
 	};
 
-	enum Orientation { NONE,
-		CLOCKWISE,
-		COUNTER_CLOCKWISE };
+	enum Orientation { ORIENTATION_NONE,
+		ORIENTATION_CLOCKWISE,
+		ORIENTATION_COUNTER_CLOCKWISE };
 
 	Vector3 scaling;
 	Vector3 center;
@@ -1140,13 +1140,13 @@ ConvexHullInternal::Orientation ConvexHullInternal::get_orientation(const Edge *
 			CHULL_ASSERT(!m.is_zero());
 			int64_t dot = n.dot(m);
 			CHULL_ASSERT(dot != 0);
-			return (dot > 0) ? COUNTER_CLOCKWISE : CLOCKWISE;
+			return (dot > 0) ? ORIENTATION_COUNTER_CLOCKWISE : ORIENTATION_CLOCKWISE;
 		}
-		return COUNTER_CLOCKWISE;
+		return ORIENTATION_COUNTER_CLOCKWISE;
 	} else if (p_prev->prev == p_next) {
-		return CLOCKWISE;
+		return ORIENTATION_CLOCKWISE;
 	} else {
-		return NONE;
+		return ORIENTATION_NONE;
 	}
 }
 
@@ -1176,7 +1176,7 @@ ConvexHullInternal::Edge *ConvexHullInternal::find_max_angle(bool p_ccw, const V
 					} else if ((cmp = cot.compare(p_min_cot)) < 0) {
 						p_min_cot = cot;
 						min_edge = e;
-					} else if ((cmp == 0) && (p_ccw == (get_orientation(min_edge, e, p_s, t) == COUNTER_CLOCKWISE))) {
+					} else if ((cmp == 0) && (p_ccw == (get_orientation(min_edge, e, p_s, t) == ORIENTATION_COUNTER_CLOCKWISE))) {
 						min_edge = e;
 					}
 				}
@@ -1375,7 +1375,7 @@ void ConvexHullInternal::merge(IntermediateHull &p_h0, IntermediateHull &p_h1) {
 				int64_t dot = (*e->target - *c0).dot(normal);
 				CHULL_ASSERT(dot <= 0);
 				if ((dot == 0) && ((*e->target - *c0).dot(t) > 0)) {
-					if (!start0 || (get_orientation(start0, e, s, Point32(0, 0, -1)) == CLOCKWISE)) {
+					if (!start0 || (get_orientation(start0, e, s, Point32(0, 0, -1)) == ORIENTATION_CLOCKWISE)) {
 						start0 = e;
 					}
 				}
@@ -1390,7 +1390,7 @@ void ConvexHullInternal::merge(IntermediateHull &p_h0, IntermediateHull &p_h1) {
 				int64_t dot = (*e->target - *c1).dot(normal);
 				CHULL_ASSERT(dot <= 0);
 				if ((dot == 0) && ((*e->target - *c1).dot(t) > 0)) {
-					if (!start1 || (get_orientation(start1, e, s, Point32(0, 0, -1)) == COUNTER_CLOCKWISE)) {
+					if (!start1 || (get_orientation(start1, e, s, Point32(0, 0, -1)) == ORIENTATION_COUNTER_CLOCKWISE)) {
 						start1 = e;
 					}
 				}

+ 6 - 4
core/math/math_funcs.h

@@ -74,11 +74,13 @@ public:
 	static _ALWAYS_INLINE_ double tanh(double p_x) { return ::tanh(p_x); }
 	static _ALWAYS_INLINE_ float tanh(float p_x) { return ::tanhf(p_x); }
 
-	static _ALWAYS_INLINE_ double asin(double p_x) { return ::asin(p_x); }
-	static _ALWAYS_INLINE_ float asin(float p_x) { return ::asinf(p_x); }
+	// Always does clamping so always safe to use.
+	static _ALWAYS_INLINE_ double asin(double p_x) { return p_x < -1 ? (-Math_PI / 2) : (p_x > 1 ? (Math_PI / 2) : ::asin(p_x)); }
+	static _ALWAYS_INLINE_ float asin(float p_x) { return p_x < -1 ? (-Math_PI / 2) : (p_x > 1 ? (Math_PI / 2) : ::asinf(p_x)); }
 
-	static _ALWAYS_INLINE_ double acos(double p_x) { return ::acos(p_x); }
-	static _ALWAYS_INLINE_ float acos(float p_x) { return ::acosf(p_x); }
+	// Always does clamping so always safe to use.
+	static _ALWAYS_INLINE_ double acos(double p_x) { return p_x < -1 ? Math_PI : (p_x > 1 ? 0 : ::acos(p_x)); }
+	static _ALWAYS_INLINE_ float acos(float p_x) { return p_x < -1 ? Math_PI : (p_x > 1 ? 0 : ::acosf(p_x)); }
 
 	static _ALWAYS_INLINE_ double atan(double p_x) { return ::atan(p_x); }
 	static _ALWAYS_INLINE_ float atan(float p_x) { return ::atanf(p_x); }

+ 2 - 1
core/math/quaternion.cpp

@@ -35,7 +35,8 @@
 
 real_t Quaternion::angle_to(const Quaternion &p_to) const {
 	real_t d = dot(p_to);
-	return Math::acos(CLAMP(d * d * 2 - 1, -1, 1));
+	// acos does clamping.
+	return Math::acos(d * d * 2 - 1);
 }
 
 Vector3 Quaternion::get_euler(EulerOrder p_order) const {

+ 8 - 8
core/math/static_raycaster.h

@@ -59,15 +59,15 @@ public:
 
 		/*! Constructs a ray from origin, direction, and ray segment. Near
 		 *  has to be smaller than far. */
-		_FORCE_INLINE_ Ray(const Vector3 &org,
-				const Vector3 &dir,
-				float tnear = 0.0f,
-				float tfar = INFINITY) :
-				org(org),
-				tnear(tnear),
-				dir(dir),
+		_FORCE_INLINE_ Ray(const Vector3 &p_org,
+				const Vector3 &p_dir,
+				float p_tnear = 0.0f,
+				float p_tfar = INFINITY) :
+				org(p_org),
+				tnear(p_tnear),
+				dir(p_dir),
 				time(0.0f),
-				tfar(tfar),
+				tfar(p_tfar),
 				mask(-1),
 				u(0.0),
 				v(0.0),

+ 4 - 4
core/os/time.cpp

@@ -382,10 +382,10 @@ String Time::get_time_string_from_system(bool p_utc) const {
 
 Dictionary Time::get_time_zone_from_system() const {
 	OS::TimeZoneInfo info = OS::get_singleton()->get_time_zone_info();
-	Dictionary timezone;
-	timezone["bias"] = info.bias;
-	timezone["name"] = info.name;
-	return timezone;
+	Dictionary ret_timezone;
+	ret_timezone["bias"] = info.bias;
+	ret_timezone["name"] = info.name;
+	return ret_timezone;
 }
 
 double Time::get_unix_time_from_system() const {

+ 3 - 12
core/templates/local_vector.h

@@ -59,11 +59,7 @@ public:
 
 	_FORCE_INLINE_ void push_back(T p_elem) {
 		if (unlikely(count == capacity)) {
-			if (capacity == 0) {
-				capacity = 1;
-			} else {
-				capacity <<= 1;
-			}
+			capacity = tight ? (capacity + 1) : MAX((U)1, capacity << 1);
 			data = (T *)memrealloc(data, capacity * sizeof(T));
 			CRASH_COND_MSG(!data, "Out of memory");
 		}
@@ -87,7 +83,7 @@ public:
 	}
 
 	/// Removes the item copying the last value into the position of the one to
-	/// remove. It's generally faster than `remove`.
+	/// remove. It's generally faster than `remove_at`.
 	void remove_at_unordered(U p_index) {
 		ERR_FAIL_INDEX(p_index, count);
 		count--;
@@ -143,12 +139,7 @@ public:
 			count = p_size;
 		} else if (p_size > count) {
 			if (unlikely(p_size > capacity)) {
-				if (capacity == 0) {
-					capacity = 1;
-				}
-				while (capacity < p_size) {
-					capacity <<= 1;
-				}
+				capacity = tight ? p_size : nearest_power_of_2_templated(p_size);
 				data = (T *)memrealloc(data, capacity * sizeof(T));
 				CRASH_COND_MSG(!data, "Out of memory");
 			}

+ 2 - 2
doc/classes/@GlobalScope.xml

@@ -65,7 +65,7 @@
 			<return type="float" />
 			<param index="0" name="x" type="float" />
 			<description>
-				Returns the arc cosine of [param x] in radians. Use to get the angle of cosine [param x]. [param x] must be between [code]-1.0[/code] and [code]1.0[/code] (inclusive), otherwise, [method acos] will return [constant @GDScript.NAN].
+				Returns the arc cosine of [param x] in radians. Use to get the angle of cosine [param x]. [param x] will be clamped between [code]-1.0[/code] and [code]1.0[/code] (inclusive), in order to prevent [method acos] from returning [constant @GDScript.NAN].
 				[codeblock]
 				# c is 0.523599 or 30 degrees if converted with rad_to_deg(c)
 				var c = acos(0.866025)
@@ -76,7 +76,7 @@
 			<return type="float" />
 			<param index="0" name="x" type="float" />
 			<description>
-				Returns the arc sine of [param x] in radians. Use to get the angle of sine [param x]. [param x] must be between [code]-1.0[/code] and [code]1.0[/code] (inclusive), otherwise, [method asin] will return [constant @GDScript.NAN].
+				Returns the arc sine of [param x] in radians. Use to get the angle of sine [param x]. [param x] will be clamped between [code]-1.0[/code] and [code]1.0[/code] (inclusive), in order to prevent [method asin] from returning [constant @GDScript.NAN].
 				[codeblock]
 				# s is 0.523599 or 30 degrees if converted with rad_to_deg(s)
 				var s = asin(0.5)

+ 23 - 3
doc/classes/AudioStreamGenerator.xml

@@ -1,16 +1,36 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="AudioStreamGenerator" inherits="AudioStream" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
-		Audio stream that generates sounds procedurally.
+		An audio stream with utilities for procedural sound generation.
 	</brief_description>
 	<description>
-		This audio stream does not play back sounds, but expects a script to generate audio data for it instead. See also [AudioStreamGeneratorPlayback].
+		[AudioStreamGenerator] is a type of audio stream that does not play back sounds on its own; instead, it expects a script to generate audio data for it. See also [AudioStreamGeneratorPlayback].
+		Here's a sample on how to use it to generate a sine wave:
+		[codeblock]
+		var playback # Will hold the AudioStreamGeneratorPlayback.
+		@onready var sample_hz = $AudioStreamPlayer.stream.mix_rate
+		var pulse_hz = 440.0 # The frequency of the sound wave.
+
+		func _ready():
+		    $AudioStreamPlayer.play()
+		    playback = $AudioStreamPlayer.get_stream_playback()
+		    fill_buffer()
+
+		func fill_buffer():
+		    var phase = 0.0
+		    var increment = pulse_hz / sample_hz
+		    var frames_available = playback.get_frames_available()
+
+		    for i in range(frames_available):
+		        playback.push_frame(Vector2.ONE * sin(phase * TAU))
+		        phase = fmod(phase + increment, 1.0)
+		[/codeblock]
+		In the example above, the "AudioStreamPlayer" node must use an [AudioStreamGenerator] as its stream. The [code]fill_buffer[/code] function provides audio data for approximating a sine wave.
 		See also [AudioEffectSpectrumAnalyzer] for performing real-time audio spectrum analysis.
 		[b]Note:[/b] Due to performance constraints, this class is best used from C# or from a compiled language via GDExtension. If you still want to use this class from GDScript, consider using a lower [member mix_rate] such as 11,025 Hz or 22,050 Hz.
 	</description>
 	<tutorials>
 		<link title="Audio Generator Demo">https://godotengine.org/asset-library/asset/526</link>
-		<link title="Godot 3.2 will get new audio features">https://godotengine.org/article/godot-32-will-get-new-audio-features</link>
 	</tutorials>
 	<members>
 		<member name="buffer_length" type="float" setter="set_buffer_length" getter="get_buffer_length" default="0.5">

+ 2 - 2
doc/classes/BaseMaterial3D.xml

@@ -356,13 +356,13 @@
 			[b]Note:[/b] [member specular_mode] only applies to the specular blob. It does not affect specular reflections from the sky, screen-space reflections, [VoxelGI], SDFGI or [ReflectionProbe]s. To disable reflections from these sources as well, set [member metallic_specular] to [code]0.0[/code] instead.
 		</member>
 		<member name="subsurf_scatter_enabled" type="bool" setter="set_feature" getter="get_feature" default="false">
-			If [code]true[/code], subsurface scattering is enabled. Emulates light that penetrates an object's surface, is scattered, and then emerges.
+			If [code]true[/code], subsurface scattering is enabled. Emulates light that penetrates an object's surface, is scattered, and then emerges. Subsurface scattering quality is controlled by [member ProjectSettings.rendering/environment/subsurface_scattering/subsurface_scattering_quality].
 		</member>
 		<member name="subsurf_scatter_skin_mode" type="bool" setter="set_flag" getter="get_flag" default="false">
 			If [code]true[/code], subsurface scattering will use a special mode optimized for the color and density of human skin, such as boosting the intensity of the red channel in subsurface scattering.
 		</member>
 		<member name="subsurf_scatter_strength" type="float" setter="set_subsurface_scattering_strength" getter="get_subsurface_scattering_strength" default="0.0">
-			The strength of the subsurface scattering effect.
+			The strength of the subsurface scattering effect. The depth of the effect is also controlled by [member ProjectSettings.rendering/environment/subsurface_scattering/subsurface_scattering_scale], which is set globally.
 		</member>
 		<member name="subsurf_scatter_texture" type="Texture2D" setter="set_texture" getter="get_texture">
 			Texture used to control the subsurface scattering strength. Stored in the red texture channel. Multiplied by [member subsurf_scatter_strength].

+ 7 - 6
doc/classes/CanvasItem.xml

@@ -237,7 +237,7 @@
 			<param index="2" name="uvs" type="PackedVector2Array" default="PackedVector2Array()" />
 			<param index="3" name="texture" type="Texture2D" default="null" />
 			<description>
-				Draws a solid polygon of any number of points, convex or concave. Unlike [method draw_colored_polygon], each point's color can be changed individually. See also [method draw_polyline] and [method draw_polyline_colors].
+				Draws a solid polygon of any number of points, convex or concave. Unlike [method draw_colored_polygon], each point's color can be changed individually. See also [method draw_polyline] and [method draw_polyline_colors]. If you need more flexibility (such as being able to use bones), use [method RenderingServer.canvas_item_add_triangle_array] instead.
 			</description>
 		</method>
 		<method name="draw_polyline">
@@ -279,7 +279,7 @@
 			<param index="2" name="filled" type="bool" default="true" />
 			<param index="3" name="width" type="float" default="-1.0" />
 			<description>
-				Draws a rectangle. If [param filled] is [code]true[/code], the rectangle will be filled with the [param color] specified. If [param filled] is [code]false[/code], the rectangle will be drawn as a stroke with the [param color] and [param width] specified.
+				Draws a rectangle. If [param filled] is [code]true[/code], the rectangle will be filled with the [param color] specified. If [param filled] is [code]false[/code], the rectangle will be drawn as a stroke with the [param color] and [param width] specified. See also [method draw_texture_rect].
 				If [param width] is negative, then two-point primitives will be drawn instead of a four-point ones. This means that when the CanvasItem is scaled, the lines will remain thin. If this behavior is not desired, then pass a positive [param width] like [code]1.0[/code].
 				[b]Note:[/b] [param width] is only effective if [param filled] is [code]false[/code].
 				[b]Note:[/b] Unfilled rectangles drawn with a negative [param width] may not display perfectly. For example, corners may be missing or brighter due to overlapping lines (for a translucent [param color]).
@@ -380,7 +380,7 @@
 			<param index="3" name="modulate" type="Color" default="Color(1, 1, 1, 1)" />
 			<param index="4" name="transpose" type="bool" default="false" />
 			<description>
-				Draws a textured rectangle at a given position, optionally modulated by a color. If [param transpose] is [code]true[/code], the texture will have its X and Y coordinates swapped.
+				Draws a textured rectangle at a given position, optionally modulated by a color. If [param transpose] is [code]true[/code], the texture will have its X and Y coordinates swapped. See also [method draw_rect] and [method draw_texture_rect_region].
 			</description>
 		</method>
 		<method name="draw_texture_rect_region">
@@ -392,7 +392,7 @@
 			<param index="4" name="transpose" type="bool" default="false" />
 			<param index="5" name="clip_uv" type="bool" default="true" />
 			<description>
-				Draws a textured rectangle region at a given position, optionally modulated by a color. If [param transpose] is [code]true[/code], the texture will have its X and Y coordinates swapped.
+				Draws a textured rectangle from a texture's region (specified by [param src_rect]) at a given position, optionally modulated by a color. If [param transpose] is [code]true[/code], the texture will have its X and Y coordinates swapped. See also [method draw_texture_rect].
 			</description>
 		</method>
 		<method name="force_update_transform">
@@ -423,6 +423,7 @@
 			<return type="Vector2" />
 			<description>
 				Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is in using the coordinate system of the [CanvasLayer].
+				[b]Note:[/b] For screen-space coordinates (e.g. when using a non-embedded [Popup]), you can use [method DisplayServer.mouse_get_position].
 			</description>
 		</method>
 		<method name="get_global_transform" qualifiers="const">
@@ -502,7 +503,7 @@
 		<method name="is_visible_in_tree" qualifiers="const">
 			<return type="bool" />
 			<description>
-				Returns [code]true[/code] if the node is present in the [SceneTree], its [member visible] property is [code]true[/code] and all its antecedents are also visible. If any antecedent is hidden, this node will not be visible in the scene tree, and is consequently not drawn (see [method _draw]).
+				Returns [code]true[/code] if the node is present in the [SceneTree], its [member visible] property is [code]true[/code] and all its ancestors are also visible. If any ancestor is hidden, this node will not be visible in the scene tree, and is consequently not drawn (see [method _draw]).
 			</description>
 		</method>
 		<method name="make_canvas_position_local" qualifiers="const">
@@ -597,7 +598,7 @@
 			The rendering layer in which this [CanvasItem] is rendered by [Viewport] nodes. A [Viewport] will render a [CanvasItem] if it and all its parents share a layer with the [Viewport]'s canvas cull mask.
 		</member>
 		<member name="visible" type="bool" setter="set_visible" getter="is_visible" default="true">
-			If [code]true[/code], this [CanvasItem] is drawn. The node is only visible if all of its antecedents are visible as well (in other words, [method is_visible_in_tree] must return [code]true[/code]).
+			If [code]true[/code], this [CanvasItem] is drawn. The node is only visible if all of its ancestors are visible as well (in other words, [method is_visible_in_tree] must return [code]true[/code]).
 			[b]Note:[/b] For controls that inherit [Popup], the correct way to make them visible is to call one of the multiple [code]popup*()[/code] functions instead.
 		</member>
 		<member name="y_sort_enabled" type="bool" setter="set_y_sort_enabled" getter="is_y_sort_enabled" default="false">

+ 1 - 1
doc/classes/CodeEdit.xml

@@ -537,7 +537,7 @@
 			Marks the option as a member.
 		</constant>
 		<constant name="KIND_ENUM" value="5" enum="CodeCompletionKind">
-			Marks the option as a enum entry.
+			Marks the option as an enum entry.
 		</constant>
 		<constant name="KIND_CONSTANT" value="6" enum="CodeCompletionKind">
 			Marks the option as a constant.

+ 1 - 0
doc/classes/Control.xml

@@ -209,6 +209,7 @@
 			<return type="void" />
 			<description>
 				Marks an input event as handled. Once you accept an input event, it stops propagating, even to nodes listening to [method Node._unhandled_input] or [method Node._unhandled_key_input].
+				[b]Note:[/b] This does not affect the methods in [Input], only the way events are propagated.
 			</description>
 		</method>
 		<method name="add_theme_color_override">

+ 1 - 1
doc/classes/CurveTexture.xml

@@ -15,7 +15,7 @@
 		</member>
 		<member name="resource_local_to_scene" type="bool" setter="set_local_to_scene" getter="is_local_to_scene" overrides="Resource" default="false" />
 		<member name="texture_mode" type="int" setter="set_texture_mode" getter="get_texture_mode" enum="CurveTexture.TextureMode" default="0">
-			The format the texture should be generated with. When passing a CurveTexture as a input to a [Shader], this may need to be adjusted.
+			The format the texture should be generated with. When passing a CurveTexture as an input to a [Shader], this may need to be adjusted.
 		</member>
 		<member name="width" type="int" setter="set_width" getter="get_width" default="256">
 			The width of the texture (in pixels). Higher values make it possible to represent high-frequency data better (such as sudden direction changes), at the cost of increased generation time and memory usage.

+ 1 - 1
doc/classes/Decal.xml

@@ -107,7 +107,7 @@
 		<member name="texture_orm" type="Texture2D" setter="set_texture" getter="get_texture">
 			[Texture2D] storing ambient occlusion, roughness, and metallic for the decal. Use this to add extra detail to decals.
 			[b]Note:[/b] Unlike [BaseMaterial3D] whose filter mode can be adjusted on a per-material basis, the filter mode for [Decal] textures is set globally with [member ProjectSettings.rendering/textures/decals/filter].
-			[b]Note:[/b] Setting this texture alone will not result in a visible decal, as [member texture_albedo] must also be set. To create a ORM-only decal, load an albedo texture into [member texture_albedo] and set [member albedo_mix] to [code]0.0[/code]. The albedo texture's alpha channel will be used to determine where the underlying surface's ORM map should be overridden (and its intensity).
+			[b]Note:[/b] Setting this texture alone will not result in a visible decal, as [member texture_albedo] must also be set. To create an ORM-only decal, load an albedo texture into [member texture_albedo] and set [member albedo_mix] to [code]0.0[/code]. The albedo texture's alpha channel will be used to determine where the underlying surface's ORM map should be overridden (and its intensity).
 		</member>
 		<member name="upper_fade" type="float" setter="set_upper_fade" getter="get_upper_fade" default="0.3">
 			Sets the curve over which the decal will fade as the surface gets further from the center of the [AABB]. Only positive values are valid (negative values will be clamped to [code]0.0[/code]). See also [member lower_fade].

+ 1 - 0
doc/classes/DirAccess.xml

@@ -173,6 +173,7 @@
 			<description>
 				Returns a [PackedStringArray] containing filenames of the directory contents, excluding directories. The array is sorted alphabetically.
 				Affected by [member include_hidden].
+				[b]Note:[/b] When used on a [code]res://[/code] path in an exported project, only the files actually included in the PCK at the given folder level are returned. In practice, this means that since imported resources are stored in a top-level [code].godot/[/code] folder, only paths to [code]*.gd[/code] and [code]*.import[/code] files are returned (plus a few files such as [code]project.godot[/code] or [code]project.binary[code] and the project icon). In an exported project, the list of returned files will also vary depending on whether [member ProjectSettings.editor/export/convert_text_resources_to_binary] is [code]true[/code].
 			</description>
 		</method>
 		<method name="get_files_at" qualifiers="static">

+ 6 - 6
doc/classes/DisplayServer.xml

@@ -462,7 +462,7 @@
 			<param index="0" name="menu_root" type="String" />
 			<param index="1" name="idx" type="int" />
 			<description>
-				Returns number of states of an multistate item. See [method global_menu_add_multistate_item] for details.
+				Returns number of states of a multistate item. See [method global_menu_add_multistate_item] for details.
 				[b]Note:[/b] This method is implemented on macOS.
 			</description>
 		</method>
@@ -471,7 +471,7 @@
 			<param index="0" name="menu_root" type="String" />
 			<param index="1" name="idx" type="int" />
 			<description>
-				Returns the state of an multistate item. See [method global_menu_add_multistate_item] for details.
+				Returns the state of a multistate item. See [method global_menu_add_multistate_item] for details.
 				[b]Note:[/b] This method is implemented on macOS.
 			</description>
 		</method>
@@ -648,7 +648,7 @@
 			<param index="1" name="idx" type="int" />
 			<param index="2" name="max_states" type="int" />
 			<description>
-				Sets number of state of an multistate item. See [method global_menu_add_multistate_item] for details.
+				Sets number of state of a multistate item. See [method global_menu_add_multistate_item] for details.
 				[b]Note:[/b] This method is implemented on macOS.
 			</description>
 		</method>
@@ -669,7 +669,7 @@
 			<param index="1" name="idx" type="int" />
 			<param index="2" name="state" type="int" />
 			<description>
-				Sets the state of an multistate item. See [method global_menu_add_multistate_item] for details.
+				Sets the state of a multistate item. See [method global_menu_add_multistate_item] for details.
 				[b]Note:[/b] This method is implemented on macOS.
 			</description>
 		</method>
@@ -815,7 +815,7 @@
 		<method name="mouse_get_position" qualifiers="const">
 			<return type="Vector2i" />
 			<description>
-				Returns the mouse cursor's current position.
+				Returns the mouse cursor's current position in screen coordinates.
 			</description>
 		</method>
 		<method name="mouse_set_mode">
@@ -1694,7 +1694,7 @@
 			[b]Note:[/b] Regardless of the platform, enabling full screen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling full screen mode.
 		</constant>
 		<constant name="WINDOW_FLAG_RESIZE_DISABLED" value="0" enum="WindowFlags">
-			The window can't be resizing by dragging its resize grip. It's still possible to resize the window using [method window_set_size]. This flag is ignored for full screen windows.
+			The window can't be resized by dragging its resize grip. It's still possible to resize the window using [method window_set_size]. This flag is ignored for full screen windows.
 		</constant>
 		<constant name="WINDOW_FLAG_BORDERLESS" value="1" enum="WindowFlags">
 			The window do not have native title bar and other decorations. This flag is ignored for full-screen windows.

+ 2 - 2
doc/classes/EditorSettings.xml

@@ -295,7 +295,7 @@
 			If [code]true[/code], render the grid on an XZ plane.
 		</member>
 		<member name="editors/3d/grid_yz_plane" type="bool" setter="" getter="">
-			If [code]true[/code], render the grid on an YZ plane. This can be useful for 3D side-scrolling games.
+			If [code]true[/code], render the grid on a YZ plane. This can be useful for 3D side-scrolling games.
 		</member>
 		<member name="editors/3d/navigation/emulate_3_button_mouse" type="bool" setter="" getter="">
 			If [code]true[/code], enables 3-button mouse emulation mode. This is useful on laptops when using a trackpad.
@@ -695,7 +695,7 @@
 			If [code]true[/code], colors the background of the line the caret is currently on with [member text_editor/theme/highlighting/current_line_color].
 		</member>
 		<member name="text_editor/appearance/caret/type" type="int" setter="" getter="">
-			The shape of the caret to use in the script editor. [b]Line[/b] displays a vertical line to the left of the current character, whereas [b]Block[/b] displays a outline over the current character.
+			The shape of the caret to use in the script editor. [b]Line[/b] displays a vertical line to the left of the current character, whereas [b]Block[/b] displays an outline over the current character.
 		</member>
 		<member name="text_editor/appearance/guidelines/line_length_guideline_hard_column" type="int" setter="" getter="">
 			The column at which to display a subtle line as a line length guideline for scripts. This should generally be greater than [member text_editor/appearance/guidelines/line_length_guideline_soft_column].

+ 1 - 1
doc/classes/FontFile.xml

@@ -12,7 +12,7 @@
 		- Bitmap font importer: AngelCode BMFont (.fnt, .font), text and binary (version 3) format variants.
 		- Monospace image font importer: All supported image formats.
 		[b]Note:[/b] A character is a symbol that represents an item (letter, digit etc.) in an abstract way.
-		[b]Note:[/b] A glyph is a bitmap or shape used to draw a one or more characters in a context-dependent manner. Glyph indices are bound to the specific font data source.
+		[b]Note:[/b] A glyph is a bitmap or shape used to draw one or more characters in a context-dependent manner. Glyph indices are bound to the specific font data source.
 		[b]Note:[/b] If a none of the font data sources contain glyphs for a character used in a string, the character in question will be replaced with a box displaying its hexadecimal code.
 		[codeblocks]
 		[gdscript]

+ 1 - 1
doc/classes/GPUParticlesCollisionHeightField3D.xml

@@ -50,7 +50,7 @@
 			Represents the size of the [enum Resolution] enum.
 		</constant>
 		<constant name="UPDATE_MODE_WHEN_MOVED" value="0" enum="UpdateMode">
-			Only update the heightmap when the [GPUParticlesCollisionHeightField3D] node is moved, or when the camera moves if [member follow_camera_enabled] is [code]true[/code]. An update can be forced by slightly moving the [GPUParticlesCollisionHeightField3D] in any direction.
+			Only update the heightmap when the [GPUParticlesCollisionHeightField3D] node is moved, or when the camera moves if [member follow_camera_enabled] is [code]true[/code]. An update can be forced by slightly moving the [GPUParticlesCollisionHeightField3D] in any direction, or by calling [method RenderingServer.particles_collision_height_field_update].
 		</constant>
 		<constant name="UPDATE_MODE_ALWAYS" value="1" enum="UpdateMode">
 			Update the heightmap every frame. This has a significant performance cost. This update should only be used when geometry that particles can collide with changes significantly during gameplay.

+ 4 - 3
doc/classes/GeometryInstance3D.xml

@@ -33,7 +33,7 @@
 			The selected shadow casting flag. See [enum ShadowCastingSetting] for possible values.
 		</member>
 		<member name="custom_aabb" type="AABB" setter="set_custom_aabb" getter="get_custom_aabb" default="AABB(0, 0, 0, 0, 0, 0)">
-			Overrides the bounding box of this node with a custom one. This can be used to avoid the expensive [AABB] recalculation that happens when a skeleton is used with a [MeshInstance3D] or to have fine control over the [MeshInstance3D]'s bounding box. To remove this, set value to an [AABB] with all fields set to zero.
+			Overrides the bounding box of this node with a custom one. This can be used to avoid the expensive [AABB] recalculation that happens when a skeleton is used with a [MeshInstance3D] or to have fine control over the [MeshInstance3D]'s bounding box. To use the default AABB, set value to an [AABB] with all fields set to [code]0.0[/code]. To avoid frustum culling, set [member custom_aabb] to a very large AABB that covers your entire game world such as [code]AABB(-10000, -10000, -10000, 20000, 20000, 20000)[/code]. To disable all forms of culling (including occlusion culling), call [method RenderingServer.instance_set_ignore_culling] on the [GeometryInstance3D]'s [RID].
 		</member>
 		<member name="extra_cull_margin" type="float" setter="set_extra_cull_margin" getter="get_extra_cull_margin" default="0.0">
 			The extra distance added to the GeometryInstance3D's bounding box ([AABB]) to increase its cull box.
@@ -47,6 +47,7 @@
 		</member>
 		<member name="ignore_occlusion_culling" type="bool" setter="set_ignore_occlusion_culling" getter="is_ignoring_occlusion_culling" default="false">
 			If [code]true[/code], disables occlusion culling for this instance. Useful for gizmos that must be rendered even when occlusion culling is in use.
+			[b]Note:[/b] [member ignore_occlusion_culling] does not affect frustum culling (which is what happens when an object is not visible given the camera's angle). To avoid frustum culling, set [member custom_aabb] to a very large AABB that covers your entire game world such as [code]AABB(-10000, -10000, -10000, 20000, 20000, 20000)[/code].
 		</member>
 		<member name="lod_bias" type="float" setter="set_lod_bias" getter="get_lod_bias" default="1.0">
 			Changes how quickly the mesh transitions to a lower level of detail. A value of 0 will force the mesh to its lowest level of detail, a value of 1 will use the default settings, and larger values will keep the mesh in a higher level of detail at farther distances.
@@ -70,14 +71,14 @@
 		</member>
 		<member name="visibility_range_begin_margin" type="float" setter="set_visibility_range_begin_margin" getter="get_visibility_range_begin_margin" default="0.0">
 			Margin for the [member visibility_range_begin] threshold. The GeometryInstance3D will only change its visibility state when it goes over or under the [member visibility_range_begin] threshold by this amount.
-			If [member visibility_range_fade_mode] is [constant VISIBILITY_RANGE_FADE_DISABLED], this acts as an hysteresis distance. If [member visibility_range_fade_mode] is [constant VISIBILITY_RANGE_FADE_SELF] or [constant VISIBILITY_RANGE_FADE_DEPENDENCIES], this acts as a fade transition distance and must be set to a value greater than [code]0.0[/code] for the effect to be noticeable.
+			If [member visibility_range_fade_mode] is [constant VISIBILITY_RANGE_FADE_DISABLED], this acts as a hysteresis distance. If [member visibility_range_fade_mode] is [constant VISIBILITY_RANGE_FADE_SELF] or [constant VISIBILITY_RANGE_FADE_DEPENDENCIES], this acts as a fade transition distance and must be set to a value greater than [code]0.0[/code] for the effect to be noticeable.
 		</member>
 		<member name="visibility_range_end" type="float" setter="set_visibility_range_end" getter="get_visibility_range_end" default="0.0">
 			Distance from which the GeometryInstance3D will be hidden, taking [member visibility_range_end_margin] into account as well. The default value of 0 is used to disable the range check.
 		</member>
 		<member name="visibility_range_end_margin" type="float" setter="set_visibility_range_end_margin" getter="get_visibility_range_end_margin" default="0.0">
 			Margin for the [member visibility_range_end] threshold. The GeometryInstance3D will only change its visibility state when it goes over or under the [member visibility_range_end] threshold by this amount.
-			If [member visibility_range_fade_mode] is [constant VISIBILITY_RANGE_FADE_DISABLED], this acts as an hysteresis distance. If [member visibility_range_fade_mode] is [constant VISIBILITY_RANGE_FADE_SELF] or [constant VISIBILITY_RANGE_FADE_DEPENDENCIES], this acts as a fade transition distance and must be set to a value greater than [code]0.0[/code] for the effect to be noticeable.
+			If [member visibility_range_fade_mode] is [constant VISIBILITY_RANGE_FADE_DISABLED], this acts as a hysteresis distance. If [member visibility_range_fade_mode] is [constant VISIBILITY_RANGE_FADE_SELF] or [constant VISIBILITY_RANGE_FADE_DEPENDENCIES], this acts as a fade transition distance and must be set to a value greater than [code]0.0[/code] for the effect to be noticeable.
 		</member>
 		<member name="visibility_range_fade_mode" type="int" setter="set_visibility_range_fade_mode" getter="get_visibility_range_fade_mode" enum="GeometryInstance3D.VisibilityRangeFadeMode" default="0">
 			Controls which instances will be faded when approaching the limits of the visibility range. See [enum VisibilityRangeFadeMode] for possible values.

+ 1 - 0
doc/classes/Input.xml

@@ -5,6 +5,7 @@
 	</brief_description>
 	<description>
 		A singleton that deals with inputs. This includes key presses, mouse buttons and movement, joypads, and input actions. Actions and their events can be set in the [b]Input Map[/b] tab in the [b]Project &gt; Project Settings[/b], or with the [InputMap] class.
+		[b]Note:[/b] The methods here reflect the global input state and are not affected by [method Control.accept_event] or [method Viewport.set_input_as_handled], which only deal with the way input is propagated in the [SceneTree].
 	</description>
 	<tutorials>
 		<link title="Inputs documentation index">$DOCS_URL/tutorials/inputs/index.html</link>

+ 1 - 1
doc/classes/Light3D.xml

@@ -204,7 +204,7 @@
 			Light is taken into account in static baking ([VoxelGI], [LightmapGI], SDFGI ([member Environment.sdfgi_enabled])). The light can be moved around or modified, but its global illumination will not update in real-time. This is suitable for subtle changes (such as flickering torches), but generally not large changes such as toggling a light on and off.
 		</constant>
 		<constant name="BAKE_DYNAMIC" value="2" enum="BakeMode">
-			Light is taken into account in dynamic baking ([VoxelGI] and SDFGI ([member Environment.sdfgi_enabled]) only). The light can be moved around or modified with global illumination updating in real-time. The light's global illumination appearance will be slightly different compared to [constant BAKE_STATIC]. This has a greater performance cost compared to [constant BAKE_STATIC].
+			Light is taken into account in dynamic baking ([VoxelGI] and SDFGI ([member Environment.sdfgi_enabled]) only). The light can be moved around or modified with global illumination updating in real-time. The light's global illumination appearance will be slightly different compared to [constant BAKE_STATIC]. This has a greater performance cost compared to [constant BAKE_STATIC]. When using SDFGI, the update speed of dynamic lights is affected by [member ProjectSettings.rendering/global_illumination/sdfgi/frames_to_update_lights].
 		</constant>
 	</constants>
 </class>

+ 19 - 1
doc/classes/MultiplayerPeerExtension.xml

@@ -49,6 +49,18 @@
 				Called when a packet needs to be received by the [MultiplayerAPI], with [param r_buffer_size] being the size of the binary [param r_buffer] in bytes.
 			</description>
 		</method>
+		<method name="_get_packet_channel" qualifiers="virtual const">
+			<return type="int" />
+			<description>
+				Called to get the channel over which the next available packet was received. See [method MultiplayerPeer.get_packet_channel].
+			</description>
+		</method>
+		<method name="_get_packet_mode" qualifiers="virtual const">
+			<return type="int" enum="MultiplayerPeer.TransferMode" />
+			<description>
+				Called to get the [enum MultiplayerPeer.TransferMode] the remote peer used to send the next available packet. See [method MultiplayerPeer.get_packet_mode].
+			</description>
+		</method>
 		<method name="_get_packet_peer" qualifiers="virtual const">
 			<return type="int" />
 			<description>
@@ -76,7 +88,7 @@
 		<method name="_get_unique_id" qualifiers="virtual const">
 			<return type="int" />
 			<description>
-				Called when the unique ID of this [MultiplayerPeer] is requested (see [method MultiplayerPeer.get_unique_id]).
+				Called when the unique ID of this [MultiplayerPeer] is requested (see [method MultiplayerPeer.get_unique_id]). The value must be between [code]1[/code] and [code]2147483647[/code].
 			</description>
 		</method>
 		<method name="_is_refusing_new_connections" qualifiers="virtual const">
@@ -91,6 +103,12 @@
 				Called when the "is server" status is requested on the [MultiplayerAPI]. See [method MultiplayerAPI.is_server].
 			</description>
 		</method>
+		<method name="_is_server_relay_supported" qualifiers="virtual const">
+			<return type="bool" />
+			<description>
+				Called to check if the server can act as a relay in the current configuration. See [method MultiplayerPeer.is_server_relay_supported].
+			</description>
+		</method>
 		<method name="_poll" qualifiers="virtual">
 			<return type="void" />
 			<description>

+ 7 - 0
doc/classes/Node.xml

@@ -500,6 +500,13 @@
 				Returns [code]true[/code] if the local system is the multiplayer authority of this node.
 			</description>
 		</method>
+		<method name="is_node_ready" qualifiers="const">
+			<return type="bool" />
+			<description>
+				Returns [code]true[/code] if the node is ready, i.e. it's inside scene tree and all its children are initialized.
+				[method request_ready] resets it back to [code]false[/code].
+			</description>
+		</method>
 		<method name="is_physics_processing" qualifiers="const">
 			<return type="bool" />
 			<description>

+ 2 - 2
doc/classes/Node3D.xml

@@ -105,7 +105,7 @@
 		<method name="is_visible_in_tree" qualifiers="const">
 			<return type="bool" />
 			<description>
-				Returns [code]true[/code] if the node is present in the [SceneTree], its [member visible] property is [code]true[/code] and all its antecedents are also visible. If any antecedent is hidden, this node will not be visible in the scene tree.
+				Returns [code]true[/code] if the node is present in the [SceneTree], its [member visible] property is [code]true[/code] and all its ancestors are also visible. If any ancestor is hidden, this node will not be visible in the scene tree.
 			</description>
 		</method>
 		<method name="look_at">
@@ -315,7 +315,7 @@
 			Defines the visibility range parent for this node and its subtree. The visibility parent must be a GeometryInstance3D. Any visual instance will only be visible if the visibility parent (and all of its visibility ancestors) is hidden by being closer to the camera than its own [member GeometryInstance3D.visibility_range_begin]. Nodes hidden via the [member Node3D.visible] property are essentially removed from the visibility dependency tree, so dependent instances will not take the hidden node or its ancestors into account.
 		</member>
 		<member name="visible" type="bool" setter="set_visible" getter="is_visible" default="true">
-			If [code]true[/code], this node is drawn. The node is only visible if all of its antecedents are visible as well (in other words, [method is_visible_in_tree] must return [code]true[/code]).
+			If [code]true[/code], this node is drawn. The node is only visible if all of its ancestors are visible as well (in other words, [method is_visible_in_tree] must return [code]true[/code]).
 		</member>
 	</members>
 	<signals>

+ 3 - 3
doc/classes/OS.xml

@@ -91,7 +91,7 @@
 			<param index="3" name="read_stderr" type="bool" default="false" />
 			<param index="4" name="open_console" type="bool" default="false" />
 			<description>
-				Executes a command. The file specified in [param path] must exist and be executable. Platform path resolution will be used. The [param arguments] are used in the given order and separated by a space. If an [param output] [Array] is provided, the complete shell output of the process will be appended as a single [String] element in [param output]. If [param read_stderr] is [code]true[/code], the output to the standard error stream will be included too.
+				Executes a command. The file specified in [param path] must exist and be executable. Platform path resolution will be used. The [param arguments] are used in the given order, separated by spaces, and wrapped in quotes. If an [param output] [Array] is provided, the complete shell output of the process will be appended as a single [String] element in [param output]. If [param read_stderr] is [code]true[/code], the output to the standard error stream will be included too.
 				On Windows, if [param open_console] is [code]true[/code] and the process is a console app, a new terminal window will be opened. This is ignored on other platforms.
 				If the command is successfully executed, the method will return the exit code of the command, or [code]-1[/code] if it fails.
 				[b]Note:[/b] The Godot thread will pause its execution until the executed command terminates. Use [Thread] to create a separate thread that will not pause the Godot thread, or use [method create_process] to create a completely independent process.
@@ -416,7 +416,7 @@
 			<description>
 				Returns an array of the system substitute font file paths, which are similar to the font with [param font_name] and style for the specified text, locale and script. Returns empty array if no matching fonts found.
 				The following aliases can be used to request default fonts: "sans-serif", "serif", "monospace", "cursive", and "fantasy".
-				[b]Note:[/b] Depending on OS, it's not guaranteed that any of the returned fonts is suitable for rendering specified text. Fonts should be loaded and checked in the order they are returned, and the first suitable one used.
+				[b]Note:[/b] Depending on OS, it's not guaranteed that any of the returned fonts will be suitable for rendering specified text. Fonts should be loaded and checked in the order they are returned, and the first suitable one used.
 				[b]Note:[/b] Returned fonts might have different style if the requested style is not available or belong to a different font family.
 				[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and Windows.
 			</description>
@@ -471,7 +471,7 @@
 		<method name="get_video_adapter_driver_info" qualifiers="const">
 			<return type="PackedStringArray" />
 			<description>
-				Returns the video adapter driver name and version for the user's currently active graphics card.
+				Returns the video adapter driver name and version for the user's currently active graphics card. See also [method RenderingServer.get_video_adapter_api_version].
 				The first element holds the driver name, such as [code]nvidia[/code], [code]amdgpu[/code], etc.
 				The second element holds the driver version. For e.g. the [code]nvidia[/code] driver on a Linux/BSD platform, the version is in the format [code]510.85.02[/code]. For Windows, the driver's format is [code]31.0.15.1659[/code].
 				[b]Note:[/b] This method is only supported on the platforms Linux/BSD and Windows when not running in headless mode. It returns an empty array on other platforms.

+ 6 - 5
doc/classes/ParticleProcessMaterial.xml

@@ -282,7 +282,8 @@
 			Minimum equivalent of [member tangential_accel_max].
 		</member>
 		<member name="turbulence_enabled" type="bool" setter="set_turbulence_enabled" getter="get_turbulence_enabled" default="false">
-			Enables and disables Turbulence for the particle system.
+			If [code]true[/code], enables turbulence for the particle system. Turbulence can be used to vary particle movement according to its position (based on a 3D noise pattern).
+			[b]Note:[/b] Enabling turbulence has a high performance cost on the GPU. Only enable turbulence on a few particle systems at once at most, and consider disabling it when targeting mobile/web platforms.
 		</member>
 		<member name="turbulence_influence_max" type="float" setter="set_param_max" getter="get_param_max" default="0.1">
 			Maximum turbulence influence on each particle.
@@ -296,11 +297,11 @@
 			Each particle's amount of turbulence will be influenced along this [CurveTexture] over its life time.
 		</member>
 		<member name="turbulence_initial_displacement_max" type="float" setter="set_param_max" getter="get_param_max" default="0.0">
-			Maximum displacement of each particles spawn position by the turbulence.
+			Maximum displacement of each particle's spawn position by the turbulence.
 			The actual amount of displacement will be a factor of the underlying turbulence multiplied by a random value between [member turbulence_initial_displacement_min] and [member turbulence_initial_displacement_max].
 		</member>
 		<member name="turbulence_initial_displacement_min" type="float" setter="set_param_min" getter="get_param_min" default="0.0">
-			Minimum displacement of each particles spawn position by the turbulence.
+			Minimum displacement of each particle's spawn position by the turbulence.
 			The actual amount of displacement will be a factor of the underlying turbulence multiplied by a random value between [member turbulence_initial_displacement_min] and [member turbulence_initial_displacement_max].
 		</member>
 		<member name="turbulence_noise_scale" type="float" setter="set_turbulence_noise_scale" getter="get_turbulence_noise_scale" default="9.0">
@@ -312,10 +313,10 @@
 			A value of [code]Vector3(0.0, 0.0, 0.0)[/code] will freeze the turbulence pattern in place.
 		</member>
 		<member name="turbulence_noise_speed_random" type="float" setter="set_turbulence_noise_speed_random" getter="get_turbulence_noise_speed_random" default="0.0">
-			Use to influence the noise speed in a random pattern. This helps to break up visible movement patterns.
+			Use to influence the noise speed in a random pattern. This helps break up visible movement patterns.
 		</member>
 		<member name="turbulence_noise_strength" type="float" setter="set_turbulence_noise_strength" getter="get_turbulence_noise_strength" default="1.0">
-			The turbulence noise strength. Increasing this will result in a stronger, more contrasting, noise pattern.
+			The turbulence noise strength. Increasing this will result in a stronger, more contrasting noise pattern.
 		</member>
 	</members>
 	<constants>

+ 44 - 14
doc/classes/ProjectSettings.xml

@@ -731,7 +731,8 @@
 			Changing this value allows setting up a multi-project scenario where there are multiple [code].csproj[/code]. Keep in mind that the Godot project is considered one of the C# projects in the workspace and it's root directory should contain the [code]project.godot[/code] and [code].csproj[/code] next to each other.
 		</member>
 		<member name="editor/export/convert_text_resources_to_binary" type="bool" setter="" getter="" default="true">
-			If [code]true[/code] text resources are converted to binary format on export.
+			If [code]true[/code], text resources are converted to a binary format on export. This decreases file sizes and speeds up loading slightly.
+			[b]Note:[/b] If [member editor/export/convert_text_resources_to_binary] is [code]true[/code], [method @GDScript.load] will not be able to return the converted files in an exported project. Some file paths within the exported PCK will also change, such as [code]project.godot[/code] becoming [code]project.binary[/code]. If you rely on run-time loading of files present within the PCK, set [member editor/export/convert_text_resources_to_binary] to [code]false[/code].
 		</member>
 		<member name="editor/import/reimport_missing_imported_files" type="bool" setter="" getter="" default="true">
 		</member>
@@ -821,6 +822,7 @@
 			Default value for [member ScrollContainer.scroll_deadzone], which will be used for all [ScrollContainer]s unless overridden.
 		</member>
 		<member name="gui/common/snap_controls_to_pixels" type="bool" setter="" getter="" default="true">
+			If [code]true[/code], snaps [Control] node vertices to the nearest pixel to ensure they remain crisp even when the camera moves or zooms.
 		</member>
 		<member name="gui/common/swap_cancel_ok" type="bool" setter="" getter="">
 			If [code]true[/code], swaps [b]Cancel[/b] and [b]OK[/b] buttons in dialogs on Windows and UWP to follow interface conventions. [method DisplayServer.get_swap_cancel_ok] can be used to query whether buttons are swapped at run-time.
@@ -1952,23 +1954,34 @@
 			[b]Note:[/b] Only [member physics/common/max_physics_steps_per_frame] physics ticks may be simulated per rendered frame at most. If more physics ticks have to be simulated per rendered frame to keep up with rendering, the project will appear to slow down (even if [code]delta[/code] is used consistently in physics calculations). Therefore, it is recommended to also increase [member physics/common/max_physics_steps_per_frame] if increasing [member physics/common/physics_ticks_per_second] significantly above its default value.
 		</member>
 		<member name="rendering/2d/sdf/oversize" type="int" setter="" getter="" default="1">
+			Controls how much of the original viewport size should be covered by the 2D signed distance field. This SDF can be sampled in [CanvasItem] shaders and is used for [GPUParticles2D] collision. Higher values allow portions of occluders located outside the viewport to still be taken into account in the generated signed distance field, at the cost of performance. If you notice particles falling through [LightOccluder2D]s as the occluders leave the viewport, increase this setting.
+			The percentage specified is added on each axis and on both sides. For example, with the default setting of 120%, the signed distance field will cover 20% of the viewport's size outside the viewport on each side (top, right, bottom, left).
+			[b]Note:[/b] This property is only read when the project starts. To change the 2D SDF oversizing percentage at runtime, use [method RenderingServer.viewport_set_sdf_oversize_and_scale] instead.
 		</member>
 		<member name="rendering/2d/sdf/scale" type="int" setter="" getter="" default="1">
+			The resolution scale to use for the 2D signed distance field. Higher values lead to a more precise and more stable signed distance field as the camera moves, at the cost of performance. The default value (50%) renders at half the resolution of the viewport size on each axis, which means the SDF is generated with 25% of the viewport's pixel count.
+			[b]Note:[/b] This property is only read when the project starts. To change the 2D SDF resolution scale at runtime, use [method RenderingServer.viewport_set_sdf_oversize_and_scale] instead.
 		</member>
 		<member name="rendering/2d/shadow_atlas/size" type="int" setter="" getter="" default="2048">
+			The size of the 2D shadow atlas in pixels. Higher values result in more precise [Light2D] shadows, at the cost of performance and video memory usage. The specified value is rounded up to the nearest power of 2.
+			[b]Note:[/b] This property is only read when the project starts. To change the 2D shadow atlas size at runtime, use [method RenderingServer.canvas_set_shadow_texture_size] instead.
 		</member>
 		<member name="rendering/2d/snap/snap_2d_transforms_to_pixel" type="bool" setter="" getter="" default="false">
-			If [code]true[/code], [CanvasItem] nodes will internally snap to full pixels. Their position can still be sub-pixel, but the decimals will not have effect.
+			If [code]true[/code], [CanvasItem] nodes will internally snap to full pixels. Their position can still be sub-pixel, but the decimals will not have effect. This can lead to a crisper appearance at the cost of less smooth movement, especially when [Camera2D] smoothing is enabled.
+			[b]Note:[/b] This property is only read when the project starts. To toggle 2D transform snapping at runtime, use [method RenderingServer.viewport_set_snap_2d_transforms_to_pixel] on the root [Viewport] instead.
+			[b]Note:[/b] [Control] nodes are snapped to the nearest pixel by default. This is controlled by [member gui/common/snap_controls_to_pixels].
 		</member>
 		<member name="rendering/2d/snap/snap_2d_vertices_to_pixel" type="bool" setter="" getter="" default="false">
-			If [code]true[/code], vertices of [CanvasItem] nodes will snap to full pixels. Only affects the final vertex positions, not the transforms.
+			If [code]true[/code], vertices of [CanvasItem] nodes will snap to full pixels. Only affects the final vertex positions, not the transforms. This can lead to a crisper appearance at the cost of less smooth movement, especially when [Camera2D] smoothing is enabled.
+			[b]Note:[/b] This property is only read when the project starts. To toggle 2D vertex snapping at runtime, use [method RenderingServer.viewport_set_snap_2d_vertices_to_pixel] on the root [Viewport] instead.
+			[b]Note:[/b] [Control] nodes are snapped to the nearest pixel by default. This is controlled by [member gui/common/snap_controls_to_pixels].
 		</member>
 		<member name="rendering/anti_aliasing/quality/msaa_2d" type="int" setter="" getter="" default="0">
-			Sets the number of MSAA samples to use for 2D/Canvas rendering (as a power of two). MSAA is used to reduce aliasing around the edges of polygons. A higher MSAA value results in smoother edges but can be significantly slower on some hardware. This has no effect on shader-induced aliasing or texture aliasing.
+			Sets the number of MSAA samples to use for 2D/Canvas rendering (as a power of two). MSAA is used to reduce aliasing around the edges of polygons. A higher MSAA value results in smoother edges but can be significantly slower on some hardware, especially integrated graphics due to their limited memory bandwidth. This has no effect on shader-induced aliasing or texture aliasing.
 			[b]Note:[/b] MSAA is only supported in the Forward+ and Mobile rendering methods, not Compatibility.
 		</member>
 		<member name="rendering/anti_aliasing/quality/msaa_3d" type="int" setter="" getter="" default="0">
-			Sets the number of MSAA samples to use for 3D rendering (as a power of two). MSAA is used to reduce aliasing around the edges of polygons. A higher MSAA value results in smoother edges but can be significantly slower on some hardware. See also bilinear scaling 3d [member rendering/scaling_3d/mode] for supersampling, which provides higher quality but is much more expensive. This has no effect on shader-induced aliasing or texture aliasing.
+			Sets the number of MSAA samples to use for 3D rendering (as a power of two). MSAA is used to reduce aliasing around the edges of polygons. A higher MSAA value results in smoother edges but can be significantly slower on some hardware, especially integrated graphics due to their limited memory bandwidth. See also [member rendering/scaling_3d/mode] for supersampling, which provides higher quality but is much more expensive. This has no effect on shader-induced aliasing or texture aliasing.
 			[b]Note:[/b] MSAA is only supported in the Forward+ and Mobile rendering methods, not Compatibility.
 		</member>
 		<member name="rendering/anti_aliasing/quality/screen_space_aa" type="int" setter="" getter="" default="0">
@@ -1987,12 +2000,15 @@
 			[b]Note:[/b] TAA is only supported in the Forward+ rendering method, not Mobile or Compatibility.
 		</member>
 		<member name="rendering/anti_aliasing/screen_space_roughness_limiter/amount" type="float" setter="" getter="" default="0.25">
+			[b]Note:[/b] This property is only read when the project starts. To control the screen-space roughness limiter at runtime, call [method RenderingServer.screen_space_roughness_limiter_set_active] instead.
 		</member>
 		<member name="rendering/anti_aliasing/screen_space_roughness_limiter/enabled" type="bool" setter="" getter="" default="true">
 			If [code]true[/code], enables a spatial filter to limit roughness in areas with high-frequency detail. This can help reduce specular aliasing to an extent, though not as much as enabling [member rendering/anti_aliasing/quality/use_taa]. This filter has a small performance cost, so consider disabling it if it doesn't benefit your scene noticeably.
-			[b]Note:[/b] TAA is only supported in the Forward+ and Mobile rendering methods, not Compatibility.
+			[b]Note:[/b] The screen-space roughness limiter is only supported in the Forward+ and Mobile rendering methods, not Compatibility.
+			[b]Note:[/b] This property is only read when the project starts. To control the screen-space roughness limiter at runtime, call [method RenderingServer.screen_space_roughness_limiter_set_active] instead.
 		</member>
 		<member name="rendering/anti_aliasing/screen_space_roughness_limiter/limit" type="float" setter="" getter="" default="0.18">
+			[b]Note:[/b] This property is only read when the project starts. To control the screen-space roughness limiter at runtime, call [method RenderingServer.screen_space_roughness_limiter_set_active] instead.
 		</member>
 		<member name="rendering/camera/depth_of_field/depth_of_field_bokeh_quality" type="int" setter="" getter="" default="1">
 			Sets the quality of the depth of field effect. Higher quality takes more samples, which is slower but looks smoother.
@@ -2065,13 +2081,16 @@
 			Sets the quality of the screen-space indirect lighting effect. Higher values take more samples and so will result in better quality, at the cost of performance. Setting to [code]Ultra[/code] will use the [member rendering/environment/ssil/adaptive_target] setting.
 		</member>
 		<member name="rendering/environment/subsurface_scattering/subsurface_scattering_depth_scale" type="float" setter="" getter="" default="0.01">
-			Scales the depth over which the subsurface scattering effect is applied. A high value may allow light to scatter into a part of the mesh or another mesh that is close in screen space but far in depth.
+			Scales the depth over which the subsurface scattering effect is applied. A high value may allow light to scatter into a part of the mesh or another mesh that is close in screen space but far in depth. See also [member rendering/environment/subsurface_scattering/subsurface_scattering_scale].
+			[b]Note:[/b] This property is only read when the project starts. To set the subsurface scattering depth scale at runtime, call [method RenderingServer.sub_surface_scattering_set_scale] instead.
 		</member>
 		<member name="rendering/environment/subsurface_scattering/subsurface_scattering_quality" type="int" setter="" getter="" default="1">
-			Sets the quality of the subsurface scattering effect. Higher values are slower but look nicer.
+			Sets the quality of the subsurface scattering effect. Higher values are slower but look nicer. This affects the rendering of materials that have [member BaseMaterial3D.subsurf_scatter_enabled] set to [code]true[/code], along with [ShaderMaterial]s that set [code]SSS_STRENGTH[/code].
+			[b]Note:[/b] This property is only read when the project starts. To set the subsurface scattering quality at runtime, call [method RenderingServer.sub_surface_scattering_set_quality] instead.
 		</member>
 		<member name="rendering/environment/subsurface_scattering/subsurface_scattering_scale" type="float" setter="" getter="" default="0.05">
-			Scales the distance over which samples are taken for subsurface scattering effect. Changing this does not impact performance, but higher values will result in significant artifacts as the samples will become obviously spread out. A lower value results in a smaller spread of scattered light.
+			Scales the distance over which samples are taken for subsurface scattering effect. Changing this does not impact performance, but higher values will result in significant artifacts as the samples will become obviously spread out. A lower value results in a smaller spread of scattered light. See also [member rendering/environment/subsurface_scattering/subsurface_scattering_depth_scale].
+			[b]Note:[/b] This property is only read when the project starts. To set the subsurface scattering scale at runtime, call [method RenderingServer.sub_surface_scattering_set_scale] instead.
 		</member>
 		<member name="rendering/environment/volumetric_fog/use_filter" type="int" setter="" getter="" default="1">
 			Enables filtering of the volumetric fog effect prior to integration. This substantially blurs the fog which reduces fine details but also smooths out harsh edges and aliasing artifacts. Disable when more detail is required.
@@ -2111,12 +2130,21 @@
 			[b]Note:[/b] This property is only read when the project starts. To set half-resolution GI at run-time, call [method RenderingServer.gi_set_use_half_resolution] instead.
 		</member>
 		<member name="rendering/global_illumination/sdfgi/frames_to_converge" type="int" setter="" getter="" default="5">
+			The number of frames to use for converging signed distance field global illumination. Higher values lead to a less noisy result, at the cost of taking a longer time to fully converge. This means the scene's global illumination will be too dark for a longer period of time, especially when the camera moves fast. The actual convergence speed depends on rendered framerate. For example, with the default setting of 30 frames, rendering at 60 FPS will make SDFGI fully converge after 0.5 seconds. See also [member rendering/global_illumination/sdfgi/frames_to_update_lights] and [member rendering/global_illumination/sdfgi/probe_ray_count].
+			[b]Note:[/b] This property is only read when the project starts. To control SDFGI convergence speed at runtime, call [method RenderingServer.environment_set_sdfgi_frames_to_converge] instead.
 		</member>
 		<member name="rendering/global_illumination/sdfgi/frames_to_update_lights" type="int" setter="" getter="" default="2">
+			The number of frames over which dynamic lights should be updated in signed distance field global illumination. Higher values take more time to update indirect lighting coming from dynamic lights, but result in better performance when many dynamic lights are present. See also [member rendering/global_illumination/sdfgi/frames_to_converge] and [member rendering/global_illumination/sdfgi/probe_ray_count].
+			[b]Note:[/b] This only affects [Light3D] nodes whose [member Light3D.light_bake_mode] is [constant Light3D.BAKE_DYNAMIC] (which is the default). Consider making non-moving lights use the [constant Light3D.BAKE_STATIC] bake mode to improve performance.
+			[b]Note:[/b] This property is only read when the project starts. To control SDFGI light update speed at runtime, call [method RenderingServer.environment_set_sdfgi_frames_to_update_light] instead.
 		</member>
 		<member name="rendering/global_illumination/sdfgi/probe_ray_count" type="int" setter="" getter="" default="1">
+			The number of rays to throw per frame when computing signed distance field global illumination. Higher values lead to a less noisy result, at the cost of performance. See also [member rendering/global_illumination/sdfgi/frames_to_converge] and [member rendering/global_illumination/sdfgi/frames_to_update_lights].
+			[b]Note:[/b] This property is only read when the project starts. To control SDFGI quality at runtime, call [method RenderingServer.environment_set_sdfgi_ray_count] instead.
 		</member>
 		<member name="rendering/global_illumination/voxel_gi/quality" type="int" setter="" getter="" default="0">
+			The VoxelGI quality to use. High quality leads to more precise lighting and better reflections, but is slower to render. This setting does not affect the baked data and doesn't require baking the [VoxelGI] again to apply.
+			[b]Note:[/b] This property is only read when the project starts. To control VoxelGI quality at runtime, call [method RenderingServer.voxel_gi_set_quality] instead.
 		</member>
 		<member name="rendering/lightmapping/bake_performance/max_rays_per_pass" type="int" setter="" getter="" default="32">
 			The maximum number of rays that can be thrown per pass when baking lightmaps with [LightmapGI]. Depending on the scene, adjusting this value may result in higher GPU utilization when baking lightmaps, leading to faster bake times.
@@ -2158,10 +2186,10 @@
 			The framerate-independent update speed when representing dynamic object lighting from [LightmapProbe]s. Higher values make dynamic object lighting update faster. Higher values can prevent fast-moving objects from having "outdated" indirect lighting displayed on them, at the cost of possible flickering when an object moves from a bright area to a shaded area.
 		</member>
 		<member name="rendering/lights_and_shadows/directional_shadow/16_bits" type="bool" setter="" getter="" default="true">
-			Use 16 bits for shadow depth map. Enabling this results in shadows having less precision and may result in shadow acne, but can lead to performance improvements on some devices.
+			Use 16 bits for the directional shadow depth map. Enabling this results in shadows having less precision and may result in shadow acne, but can lead to performance improvements on some devices.
 		</member>
 		<member name="rendering/lights_and_shadows/directional_shadow/size" type="int" setter="" getter="" default="4096">
-			The directional shadow's size in pixels. Higher values will result in sharper shadows, at the cost of performance. The value will be rounded up to the nearest power of 2.
+			The directional shadow's size in pixels. Higher values will result in sharper shadows, at the cost of performance. The value is rounded up to the nearest power of 2.
 		</member>
 		<member name="rendering/lights_and_shadows/directional_shadow/size.mobile" type="int" setter="" getter="" default="2048">
 			Lower-end override for [member rendering/lights_and_shadows/directional_shadow/size] on mobile devices, due to performance concerns or driver support.
@@ -2175,7 +2203,7 @@
 			Lower-end override for [member rendering/lights_and_shadows/directional_shadow/soft_shadow_filter_quality] on mobile devices, due to performance concerns or driver support.
 		</member>
 		<member name="rendering/lights_and_shadows/positional_shadow/atlas_16_bits" type="bool" setter="" getter="" default="true">
-			Use 16 bits for shadow depth map. Enabling this results in shadows having less precision and may result in shadow acne, but can lead to performance improvements on some devices.
+			Use 16 bits for the omni/spot shadow depth map. Enabling this results in shadows having less precision and may result in shadow acne, but can lead to performance improvements on some devices.
 		</member>
 		<member name="rendering/lights_and_shadows/positional_shadow/atlas_quadrant_0_subdiv" type="int" setter="" getter="" default="2">
 			Subdivision quadrant size for shadow mapping. See shadow mapping documentation.
@@ -2239,10 +2267,12 @@
 			[b]Note:[/b] This property is only read when the project starts. To adjust the automatic LOD threshold at runtime, set [member Viewport.mesh_lod_threshold] on the root [Viewport].
 		</member>
 		<member name="rendering/occlusion_culling/bvh_build_quality" type="int" setter="" getter="" default="2">
-			The [url=https://en.wikipedia.org/wiki/Bounding_volume_hierarchy]BVH[/url] quality to use when rendering the occlusion culling buffer. Higher values will result in more accurate occlusion culling, at the cost of higher CPU usage.
+			The [url=https://en.wikipedia.org/wiki/Bounding_volume_hierarchy]Bounding Volume Hierarchy[/url] quality to use when rendering the occlusion culling buffer. Higher values will result in more accurate occlusion culling, at the cost of higher CPU usage. See also [member rendering/occlusion_culling/occlusion_rays_per_thread].
+			[b]Note:[/b] This property is only read when the project starts. To adjust the BVH build quality at runtime, use [method RenderingServer.viewport_set_occlusion_culling_build_quality].
 		</member>
 		<member name="rendering/occlusion_culling/occlusion_rays_per_thread" type="int" setter="" getter="" default="512">
-			Higher values will result in more accurate occlusion culling, at the cost of higher CPU usage. The occlusion culling buffer's pixel count is roughly equal to [code]occlusion_rays_per_thread * number_of_logical_cpu_cores[/code], so it will depend on the system's CPU. Therefore, CPUs with fewer cores will use a lower resolution to attempt keeping performance costs even across devices.
+			The number of occlusion rays traced per CPU thread. Higher values will result in more accurate occlusion culling, at the cost of higher CPU usage. The occlusion culling buffer's pixel count is roughly equal to [code]occlusion_rays_per_thread * number_of_logical_cpu_cores[/code], so it will depend on the system's CPU. Therefore, CPUs with fewer cores will use a lower resolution to attempt keeping performance costs even across devices. See also [member rendering/occlusion_culling/bvh_build_quality].
+			[b]Note:[/b] This property is only read when the project starts. To adjust the number of occlusion rays traced per thread at runtime, use [method RenderingServer.viewport_set_occlusion_rays_per_thread].
 		</member>
 		<member name="rendering/occlusion_culling/use_occlusion_culling" type="bool" setter="" getter="" default="false">
 			If [code]true[/code], [OccluderInstance3D] nodes will be usable for occlusion culling in 3D in the root viewport. In custom viewports, [member Viewport.use_occlusion_culling] must be set to [code]true[/code] instead.

+ 5 - 0
doc/classes/RDAttachmentFormat.xml

@@ -1,17 +1,22 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDAttachmentFormat" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Attachment format (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		This object is used by [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>
 	<members>
 		<member name="format" type="int" setter="set_format" getter="get_format" enum="RenderingDevice.DataFormat" default="36">
+			The attachment's data format.
 		</member>
 		<member name="samples" type="int" setter="set_samples" getter="get_samples" enum="RenderingDevice.TextureSamples" default="0">
+			The number of samples used when sampling the attachment.
 		</member>
 		<member name="usage_flags" type="int" setter="set_usage_flags" getter="get_usage_flags" default="0">
+			The attachment's usage flags, which determine what can be done with it.
 		</member>
 	</members>
 </class>

+ 4 - 2
doc/classes/RDFramebufferPass.xml

@@ -1,11 +1,12 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDFramebufferPass" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
-		Framebuffer pass attachment description.
+		Framebuffer pass attachment description (used by [RenderingDevice]).
 	</brief_description>
 	<description>
 		This class contains the list of attachment descriptions for a framebuffer pass. Each points with an index to a previously supplied list of texture attachments.
-		Multipass framebuffers can optimize some configurations in mobile, on desktop they provide little to no advantage.
+		Multipass framebuffers can optimize some configurations in mobile. On desktop, they provide little to no advantage.
+		This object is used by [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>
@@ -28,6 +29,7 @@
 	</members>
 	<constants>
 		<constant name="ATTACHMENT_UNUSED" value="-1">
+			Attachment is unused.
 		</constant>
 	</constants>
 </class>

+ 6 - 0
doc/classes/RDPipelineColorBlendState.xml

@@ -1,19 +1,25 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDPipelineColorBlendState" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Pipeline color blend state (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		This object is used by [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>
 	<members>
 		<member name="attachments" type="RDPipelineColorBlendStateAttachment[]" setter="set_attachments" getter="get_attachments" default="[]">
+			The attachments that are blended together.
 		</member>
 		<member name="blend_constant" type="Color" setter="set_blend_constant" getter="get_blend_constant" default="Color(0, 0, 0, 1)">
+			The constant color to blend with. See also [method RenderingDevice.draw_list_set_blend_constants].
 		</member>
 		<member name="enable_logic_op" type="bool" setter="set_enable_logic_op" getter="get_enable_logic_op" default="false">
+			If [code]true[/code], performs the logic operation defined in [member logic_op].
 		</member>
 		<member name="logic_op" type="int" setter="set_logic_op" getter="get_logic_op" enum="RenderingDevice.LogicOperation" default="0">
+			The logic operation to perform for blending. Only effective if [member enable_logic_op] is [code]true[/code].
 		</member>
 	</members>
 </class>

+ 70 - 0
doc/classes/RDPipelineColorBlendStateAttachment.xml

@@ -1,8 +1,66 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDPipelineColorBlendStateAttachment" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Pipeline color blend state attachment (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		Controls how blending between source and destination fragments is performed when using [RenderingDevice].
+		For reference, this is how common user-facing blend modes are implemented in Godot's 2D renderer:
+		[b]Mix:[/b]
+		[codeblock]
+		var attachment = RDPipelineColorBlendStateAttachment.new()
+		attachment.enable_blend = true
+		attachment.color_blend_op = RenderingDevice.BLEND_OP_ADD
+		attachment.src_color_blend_factor = RenderingDevice.BLEND_FACTOR_SRC_ALPHA
+		attachment.dst_color_blend_factor = RenderingDevice.BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
+		attachment.alpha_blend_op = RenderingDevice.BLEND_OP_ADD
+		attachment.src_alpha_blend_factor = RenderingDevice.BLEND_FACTOR_ONE
+		attachment.dst_alpha_blend_factor = RenderingDevice.BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
+		[/codeblock]
+		[b]Add:[/b]
+		[codeblock]
+		var attachment = RDPipelineColorBlendStateAttachment.new()
+		attachment.enable_blend = true
+		attachment.alpha_blend_op = RenderingDevice.BLEND_OP_ADD
+		attachment.color_blend_op = RenderingDevice.BLEND_OP_ADD
+		attachment.src_color_blend_factor = RenderingDevice.BLEND_FACTOR_SRC_ALPHA
+		attachment.dst_color_blend_factor = RenderingDevice.BLEND_FACTOR_ONE
+		attachment.src_alpha_blend_factor = RenderingDevice.BLEND_FACTOR_SRC_ALPHA
+		attachment.dst_alpha_blend_factor = RenderingDevice.BLEND_FACTOR_ONE
+		[/codeblock]
+		[b]Subtract:[/b]
+		[codeblock]
+		var attachment = RDPipelineColorBlendStateAttachment.new()
+		attachment.enable_blend = true
+		attachment.alpha_blend_op = RenderingDevice.BLEND_OP_SUBTRACT
+		attachment.color_blend_op = RenderingDevice.BLEND_OP_SUBTRACT
+		attachment.src_color_blend_factor = RenderingDevice.BLEND_FACTOR_SRC_ALPHA
+		attachment.dst_color_blend_factor = RenderingDevice.BLEND_FACTOR_ONE
+		attachment.src_alpha_blend_factor = RenderingDevice.BLEND_FACTOR_SRC_ALPHA
+		attachment.dst_alpha_blend_factor = RenderingDevice.BLEND_FACTOR_ONE
+		[/codeblock]
+		[b]Multiply:[/b]
+		[codeblock]
+		var attachment = RDPipelineColorBlendStateAttachment.new()
+		attachment.enable_blend = true
+		attachment.alpha_blend_op = RenderingDevice.BLEND_OP_ADD
+		attachment.color_blend_op = RenderingDevice.BLEND_OP_ADD
+		attachment.src_color_blend_factor = RenderingDevice.BLEND_FACTOR_DST_COLOR
+		attachment.dst_color_blend_factor = RenderingDevice.BLEND_FACTOR_ZERO
+		attachment.src_alpha_blend_factor = RenderingDevice.BLEND_FACTOR_DST_ALPHA
+		attachment.dst_alpha_blend_factor = RenderingDevice.BLEND_FACTOR_ZERO
+		[/codeblock]
+		[b]Pre-multiplied alpha:[/b]
+		[codeblock]
+		var attachment = RDPipelineColorBlendStateAttachment.new()
+		attachment.enable_blend = true
+		attachment.alpha_blend_op = RenderingDevice.BLEND_OP_ADD
+		attachment.color_blend_op = RenderingDevice.BLEND_OP_ADD
+		attachment.src_color_blend_factor = RenderingDevice.BLEND_FACTOR_ONE
+		attachment.dst_color_blend_factor = RenderingDevice.BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
+		attachment.src_alpha_blend_factor = RenderingDevice.BLEND_FACTOR_ONE
+		attachment.dst_alpha_blend_factor = RenderingDevice.BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
+		[/codeblock]
 	</description>
 	<tutorials>
 	</tutorials>
@@ -10,31 +68,43 @@
 		<method name="set_as_mix">
 			<return type="void" />
 			<description>
+				Convenience method to perform standard mix blending with straight (non-premultiplied) alpha. This sets [member enable_blend] to [code]true[/code], [member src_color_blend_factor] to [constant RenderingDevice.BLEND_FACTOR_SRC_ALPHA], [member dst_color_blend_factor] to [constant RenderingDevice.BLEND_FACTOR_ONE_MINUS_SRC_ALPHA], [member src_alpha_blend_factor] to [constant RenderingDevice.BLEND_FACTOR_SRC_ALPHA] and [member dst_alpha_blend_factor] to [constant RenderingDevice.BLEND_FACTOR_ONE_MINUS_SRC_ALPHA].
 			</description>
 		</method>
 	</methods>
 	<members>
 		<member name="alpha_blend_op" type="int" setter="set_alpha_blend_op" getter="get_alpha_blend_op" enum="RenderingDevice.BlendOperation" default="0">
+			The blend mode to use for the alpha channel.
 		</member>
 		<member name="color_blend_op" type="int" setter="set_color_blend_op" getter="get_color_blend_op" enum="RenderingDevice.BlendOperation" default="0">
+			The blend mode to use for the red/green/blue color channels.
 		</member>
 		<member name="dst_alpha_blend_factor" type="int" setter="set_dst_alpha_blend_factor" getter="get_dst_alpha_blend_factor" enum="RenderingDevice.BlendFactor" default="0">
+			Controls how the blend factor for the alpha channel is determined based on the destination's fragments.
 		</member>
 		<member name="dst_color_blend_factor" type="int" setter="set_dst_color_blend_factor" getter="get_dst_color_blend_factor" enum="RenderingDevice.BlendFactor" default="0">
+			Controls how the blend factor for the color channels is determined based on the destination's fragments.
 		</member>
 		<member name="enable_blend" type="bool" setter="set_enable_blend" getter="get_enable_blend" default="false">
+			If [code]true[/code], performs blending between the source and destination according to the factors defined in [member src_color_blend_factor], [member dst_color_blend_factor], [member src_alpha_blend_factor] and [member dst_alpha_blend_factor]. The blend modes [member color_blend_op] and [member alpha_blend_op] are also taken into account, with [member write_r], [member write_g], [member write_b] and [member write_a] controlling the output.
 		</member>
 		<member name="src_alpha_blend_factor" type="int" setter="set_src_alpha_blend_factor" getter="get_src_alpha_blend_factor" enum="RenderingDevice.BlendFactor" default="0">
+			Controls how the blend factor for the alpha channel is determined based on the source's fragments.
 		</member>
 		<member name="src_color_blend_factor" type="int" setter="set_src_color_blend_factor" getter="get_src_color_blend_factor" enum="RenderingDevice.BlendFactor" default="0">
+			Controls how the blend factor for the color channels is determined based on the source's fragments.
 		</member>
 		<member name="write_a" type="bool" setter="set_write_a" getter="get_write_a" default="true">
+			If [code]true[/code], writes the new alpha channel to the final result.
 		</member>
 		<member name="write_b" type="bool" setter="set_write_b" getter="get_write_b" default="true">
+			If [code]true[/code], writes the new blue color channel to the final result.
 		</member>
 		<member name="write_g" type="bool" setter="set_write_g" getter="get_write_g" default="true">
+			If [code]true[/code], writes the new green color channel to the final result.
 		</member>
 		<member name="write_r" type="bool" setter="set_write_r" getter="get_write_r" default="true">
+			If [code]true[/code], writes the new red color channel to the final result.
 		</member>
 	</members>
 </class>

+ 3 - 0
doc/classes/RDPipelineDepthStencilState.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDPipelineDepthStencilState" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Pipeline depth/stencil state (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		[RDPipelineDepthStencilState] controls the way depth and stencil comparisons are performed when sampling those values using [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>
@@ -30,6 +32,7 @@
 		<member name="enable_depth_range" type="bool" setter="set_enable_depth_range" getter="get_enable_depth_range" default="false">
 		</member>
 		<member name="enable_depth_test" type="bool" setter="set_enable_depth_test" getter="get_enable_depth_test" default="false">
+			If [code]true[/code], enables depth testing which allows objects to be automatically occluded by other objects based on their depth. This also allows objects to be partially occluded by other objects. If [code]false[/code], objects will appear in the order they were drawn (like in Godot's 2D renderer).
 		</member>
 		<member name="enable_depth_write" type="bool" setter="set_enable_depth_write" getter="get_enable_depth_write" default="false">
 		</member>

+ 8 - 0
doc/classes/RDPipelineMultisampleState.xml

@@ -1,23 +1,31 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDPipelineMultisampleState" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Pipeline multisample state (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		[RDPipelineMultisampleState] is used to control how multisample or supersample antialiasing is being performed when rendering using [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>
 	<members>
 		<member name="enable_alpha_to_coverage" type="bool" setter="set_enable_alpha_to_coverage" getter="get_enable_alpha_to_coverage" default="false">
+			If [code]true[/code], alpha to coverage is enabled. This generates a temporary coverage value based on the alpha component of the fragment's first color output. This allows alpha transparency to make use of multisample antialiasing.
 		</member>
 		<member name="enable_alpha_to_one" type="bool" setter="set_enable_alpha_to_one" getter="get_enable_alpha_to_one" default="false">
+			If [code]true[/code], alpha is forced to either [code]0.0[/code] or [code]1.0[/code]. This allows hardening the edges of antialiased alpha transparencies. Only relevant if [member enable_alpha_to_coverage] is [code]true[/code].
 		</member>
 		<member name="enable_sample_shading" type="bool" setter="set_enable_sample_shading" getter="get_enable_sample_shading" default="false">
+			If [code]true[/code], enables per-sample shading which replaces MSAA by SSAA. This provides higher quality antialiasing that works with transparent (alpha scissor) edges. This has a very high performance cost. See also [member min_sample_shading]. See the [url=https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#primsrast-sampleshading]per-sample shading Vulkan documentation[/url] for more details.
 		</member>
 		<member name="min_sample_shading" type="float" setter="set_min_sample_shading" getter="get_min_sample_shading" default="0.0">
+			The multiplier of [member sample_count] that determines how many samples are performed for each fragment. Must be between [code]0.0[/code] and [code]1.0[/code] (inclusive). Only effective if [member enable_sample_shading] is [code]true[/code]. If [member min_sample_shading] is [code]1.0[/code], fragment invocation must only read from the coverage index sample. Tile image access must not be used if [member enable_sample_shading] is [i]not[/i] [code]1.0[/code].
 		</member>
 		<member name="sample_count" type="int" setter="set_sample_count" getter="get_sample_count" enum="RenderingDevice.TextureSamples" default="0">
+			The number of MSAA samples (or SSAA samples if [member enable_sample_shading] is [code]true[/code]) to perform. Higher values result in better antialiasing, at the cost of performance.
 		</member>
 		<member name="sample_masks" type="int[]" setter="set_sample_masks" getter="get_sample_masks" default="[]">
+			The sampleSee the [url=https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#fragops-samplemask]sample mask Vulkan documentation[/url] for more details.
 		</member>
 	</members>
 </class>

+ 8 - 0
doc/classes/RDPipelineRasterizationState.xml

@@ -1,13 +1,16 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDPipelineRasterizationState" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Pipeline rasterization state (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		This object is used by [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>
 	<members>
 		<member name="cull_mode" type="int" setter="set_cull_mode" getter="get_cull_mode" enum="RenderingDevice.PolygonCullMode" default="0">
+			The cull mode to use when drawing polygons, which determines whether front faces or backfaces are hidden.
 		</member>
 		<member name="depth_bias_clamp" type="float" setter="set_depth_bias_clamp" getter="get_depth_bias_clamp" default="0.0">
 		</member>
@@ -18,16 +21,21 @@
 		<member name="depth_bias_slope_factor" type="float" setter="set_depth_bias_slope_factor" getter="get_depth_bias_slope_factor" default="0.0">
 		</member>
 		<member name="discard_primitives" type="bool" setter="set_discard_primitives" getter="get_discard_primitives" default="false">
+			If [code]true[/code], primitives are discarded immediately before the rasterization stage.
 		</member>
 		<member name="enable_depth_clamp" type="bool" setter="set_enable_depth_clamp" getter="get_enable_depth_clamp" default="false">
 		</member>
 		<member name="front_face" type="int" setter="set_front_face" getter="get_front_face" enum="RenderingDevice.PolygonFrontFace" default="0">
+			The winding order to use to determine which face of a triangle is considered its front face.
 		</member>
 		<member name="line_width" type="float" setter="set_line_width" getter="get_line_width" default="1.0">
+			THe line width to use when drawing lines (in pixels). Thick lines may not be supported on all hardware.
 		</member>
 		<member name="patch_control_points" type="int" setter="set_patch_control_points" getter="get_patch_control_points" default="1">
+			The number of control points to use when drawing a patch with tessellation enabled. Higher values result in higher quality at the cost of performance.
 		</member>
 		<member name="wireframe" type="bool" setter="set_wireframe" getter="get_wireframe" default="false">
+			If [code]true[/code], performs wireframe rendering for triangles instead of flat or textured rendering.
 		</member>
 	</members>
 </class>

+ 5 - 0
doc/classes/RDPipelineSpecializationConstant.xml

@@ -1,15 +1,20 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDPipelineSpecializationConstant" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Pipeline specialization constant (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		A [i]specialization constant[/i] is a way to create additional variants of shaders without actually increasing the number of shader versions that are compiled. This allows improving performance by reducing the number of shader versions and reducing [code]if[/code] branching, while still allowing shaders to be flexible for different use cases.
+		This object is used by [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>
 	<members>
 		<member name="constant_id" type="int" setter="set_constant_id" getter="get_constant_id" default="0">
+			The identifier of the specialization constant. This is a value starting from [code]0[/code] and that increments for every different specialization constant for a given shader.
 		</member>
 		<member name="value" type="Variant" setter="set_value" getter="get_value">
+			The specialization constant's value. Only [bool], [int] and [float] types are valid for specialization constants.
 		</member>
 	</members>
 </class>

+ 16 - 0
doc/classes/RDSamplerState.xml

@@ -1,41 +1,57 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDSamplerState" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Sampler state (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		This object is used by [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>
 	<members>
 		<member name="anisotropy_max" type="float" setter="set_anisotropy_max" getter="get_anisotropy_max" default="1.0">
+			Maximum anisotropy that can be used when sampling. Only effective if [member use_anisotropy] is [code]true[/code]. Higher values result in a sharper sampler at oblique angles, at the cost of performance (due to memory bandwidth). This value may be limited by the graphics hardware in use. Most graphics hardware only supports values up to [code]16.0[/code].
+			If [member anisotropy_max] is [code]1.0[/code], forcibly disables anisotropy even if [member use_anisotropy] is [code]true[/code].
 		</member>
 		<member name="border_color" type="int" setter="set_border_color" getter="get_border_color" enum="RenderingDevice.SamplerBorderColor" default="2">
+			The border color that will be returned when sampling outside the sampler's bounds and the [member repeat_u], [member repeat_v] or [member repeat_w] modes have repeating disabled.
 		</member>
 		<member name="compare_op" type="int" setter="set_compare_op" getter="get_compare_op" enum="RenderingDevice.CompareOperator" default="7">
+			The compare operation to use. Only effective if [member enable_compare] is [code]true[/code].
 		</member>
 		<member name="enable_compare" type="bool" setter="set_enable_compare" getter="get_enable_compare" default="false">
+			If [code]true[/code], returned values will be based on the comparison operation defined in [member compare_op]. This is a hardware-based approach and is therefore faster than performing this manually in a shader. For example, compare operations are used for shadow map rendering by comparing depth values from a shadow sampler.
 		</member>
 		<member name="lod_bias" type="float" setter="set_lod_bias" getter="get_lod_bias" default="0.0">
+			The mipmap LOD bias to use. Positive values will make the sampler blurrier at a given distance, while negative values will make the sampler sharper at a given distance (at the risk of looking grainy). Recommended values are between [code]-0.5[/code] and [code]0.0[/code]. Only effective if the sampler has mipmaps available.
 		</member>
 		<member name="mag_filter" type="int" setter="set_mag_filter" getter="get_mag_filter" enum="RenderingDevice.SamplerFilter" default="0">
+			The sampler's magnification filter.
 		</member>
 		<member name="max_lod" type="float" setter="set_max_lod" getter="get_max_lod" default="1e+20">
+			The maximum mipmap LOD bias to display (lowest resolution). Only effective if the sampler has mipmaps available.
 		</member>
 		<member name="min_filter" type="int" setter="set_min_filter" getter="get_min_filter" enum="RenderingDevice.SamplerFilter" default="0">
 		</member>
 		<member name="min_lod" type="float" setter="set_min_lod" getter="get_min_lod" default="0.0">
+			The minimum mipmap LOD bias to display (highest resolution). Only effective if the sampler has mipmaps available.
 		</member>
 		<member name="mip_filter" type="int" setter="set_mip_filter" getter="get_mip_filter" enum="RenderingDevice.SamplerFilter" default="0">
+			The filtering method to use for mipmaps.
 		</member>
 		<member name="repeat_u" type="int" setter="set_repeat_u" getter="get_repeat_u" enum="RenderingDevice.SamplerRepeatMode" default="2">
+			The repeat mode to use along the U axis of UV coordinates. This affects the returned values if sampling outside the UV bounds.
 		</member>
 		<member name="repeat_v" type="int" setter="set_repeat_v" getter="get_repeat_v" enum="RenderingDevice.SamplerRepeatMode" default="2">
+			The repeat mode to use along the V axis of UV coordinates. This affects the returned values if sampling outside the UV bounds.
 		</member>
 		<member name="repeat_w" type="int" setter="set_repeat_w" getter="get_repeat_w" enum="RenderingDevice.SamplerRepeatMode" default="2">
+			The repeat mode to use along the W axis of UV coordinates. This affects the returned values if sampling outside the UV bounds. Only effective for 3D samplers.
 		</member>
 		<member name="unnormalized_uvw" type="bool" setter="set_unnormalized_uvw" getter="get_unnormalized_uvw" default="false">
 		</member>
 		<member name="use_anisotropy" type="bool" setter="set_use_anisotropy" getter="get_use_anisotropy" default="false">
+			If [code]true[/code], perform anisotropic sampling. See [member anisotropy_max].
 		</member>
 	</members>
 </class>

+ 7 - 0
doc/classes/RDShaderFile.xml

@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDShaderFile" inherits="Resource" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Compiled shader file in SPIR-V form (used by [RenderingDevice]). Not to be confused with Godot's own [Shader].
 	</brief_description>
 	<description>
+		Compiled shader file in SPIR-V form.
+		See also [RDShaderSource]. [RDShaderFile] is only meant to be used with the [RenderingDevice] API. It should not be confused with Godot's own [Shader] resource, which is what Godot's various nodes use for high-level shader programming.
 	</description>
 	<tutorials>
 	</tutorials>
@@ -11,11 +14,13 @@
 			<return type="RDShaderSPIRV" />
 			<param index="0" name="version" type="StringName" default="&amp;&quot;&quot;" />
 			<description>
+				Returns the SPIR-V intermediate representation for the specified shader [param version].
 			</description>
 		</method>
 		<method name="get_version_list" qualifiers="const">
 			<return type="PackedStringArray" />
 			<description>
+				Returns the list of compiled versions for this shader.
 			</description>
 		</method>
 		<method name="set_bytecode">
@@ -23,11 +28,13 @@
 			<param index="0" name="bytecode" type="RDShaderSPIRV" />
 			<param index="1" name="version" type="StringName" default="&amp;&quot;&quot;" />
 			<description>
+				Sets the SPIR-V [param bytecode] that will be compiled for the specified [param version].
 			</description>
 		</method>
 	</methods>
 	<members>
 		<member name="base_error" type="String" setter="set_base_error" getter="get_base_error" default="&quot;&quot;">
+			The base compilation error message, which indicates errors not related to a specific shader stage if non-empty. If empty, shader compilation is not necessarily successful (check [RDShaderSPIRV]'s error message members).
 		</member>
 	</members>
 </class>

+ 17 - 0
doc/classes/RDShaderSPIRV.xml

@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDShaderSPIRV" inherits="Resource" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		SPIR-V intermediate representation as part of a [RDShaderFile] (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		[RDShaderSPIRV] represents a [RDShaderFile]'s [url=https://www.khronos.org/spir/]SPIR-V[/url] code for various shader stages, as well as possible compilation error messages. SPIR-V a low-level intermediate shader representation. This intermediate representation is not used directly by GPUs for rendering, but it can be compiled into binary shaders that GPUs can understand. Unlike compiled shaders, SPIR-V is portable across GPU models and driver versions.
+		This object is used by [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>
@@ -11,12 +14,14 @@
 			<return type="PackedByteArray" />
 			<param index="0" name="stage" type="int" enum="RenderingDevice.ShaderStage" />
 			<description>
+				Equivalent to getting one of [member bytecode_compute], [member bytecode_fragment], [member bytecode_tesselation_control], [member bytecode_tesselation_evaluation], [member bytecode_vertex].
 			</description>
 		</method>
 		<method name="get_stage_compile_error" qualifiers="const">
 			<return type="String" />
 			<param index="0" name="stage" type="int" enum="RenderingDevice.ShaderStage" />
 			<description>
+				Returns the compilation error message for the given shader [param stage]. Equivalent to getting one of [member compile_error_compute], [member compile_error_fragment], [member compile_error_tesselation_control], [member compile_error_tesselation_evaluation], [member compile_error_vertex].
 			</description>
 		</method>
 		<method name="set_stage_bytecode">
@@ -24,6 +29,7 @@
 			<param index="0" name="stage" type="int" enum="RenderingDevice.ShaderStage" />
 			<param index="1" name="bytecode" type="PackedByteArray" />
 			<description>
+				Sets the SPIR-V [param bytecode] for the given shader [param stage]. Equivalent to setting one of [member bytecode_compute], [member bytecode_fragment], [member bytecode_tesselation_control], [member bytecode_tesselation_evaluation], [member bytecode_vertex].
 			</description>
 		</method>
 		<method name="set_stage_compile_error">
@@ -31,29 +37,40 @@
 			<param index="0" name="stage" type="int" enum="RenderingDevice.ShaderStage" />
 			<param index="1" name="compile_error" type="String" />
 			<description>
+				Sets the compilation error message for the given shader [param stage] to [param compile_error]. Equivalent to setting one of [member compile_error_compute], [member compile_error_fragment], [member compile_error_tesselation_control], [member compile_error_tesselation_evaluation], [member compile_error_vertex].
 			</description>
 		</method>
 	</methods>
 	<members>
 		<member name="bytecode_compute" type="PackedByteArray" setter="set_stage_bytecode" getter="get_stage_bytecode" default="PackedByteArray()">
+			The SPIR-V bytecode for the compute shader stage.
 		</member>
 		<member name="bytecode_fragment" type="PackedByteArray" setter="set_stage_bytecode" getter="get_stage_bytecode" default="PackedByteArray()">
+			The SPIR-V bytecode for the fragment shader stage.
 		</member>
 		<member name="bytecode_tesselation_control" type="PackedByteArray" setter="set_stage_bytecode" getter="get_stage_bytecode" default="PackedByteArray()">
+			The SPIR-V bytecode for the tessellation control shader stage.
 		</member>
 		<member name="bytecode_tesselation_evaluation" type="PackedByteArray" setter="set_stage_bytecode" getter="get_stage_bytecode" default="PackedByteArray()">
+			The SPIR-V bytecode for the tessellation evaluation shader stage.
 		</member>
 		<member name="bytecode_vertex" type="PackedByteArray" setter="set_stage_bytecode" getter="get_stage_bytecode" default="PackedByteArray()">
+			The SPIR-V bytecode for the vertex shader stage.
 		</member>
 		<member name="compile_error_compute" type="String" setter="set_stage_compile_error" getter="get_stage_compile_error" default="&quot;&quot;">
+			The compilation error message for the compute shader stage (set by the SPIR-V compiler and Godot). If empty, shader compilation was successful.
 		</member>
 		<member name="compile_error_fragment" type="String" setter="set_stage_compile_error" getter="get_stage_compile_error" default="&quot;&quot;">
+			The compilation error message for the fragment shader stage (set by the SPIR-V compiler and Godot). If empty, shader compilation was successful.
 		</member>
 		<member name="compile_error_tesselation_control" type="String" setter="set_stage_compile_error" getter="get_stage_compile_error" default="&quot;&quot;">
+			The compilation error message for the tessellation control shader stage (set by the SPIR-V compiler and Godot). If empty, shader compilation was successful.
 		</member>
 		<member name="compile_error_tesselation_evaluation" type="String" setter="set_stage_compile_error" getter="get_stage_compile_error" default="&quot;&quot;">
+			The compilation error message for the tessellation evaluation shader stage (set by the SPIR-V compiler and Godot). If empty, shader compilation was successful.
 		</member>
 		<member name="compile_error_vertex" type="String" setter="set_stage_compile_error" getter="get_stage_compile_error" default="&quot;&quot;">
+			The compilation error message for the vertex shader stage (set by the SPIR-V compiler and Godot). If empty, shader compilation was successful.
 		</member>
 	</members>
 </class>

+ 11 - 0
doc/classes/RDShaderSource.xml

@@ -1,8 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDShaderSource" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Shader source code (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		Shader source code in text form.
+		See also [RDShaderFile]. [RDShaderSource] is only meant to be used with the [RenderingDevice] API. It should not be confused with Godot's own [Shader] resource, which is what Godot's various nodes use for high-level shader programming.
 	</description>
 	<tutorials>
 	</tutorials>
@@ -11,6 +14,7 @@
 			<return type="String" />
 			<param index="0" name="stage" type="int" enum="RenderingDevice.ShaderStage" />
 			<description>
+				Returns source code for the specified shader [param stage]. Equivalent to getting one of [member source_compute], [member source_fragment], [member source_tesselation_control], [member source_tesselation_evaluation] or [member source_vertex].
 			</description>
 		</method>
 		<method name="set_stage_source">
@@ -18,21 +22,28 @@
 			<param index="0" name="stage" type="int" enum="RenderingDevice.ShaderStage" />
 			<param index="1" name="source" type="String" />
 			<description>
+				Sets [param source] code for the specified shader [param stage]. Equivalent to setting one of [member source_compute], [member source_fragment], [member source_tesselation_control], [member source_tesselation_evaluation] or [member source_vertex].
 			</description>
 		</method>
 	</methods>
 	<members>
 		<member name="language" type="int" setter="set_language" getter="get_language" enum="RenderingDevice.ShaderLanguage" default="0">
+			The language the shader is written in.
 		</member>
 		<member name="source_compute" type="String" setter="set_stage_source" getter="get_stage_source" default="&quot;&quot;">
+			Source code for the shader's compute stage.
 		</member>
 		<member name="source_fragment" type="String" setter="set_stage_source" getter="get_stage_source" default="&quot;&quot;">
+			Source code for the shader's fragment stage.
 		</member>
 		<member name="source_tesselation_control" type="String" setter="set_stage_source" getter="get_stage_source" default="&quot;&quot;">
+			Source code for the shader's tessellation control stage.
 		</member>
 		<member name="source_tesselation_evaluation" type="String" setter="set_stage_source" getter="get_stage_source" default="&quot;&quot;">
+			Source code for the shader's tessellation evaluation stage.
 		</member>
 		<member name="source_vertex" type="String" setter="set_stage_source" getter="get_stage_source" default="&quot;&quot;">
+			Source code for the shader's vertex stage.
 		</member>
 	</members>
 </class>

+ 11 - 0
doc/classes/RDTextureFormat.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDTextureFormat" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Texture format (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		This object is used by [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>
@@ -22,22 +24,31 @@
 	</methods>
 	<members>
 		<member name="array_layers" type="int" setter="set_array_layers" getter="get_array_layers" default="1">
+			The number of layers in the texture. Only relevant for 2D texture arrays.
 		</member>
 		<member name="depth" type="int" setter="set_depth" getter="get_depth" default="1">
+			The texture's depth (in pixels). This is always [code]1[/code] for 2D textures.
 		</member>
 		<member name="format" type="int" setter="set_format" getter="get_format" enum="RenderingDevice.DataFormat" default="8">
+			The texture's pixel data format.
 		</member>
 		<member name="height" type="int" setter="set_height" getter="get_height" default="1">
+			The texture's height (in pixels).
 		</member>
 		<member name="mipmaps" type="int" setter="set_mipmaps" getter="get_mipmaps" default="1">
+			The number of mipmaps available in the texture.
 		</member>
 		<member name="samples" type="int" setter="set_samples" getter="get_samples" enum="RenderingDevice.TextureSamples" default="0">
+			The number of samples used when sampling the texture.
 		</member>
 		<member name="texture_type" type="int" setter="set_texture_type" getter="get_texture_type" enum="RenderingDevice.TextureType" default="1">
+			The texture type.
 		</member>
 		<member name="usage_bits" type="int" setter="set_usage_bits" getter="get_usage_bits" enum="RenderingDevice.TextureUsageBits" default="0">
+			The texture's usage bits, which determine what can be done using the texture.
 		</member>
 		<member name="width" type="int" setter="set_width" getter="get_width" default="1">
+			The texture's width (in pixels).
 		</member>
 	</members>
 </class>

+ 7 - 0
doc/classes/RDTextureView.xml

@@ -1,21 +1,28 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDTextureView" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Texture view (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		This object is used by [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>
 	<members>
 		<member name="format_override" type="int" setter="set_format_override" getter="get_format_override" enum="RenderingDevice.DataFormat" default="218">
+			Optional override for the data format to return sampled values in. The default value of [constant RenderingDevice.DATA_FORMAT_MAX] does not override the format.
 		</member>
 		<member name="swizzle_a" type="int" setter="set_swizzle_a" getter="get_swizzle_a" enum="RenderingDevice.TextureSwizzle" default="6">
+			The channel to sample when sampling the alpha channel.
 		</member>
 		<member name="swizzle_b" type="int" setter="set_swizzle_b" getter="get_swizzle_b" enum="RenderingDevice.TextureSwizzle" default="5">
+			The channel to sample when sampling the blue color channel.
 		</member>
 		<member name="swizzle_g" type="int" setter="set_swizzle_g" getter="get_swizzle_g" enum="RenderingDevice.TextureSwizzle" default="4">
+			The channel to sample when sampling the green color channel.
 		</member>
 		<member name="swizzle_r" type="int" setter="set_swizzle_r" getter="get_swizzle_r" enum="RenderingDevice.TextureSwizzle" default="3">
+			The channel to sample when sampling the red color channel.
 		</member>
 	</members>
 </class>

+ 4 - 0
doc/classes/RDUniform.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDUniform" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Shader uniform (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		This object is used by [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>
@@ -26,8 +28,10 @@
 	</methods>
 	<members>
 		<member name="binding" type="int" setter="set_binding" getter="get_binding" default="0">
+			The uniform's binding.
 		</member>
 		<member name="uniform_type" type="int" setter="set_uniform_type" getter="get_uniform_type" enum="RenderingDevice.UniformType" default="3">
+			The uniform's data type.
 		</member>
 	</members>
 </class>

+ 2 - 0
doc/classes/RDVertexAttribute.xml

@@ -1,8 +1,10 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="RDVertexAttribute" inherits="RefCounted" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Vertex attribute (used by [RenderingDevice]).
 	</brief_description>
 	<description>
+		This object is used by [RenderingDevice].
 	</description>
 	<tutorials>
 	</tutorials>

+ 7 - 7
doc/classes/ReflectionProbe.xml

@@ -15,13 +15,13 @@
 	</tutorials>
 	<members>
 		<member name="ambient_color" type="Color" setter="set_ambient_color" getter="get_ambient_color" default="Color(0, 0, 0, 1)">
-			The custom ambient color to use within the [ReflectionProbe]'s [member size]. Only effective if [member ambient_mode] is [constant AMBIENT_COLOR].
+			The custom ambient color to use within the [ReflectionProbe]'s box defined by its [member size]. Only effective if [member ambient_mode] is [constant AMBIENT_COLOR].
 		</member>
 		<member name="ambient_color_energy" type="float" setter="set_ambient_color_energy" getter="get_ambient_color_energy" default="1.0">
-			The custom ambient color energy to use within the [ReflectionProbe]'s [member size]. Only effective if [member ambient_mode] is [constant AMBIENT_COLOR].
+			The custom ambient color energy to use within the [ReflectionProbe]'s box defined by its [member size]. Only effective if [member ambient_mode] is [constant AMBIENT_COLOR].
 		</member>
 		<member name="ambient_mode" type="int" setter="set_ambient_mode" getter="get_ambient_mode" enum="ReflectionProbe.AmbientMode" default="1">
-			The ambient color to use within the [ReflectionProbe]'s [member size]. The ambient color will smoothly blend with other [ReflectionProbe]s and the rest of the scene (outside the [ReflectionProbe]'s [member size]).
+			The ambient color to use within the [ReflectionProbe]'s box defined by its [member size]. The ambient color will smoothly blend with other [ReflectionProbe]s and the rest of the scene (outside the [ReflectionProbe]'s box defined by its [member size]).
 		</member>
 		<member name="box_projection" type="bool" setter="set_enable_box_projection" getter="is_box_projection_enabled" default="false">
 			If [code]true[/code], enables box projection. This makes reflections look more correct in rectangle-shaped rooms by offsetting the reflection center depending on the camera's location.
@@ -41,7 +41,7 @@
 		</member>
 		<member name="max_distance" type="float" setter="set_max_distance" getter="get_max_distance" default="0.0">
 			The maximum distance away from the [ReflectionProbe] an object can be before it is culled. Decrease this to improve performance, especially when using the [constant UPDATE_ALWAYS] [member update_mode].
-			[b]Note:[/b] The maximum reflection distance is always at least equal to the probe's extents. This means that decreasing [member max_distance] will not always cull objects from reflections, especially if the reflection probe's [member size] is already large.
+			[b]Note:[/b] The maximum reflection distance is always at least equal to the probe's extents. This means that decreasing [member max_distance] will not always cull objects from reflections, especially if the reflection probe's box defined by its [member size] is already large.
 		</member>
 		<member name="mesh_lod_threshold" type="float" setter="set_mesh_lod_threshold" getter="get_mesh_lod_threshold" default="1.0">
 			The automatic LOD bias to use for meshes rendered within the [ReflectionProbe] (this is analog to [member Viewport.mesh_lod_threshold]). Higher values will use less detailed versions of meshes that have LOD variations generated. If set to [code]0.0[/code], automatic LOD is disabled. Increase [member mesh_lod_threshold] to improve performance at the cost of geometry detail, especially when using the [constant UPDATE_ALWAYS] [member update_mode].
@@ -66,13 +66,13 @@
 			Update the probe every frame. This provides better results for fast-moving dynamic objects (such as cars). However, it has a significant performance cost. Due to the cost, it's recommended to only use one ReflectionProbe with [constant UPDATE_ALWAYS] at most per scene. For all other use cases, use [constant UPDATE_ONCE].
 		</constant>
 		<constant name="AMBIENT_DISABLED" value="0" enum="AmbientMode">
-			Do not apply any ambient lighting inside the [ReflectionProbe]'s [member size].
+			Do not apply any ambient lighting inside the [ReflectionProbe]'s box defined by its [member size].
 		</constant>
 		<constant name="AMBIENT_ENVIRONMENT" value="1" enum="AmbientMode">
-			Apply automatically-sourced environment lighting inside the [ReflectionProbe]'s [member size].
+			Apply automatically-sourced environment lighting inside the [ReflectionProbe]'s box defined by its [member size].
 		</constant>
 		<constant name="AMBIENT_COLOR" value="2" enum="AmbientMode">
-			Apply custom ambient lighting inside the [ReflectionProbe]'s [member size]. See [member ambient_color] and [member ambient_color_energy].
+			Apply custom ambient lighting inside the [ReflectionProbe]'s box defined by its [member size]. See [member ambient_color] and [member ambient_color_energy].
 		</constant>
 	</constants>
 </class>

ファイルの差分が大きいため隠しています
+ 414 - 4
doc/classes/RenderingDevice.xml


ファイルの差分が大きいため隠しています
+ 186 - 75
doc/classes/RenderingServer.xml


+ 1 - 0
doc/classes/ResourceLoader.xml

@@ -71,6 +71,7 @@
 				The [param cache_mode] property defines whether and how the cache should be used or updated when loading the resource. See [enum CacheMode] for details.
 				Returns an empty resource if no [ResourceFormatLoader] could handle the file.
 				GDScript has a simplified [method @GDScript.load] built-in method which can be used in most situations, leaving the use of [ResourceLoader] for more advanced scenarios.
+				[b]Note:[/b] If [member ProjectSettings.editor/export/convert_text_resources_to_binary] is [code]true[/code], [method @GDScript.load] will not be able to read converted files in an exported project. If you rely on run-time loading of files present within the PCK, set [member ProjectSettings.editor/export/convert_text_resources_to_binary] to [code]false[/code].
 			</description>
 		</method>
 		<method name="load_threaded_get">

+ 1 - 1
doc/classes/RichTextLabel.xml

@@ -357,7 +357,7 @@
 		<method name="push_italics">
 			<return type="void" />
 			<description>
-				Adds a [code][font][/code] tag with a italics font to the tag stack. This is the same as adding a [code][i][/code] tag if not currently in a [code][b][/code] tag.
+				Adds a [code][font][/code] tag with an italics font to the tag stack. This is the same as adding an [code][i][/code] tag if not currently in a [code][b][/code] tag.
 			</description>
 		</method>
 		<method name="push_list">

+ 11 - 1
doc/classes/ScrollContainer.xml

@@ -52,10 +52,20 @@
 			Deadzone for touch scrolling. Lower deadzone makes the scrolling more sensitive.
 		</member>
 		<member name="scroll_horizontal" type="int" setter="set_h_scroll" getter="get_h_scroll" default="0">
-			The current horizontal scroll value.
+			The current horizontal scroll value. 
+			[b]Note:[/b] If you are setting this value in the [method Node._ready] function or earlier, it needs to be wrapped with [method Object.set_deferred], since scroll bar's [member Range.max_value] is not initialized yet.
+			[codeblock]
+			func _ready():
+			    set_deferred("scroll_horizontal", 600)
+			[/codeblock]
 		</member>
 		<member name="scroll_vertical" type="int" setter="set_v_scroll" getter="get_v_scroll" default="0">
 			The current vertical scroll value.
+			[b]Note:[/b] Setting it early needs to be deferred, just like in [member scroll_horizontal].
+			[codeblock]
+			func _ready():
+			    set_deferred("scroll_vertical", 600)
+			[/codeblock]
 		</member>
 		<member name="vertical_scroll_mode" type="int" setter="set_vertical_scroll_mode" getter="get_vertical_scroll_mode" enum="ScrollContainer.ScrollMode" default="1">
 			Controls whether vertical scrollbar can be used and when it should be visible. See [enum ScrollMode] for options.

+ 4 - 0
doc/classes/ShaderGlobalsOverride.xml

@@ -1,8 +1,12 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="ShaderGlobalsOverride" inherits="Node" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		Overrides global shader parameters' values in a specific scene.
 	</brief_description>
 	<description>
+		Similar to how a [WorldEnvironment] node can be used to override the environment while a specific scene is loaded, [ShaderGlobalsOverride] can be used to override global shader parameters temporarily. Once the node is removed, the project-wide values for the global shader parameters are restored. See the [RenderingServer] [code]global_shader_parameter_*[/code] methods for more information.
+		[b]Note:[/b] Only one [ShaderGlobalsOverride] can be used per scene. If there is more than one [ShaderGlobalsOverride] node in the scene tree, only the first node (in tree order) will be taken into account.
+		[b]Note:[/b] All [ShaderGlobalsOverride] nodes are made part of a [code]"shader_overrides_group"[/code] group when they are added to the scene tree. The currently active [ShaderGlobalsOverride] node also has a [code]"shader_overrides_group_active"[/code] group added to it. You can use this to check which [ShaderGlobalsOverride] node is currently active.
 	</description>
 	<tutorials>
 	</tutorials>

+ 1 - 1
doc/classes/SkeletonModification2D.xml

@@ -38,7 +38,7 @@
 			<param index="2" name="max" type="float" />
 			<param index="3" name="invert" type="bool" />
 			<description>
-				Takes a angle and clamps it so it is within the passed-in [param min] and [param max] range. [param invert] will inversely clamp the angle, clamping it to the range outside of the given bounds.
+				Takes an angle and clamps it so it is within the passed-in [param min] and [param max] range. [param invert] will inversely clamp the angle, clamping it to the range outside of the given bounds.
 			</description>
 		</method>
 		<method name="get_editor_draw_gizmo" qualifiers="const">

+ 1 - 1
doc/classes/Sky.xml

@@ -57,7 +57,7 @@
 		</constant>
 		<constant name="PROCESS_MODE_REALTIME" value="3" enum="ProcessMode">
 			Uses the fast filtering algorithm to process the radiance map. In general this results in lower quality, but substantially faster run times. If you need better quality, but still need to update the sky every frame, consider turning on [member ProjectSettings.rendering/reflections/sky_reflections/fast_filter_high_quality].
-			[b]Note:[/b] The fast filtering algorithm is limited to 256x256 cubemaps, so [member radiance_size] must be set to [constant RADIANCE_SIZE_256].
+			[b]Note:[/b] The fast filtering algorithm is limited to 256×256 cubemaps, so [member radiance_size] must be set to [constant RADIANCE_SIZE_256]. Otherwise, a warning is printed and the overridden radiance size is ignored.
 		</constant>
 	</constants>
 </class>

+ 1 - 1
doc/classes/StreamPeerTLS.xml

@@ -4,7 +4,7 @@
 		TLS stream peer.
 	</brief_description>
 	<description>
-		TLS stream peer. This object can be used to connect to an TLS server or accept a single TLS client connection.
+		TLS stream peer. This object can be used to connect to a TLS server or accept a single TLS client connection.
 		[b]Note:[/b] When exporting to Android, make sure to enable the [code]INTERNET[/code] permission in the Android export preset before exporting the project or using one-click deploy. Otherwise, network communication of any kind will be blocked by Android.
 	</description>
 	<tutorials>

+ 1 - 1
doc/classes/SyntaxHighlighter.xml

@@ -5,7 +5,7 @@
 	</brief_description>
 	<description>
 		Base syntax highlighter resource all syntax highlighters extend from, provides syntax highlighting data to [TextEdit].
-		The associated [TextEdit] node will call into the [SyntaxHighlighter] on a as needed basis.
+		The associated [TextEdit] node will call into the [SyntaxHighlighter] on an as-needed basis.
 		[b]Note:[/b] Each Syntax highlighter instance should not be shared across multiple [TextEdit] nodes.
 	</description>
 	<tutorials>

+ 14 - 0
doc/classes/TextServerDummy.xml

@@ -1,8 +1,22 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <class name="TextServerDummy" inherits="TextServerExtension" version="4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
 	<brief_description>
+		A dummy text server that can't render text or manage fonts.
 	</brief_description>
 	<description>
+		A dummy [TextServer] interface that doesn't do anything. Useful for freeing up memory when rendering text is not needed, as text servers are resource-intensive. It can also be used for performance comparisons in complex GUIs to check the impact of text rendering.
+		A dummy text server is always available at the start of a project. Here's how to access it:
+		[codeblock]
+		var dummy_text_server = TextServerManager.find_interface("Dummy")
+		if dummy_text_server != null:
+		    TextServerManager.set_primary_interface(dummy_text_server)
+		    # If the other text servers are unneeded, they can be removed:
+		    for i in TextServerManager.get_interface_count():
+		        var text_server = TextServerManager.get_interface(i)
+		        if text_server != dummy_text_server:
+		            TextServerManager.remove_interface(text_server)
+		[/codeblock]
+		The command line argument [code]--text-driver Dummy[/code] (case-sensitive) can be used to force the "Dummy" [TextServer] on any project.
 	</description>
 	<tutorials>
 	</tutorials>

+ 1 - 1
doc/classes/TileSet.xml

@@ -8,7 +8,7 @@
 		Tiles can either be from a [TileSetAtlasSource], that render tiles out of a texture with support for physics, navigation, etc... or from a [TileSetScenesCollectionSource] which exposes scene-based tiles.
 		Tiles are referenced by using three IDs: their source ID, their atlas coordinates ID and their alternative tile ID.
 		A TileSet can be configured so that its tiles expose more or less properties. To do so, the TileSet resources uses property layers, that you can add or remove depending on your needs.
-		For example, adding a physics layer allows giving collision shapes to your tiles. Each layer having dedicated properties (physics layer an mask), you may add several TileSet physics layers for each type of collision you need.
+		For example, adding a physics layer allows giving collision shapes to your tiles. Each layer having dedicated properties (physics layer and mask), you may add several TileSet physics layers for each type of collision you need.
 		See the functions to add new layers for more information.
 	</description>
 	<tutorials>

+ 1 - 1
doc/classes/TileSetScenesCollectionSource.xml

@@ -79,7 +79,7 @@
 			<param index="0" name="id" type="int" />
 			<param index="1" name="new_id" type="int" />
 			<description>
-				Changes a scene tile's ID from [param id] to [param new_id]. This will fail if there is already a tile with a ID equal to [param new_id].
+				Changes a scene tile's ID from [param id] to [param new_id]. This will fail if there is already a tile with an ID equal to [param new_id].
 			</description>
 		</method>
 		<method name="set_scene_tile_scene">

+ 4 - 2
doc/classes/Viewport.xml

@@ -197,6 +197,7 @@
 			<return type="void" />
 			<description>
 				Stops the input from propagating further down the [SceneTree].
+				[b]Note:[/b] This does not affect the methods in [Input], only the way events are propagated.
 			</description>
 		</method>
 		<method name="set_positional_shadow_atlas_quadrant_subdiv">
@@ -284,6 +285,7 @@
 			[b]Note:[/b] This setting is disabled by default because of its potential expensive computational cost.
 		</member>
 		<member name="positional_shadow_atlas_16_bits" type="bool" setter="set_positional_shadow_atlas_16_bits" getter="get_positional_shadow_atlas_16_bits" default="true">
+			Use 16 bits for the omni/spot shadow depth map. Enabling this results in shadows having less precision and may result in shadow acne, but can lead to performance improvements on some devices.
 		</member>
 		<member name="positional_shadow_atlas_quad_0" type="int" setter="set_positional_shadow_atlas_quadrant_subdiv" getter="get_positional_shadow_atlas_quadrant_subdiv" enum="Viewport.PositionalShadowAtlasQuadrantSubdiv" default="2">
 			The subdivision amount of the first quadrant on the shadow atlas.
@@ -298,8 +300,8 @@
 			The subdivision amount of the fourth quadrant on the shadow atlas.
 		</member>
 		<member name="positional_shadow_atlas_size" type="int" setter="set_positional_shadow_atlas_size" getter="get_positional_shadow_atlas_size" default="2048">
-			The shadow atlas' resolution (used for omni and spot lights). The value will be rounded up to the nearest power of 2.
-			[b]Note:[/b] If this is set to [code]0[/code], no shadows will be visible at all (including directional shadows).
+			The shadow atlas' resolution (used for omni and spot lights). The value is rounded up to the nearest power of 2.
+			[b]Note:[/b] If this is set to [code]0[/code], no positional shadows will be visible at all. This can improve performance significantly on low-end systems by reducing both the CPU and GPU load (as fewer draw calls are needed to draw the scene without shadows).
 		</member>
 		<member name="scaling_3d_mode" type="int" setter="set_scaling_3d_mode" getter="get_scaling_3d_mode" enum="Viewport.Scaling3DMode" default="0">
 			Sets scaling 3d mode. Bilinear scaling renders at different resolution to either undersample or supersample the viewport. FidelityFX Super Resolution 1.0, abbreviated to FSR, is an upscaling technology that produces high quality images at fast framerates by using a spatially aware upscaling algorithm. FSR is slightly more expensive than bilinear, but it produces significantly higher image quality. FSR should be used where possible.

+ 2 - 1
doc/classes/ViewportTexture.xml

@@ -6,7 +6,7 @@
 	<description>
 		Displays the content of a [Viewport] node as a dynamic [Texture2D]. This can be used to mix controls, 2D, and 3D elements in the same scene.
 		To create a ViewportTexture in code, use the [method Viewport.get_texture] method on the target viewport.
-		[b]Note:[/b] When local to scene, this texture uses [method Resource.setup_local_to_scene] to set the proxy texture and flags in the local viewport.
+		[b]Note:[/b] When local to scene, this texture uses [method Resource.setup_local_to_scene] to set the proxy texture and flags in the local viewport. Local to scene viewport textures will return incorrect data until the scene root is ready (see [signal Node.ready]).
 	</description>
 	<tutorials>
 		<link title="GUI in 3D Demo">https://godotengine.org/asset-library/asset/127</link>
@@ -17,6 +17,7 @@
 	<members>
 		<member name="viewport_path" type="NodePath" setter="set_viewport_path_in_scene" getter="get_viewport_path_in_scene" default="NodePath(&quot;&quot;)">
 			The path to the [Viewport] node to display. This is relative to the scene root, not to the node which uses the texture.
+			[b]Note:[/b] In the editor, it is automatically updated when the target viewport's node path changes due to renaming or moving the viewport or its ancestors. At runtime, it may not be able to automatically update due to the inability to determine the scene root.
 		</member>
 	</members>
 </class>

+ 2 - 1
doc/classes/Window.xml

@@ -567,6 +567,7 @@
 		</member>
 		<member name="position" type="Vector2i" setter="set_position" getter="get_position" default="Vector2i(0, 0)">
 			The window's position in pixels.
+			If [member ProjectSettings.display/window/subwindows/embed_subwindows] is [code]false[/code], the position is in absolute screen coordinates. This typically applies to editor plugins. If the setting is [code]false[/code], the window's position is in the coordinates of its parent [Viewport].
 		</member>
 		<member name="size" type="Vector2i" setter="set_size" getter="get_size" default="Vector2i(100, 100)">
 			The window's size in pixels.
@@ -714,7 +715,7 @@
 			Regardless of the platform, enabling full screen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling full screen mode.
 		</constant>
 		<constant name="FLAG_RESIZE_DISABLED" value="0" enum="Flags">
-			The window can't be resizing by dragging its resize grip. It's still possible to resize the window using [member size]. This flag is ignored for full screen windows. Set with [member unresizable].
+			The window can't be resized by dragging its resize grip. It's still possible to resize the window using [member size]. This flag is ignored for full screen windows. Set with [member unresizable].
 		</constant>
 		<constant name="FLAG_BORDERLESS" value="1" enum="Flags">
 			The window do not have native title bar and other decorations. This flag is ignored for full-screen windows. Set with [member borderless].

+ 1 - 1
doc/classes/X509Certificate.xml

@@ -5,7 +5,7 @@
 	</brief_description>
 	<description>
 		The X509Certificate class represents an X509 certificate. Certificates can be loaded and saved like any other [Resource].
-		They can be used as the server certificate in [method StreamPeerTLS.accept_stream] (along with the proper [CryptoKey]), and to specify the only certificate that should be accepted when connecting to an TLS server via [method StreamPeerTLS.connect_to_stream].
+		They can be used as the server certificate in [method StreamPeerTLS.accept_stream] (along with the proper [CryptoKey]), and to specify the only certificate that should be accepted when connecting to a TLS server via [method StreamPeerTLS.connect_to_stream].
 	</description>
 	<tutorials>
 	</tutorials>

+ 7 - 281
doc/translations/es.po

@@ -49,12 +49,13 @@
 # Joinner Medina <[email protected]>, 2023.
 # Denis Anfruns <[email protected]>, 2023.
 # Luis Ortiz <[email protected]>, 2023.
+# Biel Serrano Sanchez <[email protected]>, 2023.
 msgid ""
 msgstr ""
 "Project-Id-Version: Godot Engine class reference\n"
 "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2023-04-12 08:56+0000\n"
-"Last-Translator: Luis Ortiz <luisortiz66@hotmail.com>\n"
+"PO-Revision-Date: 2023-04-26 21:48+0000\n"
+"Last-Translator: Javier Ocampos <xavier.ocampos@gmail.com>\n"
 "Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
 "godot-class-reference/es/>\n"
 "Language: es\n"
@@ -62,7 +63,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.17-dev\n"
+"X-Generator: Weblate 4.18-dev\n"
 
 msgid "Description"
 msgstr "Descripción"
@@ -2447,24 +2448,6 @@ msgstr ""
 msgid "Returns [code]true[/code] if the array is empty."
 msgstr "Devuelve [code]true[/code] si el array es vacio."
 
-msgid ""
-"Returns the maximum value contained in the array if all elements are of "
-"comparable types. If the elements can't be compared, [code]null[/code] is "
-"returned."
-msgstr ""
-"Devuelve el maximo valor contenido en el array si todos los elementos son de "
-"tipos comparables. Si los elementos no pueden ser comparados, [code]null[/"
-"code] es devuelto."
-
-msgid ""
-"Returns the minimum value contained in the array if all elements are of "
-"comparable types. If the elements can't be compared, [code]null[/code] is "
-"returned."
-msgstr ""
-"Devuelve el minimo valor contenido en el array si todos los elementos son de "
-"tipos comparables. Si los elementos no pueden ser comparados, [code]null[/"
-"code] es devuelto."
-
 msgid ""
 "Resizes the array to contain a different number of elements. If the array "
 "size is smaller, elements are cleared, if bigger, new elements are "
@@ -3934,16 +3917,6 @@ msgstr ""
 "sombreadas son opacas y las áreas no sombreadas son transparentes. Es útil "
 "para superponer sombras en una cámara de alimentación en AR."
 
-msgid ""
-"If [code]true[/code], subsurface scattering is enabled. Emulates light that "
-"penetrates an object's surface, is scattered, and then emerges."
-msgstr ""
-"Si [code]true[/code], se activa la dispersión subterránea. Emula la luz que "
-"penetra en la superficie de un objeto, se dispersa y luego emerge."
-
-msgid "The strength of the subsurface scattering effect."
-msgstr "La fuerza del efecto de dispersión del subsuelo."
-
 msgid ""
 "Texture used to control the subsurface scattering strength. Stored in the "
 "red texture channel. Multiplied by [member subsurf_scatter_strength]."
@@ -4877,21 +4850,6 @@ msgstr ""
 "Si [code]true[/code], la propiedad del [member material] de [CanvasItem] se "
 "utiliza como el material para este elemento."
 
-msgid ""
-"If [code]true[/code], this [CanvasItem] is drawn. The node is only visible "
-"if all of its antecedents are visible as well (in other words, [method "
-"is_visible_in_tree] must return [code]true[/code]).\n"
-"[b]Note:[/b] For controls that inherit [Popup], the correct way to make them "
-"visible is to call one of the multiple [code]popup*()[/code] functions "
-"instead."
-msgstr ""
-"Si [code]true[/code], se dibuja este [CanvasItem]. El nodo sólo es visible "
-"si todos sus antecedentes también lo son (en otras palabras, [method "
-"is_visible_in_tree] debe devolver [code]true[/code]).\n"
-"[b]Nota:[/b] Para los controles que heredan [Popup], la forma correcta de "
-"hacerlos visibles es llamar a una de las múltiples funciones [code]popup*()[/"
-"code] en su lugar."
-
 msgid ""
 "If [code]true[/code], the node's Z index is relative to its parent's Z "
 "index. If this node's Z index is 2 and its parent's effective Z index is 3, "
@@ -6073,15 +6031,6 @@ msgstr ""
 "La notificación, para cuando se ordenan los hijos, debe ser obedecida "
 "inmediatamente."
 
-msgid ""
-"Marks an input event as handled. Once you accept an input event, it stops "
-"propagating, even to nodes listening to [method Node._unhandled_input] or "
-"[method Node._unhandled_key_input]."
-msgstr ""
-"Marca un evento de entrada como manejado. Una vez que aceptas un evento de "
-"entrada, deja de propagarse, incluso a los nodos que escuchan [method Node."
-"_unhandled_input] o [method Node._unhandled_key_input]."
-
 msgid ""
 "Returns the mouse cursor shape the control displays on mouse hover. See "
 "[enum CursorShape]."
@@ -6890,16 +6839,6 @@ msgstr ""
 "nodo hijo de CSG ya que la operación es entre este nodo y el hijo previo a "
 "este nodo padre."
 
-msgid ""
-"Snap makes the mesh snap to a given distance so that the faces of two meshes "
-"can be perfectly aligned. A lower value results in greater precision but may "
-"be harder to adjust."
-msgstr ""
-"El recorte hace que la malla se ajuste a una distancia determinada para que "
-"las caras de dos mallas puedan estar perfectamente alineadas. Un valor más "
-"bajo da como resultado una mayor precisión pero puede ser más difícil de "
-"ajustar."
-
 msgid ""
 "Geometry of both primitives is merged, intersecting geometry is removed."
 msgstr ""
@@ -8289,18 +8228,6 @@ msgstr ""
 "Devuelve [code]true[/code] si el juego está dentro del proceso fijo y la "
 "fase de física del bucle de juego."
 
-msgid ""
-"Controls how fast or slow the in-game clock ticks versus the real life one. "
-"It defaults to 1.0. A value of 2.0 means the game moves twice as fast as "
-"real life, whilst a value of 0.5 means the game moves at half the regular "
-"speed."
-msgstr ""
-"Controla la velocidad o la lentitud del reloj del juego en comparación con "
-"el de la vida real. El valor por defecto es 1.0. Un valor de 2.0 significa "
-"que el juego se mueve el doble de rápido que en la vida real, mientras que "
-"un valor de 0.5 significa que el juego se mueve a la mitad de la velocidad "
-"normal."
-
 msgid ""
 "Resource for environment nodes (like [WorldEnvironment]) that define "
 "multiple rendering options."
@@ -9369,9 +9296,6 @@ msgstr ""
 "Un recurso interpolador de color que puede ser usado para generar colores "
 "entre puntos de color definidos por el usuario."
 
-msgid "Returns the interpolated color specified by [code]offset[/code]."
-msgstr "Devuelve el color interpolado especificado por [code]offset[/code]."
-
 msgid "Cubic interpolation."
 msgstr "Interpolación cúbica."
 
@@ -11291,18 +11215,6 @@ msgstr ""
 msgid "A singleton that deals with inputs."
 msgstr "Un singleton que se ocupa de las entradas."
 
-msgid ""
-"A singleton that deals with inputs. This includes key presses, mouse buttons "
-"and movement, joypads, and input actions. Actions and their events can be "
-"set in the [b]Input Map[/b] tab in the [b]Project > Project Settings[/b], or "
-"with the [InputMap] class."
-msgstr ""
-"Un singleton que se ocupa de las entradas. Esto incluye pulsaciones de "
-"teclas, botones del ratón y movimiento, joypads y acciones de entrada. Las "
-"acciones y sus eventos se pueden configurar en la pestaña [b]Mapa de "
-"entradas[/b] en el [b]Proyecto > Configuración del proyecto[/b], o con la "
-"clase [InputMap]."
-
 msgid ""
 "This will simulate pressing the specified action.\n"
 "The strength can be used for non-boolean actions, it's ranged between 0 and "
@@ -13994,17 +13906,6 @@ msgstr ""
 "Devuelve si este nodo utiliza una escala de [code](1, 1, 1)[/code] o su "
 "escala de transformación local."
 
-msgid ""
-"Returns [code]true[/code] if the node is present in the [SceneTree], its "
-"[member visible] property is [code]true[/code] and all its antecedents are "
-"also visible. If any antecedent is hidden, this node will not be visible in "
-"the scene tree."
-msgstr ""
-"Devuelve [code]true[/code] si el nodo está presente en el [SceneTree], su "
-"propiedad [member visible] es [code]true[/code] y todos sus antecedentes "
-"también son visibles. Si algún antecedente está oculto, este nodo no será "
-"visible en el árbol de la escena."
-
 msgid ""
 "Rotates the local transformation around axis, a unit [Vector3], by specified "
 "angle in radians."
@@ -14068,15 +13969,6 @@ msgstr ""
 "Cambia la posición del nodo por el desplazamiento dado [Vector3] en el "
 "espacio local."
 
-msgid ""
-"If [code]true[/code], this node is drawn. The node is only visible if all of "
-"its antecedents are visible as well (in other words, [method "
-"is_visible_in_tree] must return [code]true[/code])."
-msgstr ""
-"Si [code]true[/code], este nodo se dibuja. El nodo sólo es visible si todos "
-"sus antecedentes también lo son (en otras palabras, [method "
-"is_visible_in_tree] debe devolver [code]true[/code])."
-
 msgid "Emitted when node visibility changes."
 msgstr "Emitido cuando cambia la visibilidad del nodo."
 
@@ -14192,6 +14084,9 @@ msgstr ""
 msgid "Add an action set."
 msgstr "Añadir un conjunto de acciones."
 
+msgid "Add an interaction profile."
+msgstr "Añadir un perfil de interacción."
+
 msgid "Optimized translation."
 msgstr "Traducción optimizada."
 
@@ -16823,9 +16718,6 @@ msgstr ""
 "Si [code]true[/code], utiliza un modelo de iluminación de material Lambert "
 "más rápido pero de menor calidad en lugar del Burley."
 
-msgid "Quaternion."
-msgstr "Cuaternario."
-
 msgid ""
 "Constructs a quaternion that will rotate around the given axis by the "
 "specified angle. The axis must be a normalized vector."
@@ -17294,9 +17186,6 @@ msgstr "Establece el [CanvasItem] para copiar un rectángulo al backbuffer."
 msgid "Sets the index for the [CanvasItem]."
 msgstr "Establece el índice para el [CanvasItem]."
 
-msgid "Sets a new material to the [CanvasItem]."
-msgstr "Establece un nuevo material para el [CanvasItem]."
-
 msgid "Sets if the [CanvasItem] uses its parent's material."
 msgstr "Establece si el [CanvasItem] utiliza el material de su padre."
 
@@ -17409,27 +17298,6 @@ msgstr ""
 msgid "Modulates all colors in the given canvas."
 msgstr "Modula todos los colores en el canvas dado."
 
-msgid ""
-"Sets the values to be used with the \"Adjustment\" post-process effect. See "
-"[Environment] for more details."
-msgstr ""
-"Establece los valores que se utilizarán con el efecto de post-proceso de "
-"\"Ajuste\". Ver [Environment] para más detalles."
-
-msgid ""
-"Sets the [i]BGMode[/i] of the environment. Equivalent to [member Environment."
-"background_mode]."
-msgstr ""
-"Establece el [i]BGMode[/i] del medio ambiente. Equivalente a [member "
-"Environment.background_mode]."
-
-msgid ""
-"Color displayed for clear areas of the scene (if using Custom color or "
-"Color+Sky background modes)."
-msgstr ""
-"Color mostrado para áreas claras de la escena (si se utilizan los modos de "
-"fondo Color personalizado o Color+Sky)."
-
 msgid "Sets the intensity of the background color."
 msgstr "Establece la intensidad del color de fondo."
 
@@ -17437,13 +17305,6 @@ msgid "Sets the maximum layer to use if using Canvas background mode."
 msgstr ""
 "Establece la capa máxima a usar si se utiliza el modo de fondo de canvas."
 
-msgid ""
-"Sets the variables to be used with the \"screen space reflections\" post-"
-"process effect. See [Environment] for more details."
-msgstr ""
-"Establece las variables que se utilizarán con el efecto de post-proceso "
-"\"reflejos del espacio de la pantalla\". Ver [Environment] para más detalles."
-
 msgid ""
 "Sets the variables to be used with the \"tonemap\" post-process effect. See "
 "[Environment] for more details."
@@ -17513,9 +17374,6 @@ msgstr ""
 "Establece el escenario en el que se encuentra la instancia. El escenario es "
 "el mundo tridimensional en el que se mostrarán los objetos."
 
-msgid "Not implemented in Godot 3.x."
-msgstr "No se implementó en Godot 3.x."
-
 msgid "Returns the value of a certain material's parameter."
 msgstr "Devuelve el valor del parámetro de un determinado material."
 
@@ -17716,9 +17574,6 @@ msgstr ""
 "una vez o cada fotograma. Ver [enum ReflectionProbeUpdateMode] para las "
 "opciones."
 
-msgid "Sets the environment that will be used with this scenario."
-msgstr "Establece el entorno que se utilizará con este escenario."
-
 msgid ""
 "Sets the fallback environment to be used by this scenario. The fallback "
 "environment is used if no environment is set. Internally, this is used by "
@@ -17729,23 +17584,6 @@ msgstr ""
 "Internamente, es usado por el editor para proporcionar un entorno por "
 "defecto."
 
-msgid ""
-"If [code]true[/code], the engine will generate wireframes for use with the "
-"wireframe debug mode."
-msgstr ""
-"Si [code]true[/code], el motor generará mallas de alambre para su uso con el "
-"modo de depuración de mallas de alambre."
-
-msgid ""
-"Sets the default clear color which is used when a specific clear color has "
-"not been selected."
-msgstr ""
-"Establece el color claro predeterminado que se utiliza cuando no se ha "
-"seleccionado un color claro específico."
-
-msgid "Returns a shader's code."
-msgstr "Devuelve un código de shader."
-
 msgid "Returns the [Transform2D] set for a specific bone of this skeleton."
 msgstr ""
 "Devuelve el conjunto [Transform] para un hueso específico de este esqueleto."
@@ -17789,21 +17627,9 @@ msgstr ""
 "Establece el modo de dibujo de depuración de un viewport. Ver [enum "
 "ViewportDebugDraw] para las opciones."
 
-msgid "If [code]true[/code], the viewport's canvas is not rendered."
-msgstr "Si [code]true[/code], el canvas del viewport no se renderiza."
-
 msgid "Sets the viewport's global transformation matrix."
 msgstr "Establece la matriz de transformación global del Viewport."
 
-msgid "Sets the viewport's parent to another viewport."
-msgstr "Establece el padre del viewport a otra viewport."
-
-msgid "Sets the shadow atlas quadrant's subdivision."
-msgstr "Establece la subdivisión del cuadrante del atlas de las sombras."
-
-msgid "Sets the viewport's width and height."
-msgstr "Establece el ancho y la altura del viewport."
-
 msgid ""
 "If [code]true[/code], the viewport renders its background as transparent."
 msgstr "Si [code]true[/code], el viewport hace que su fondo sea transparente."
@@ -17836,24 +17662,12 @@ msgstr "La capa Z mínima para los objetos del canvas."
 msgid "The maximum Z-layer for canvas items."
 msgstr "La máxima capa Z para los objetos del canvas."
 
-msgid ""
-"Max number of glow levels that can be used with glow post-process effect."
-msgstr ""
-"Número máximo de niveles de brillo que se pueden utilizar con el efecto de "
-"post-procesado de brillo."
-
-msgid "Unused enum in Godot 3.x."
-msgstr "La lista no utilizada en Godot 3.x."
-
 msgid "Shader is a 3D shader."
 msgstr "Shader es un shader 3D."
 
 msgid "Shader is a 2D shader."
 msgstr "Shader es un shader 2D."
 
-msgid "Shader is a particle shader."
-msgstr "Shader es un shader de partículas."
-
 msgid "Represents the size of the [enum ShaderMode] enum."
 msgstr "Representa el tamaño del enum [enum ShaderMode]."
 
@@ -17863,46 +17677,27 @@ msgstr "La prioridad mínima de renderizado de todos los materiales."
 msgid "The maximum renderpriority of all materials."
 msgstr "La máxima prioridad de renderización de todos los materiales."
 
-msgid "Array is a vertex array."
-msgstr "El array es un array de vértices."
-
 msgid "Array is a normal array."
 msgstr "El array es un array normales."
 
 msgid "Array is a tangent array."
 msgstr "El Array es una array de tangentes."
 
-msgid "Array is a color array."
-msgstr "El Array es un array de colores."
-
 msgid "Array is an UV coordinates array."
 msgstr "El Array es un array de coordenadas UV."
 
-msgid "Array is an UV coordinates array for the second UV coordinates."
-msgstr ""
-"El Array es un array de coordenadas UV para las segundas coordenadas UV."
-
 msgid "Array contains bone information."
 msgstr "El Array contiene información sobre los huesos."
 
 msgid "Array is weight information."
 msgstr "El Array contiene la información de pesos."
 
-msgid "Array is index array."
-msgstr "El Array es un array de índices."
-
-msgid "Flag used to mark a vertex array."
-msgstr "Bandera usada para marcar un array de vértices."
-
 msgid "Flag used to mark a normal array."
 msgstr "Bandera usada para marcar una array de normales."
 
 msgid "Flag used to mark a tangent array."
 msgstr "Bandera usada para marcar un array de tangentes."
 
-msgid "Flag used to mark a color array."
-msgstr "Bandera usada para marcar un array de colores."
-
 msgid "Flag used to mark an UV coordinates array."
 msgstr "Bandera usada para marcar un conjunto de coordenadas UV."
 
@@ -17947,15 +17742,6 @@ msgstr "Representa el tamaño del enum [enum PrimitiveType]."
 msgid "Use [Transform2D] to store MultiMesh transform."
 msgstr "Use [Transform2D] para almacenar la transformada de MultiMalla."
 
-msgid "Is a directional (sun) light."
-msgstr "Es una luz direccional (sol)."
-
-msgid "Is an omni light."
-msgstr "Es una luz omnipresente."
-
-msgid "Is a spot light."
-msgstr "Es un foco de luz."
-
 msgid "The light's influence on specularity."
 msgstr "La influencia de la luz en la especularidad."
 
@@ -17971,9 +17757,6 @@ msgstr "El ángulo del foco."
 msgid "The spotlight's attenuation."
 msgstr "La atenuación del foco."
 
-msgid "Max distance that shadows will be rendered."
-msgstr "La distancia máxima a la que las sombras se renderizarán."
-
 msgid "Proportion of shadow atlas occupied by the first split."
 msgstr "Proporción de atlas de sombras ocupados por la primera división."
 
@@ -18046,31 +17829,6 @@ msgstr "Clasificar las partículas en función de su vida útil."
 msgid "Sort particles based on their distance to the camera."
 msgstr "Clasifica las partículas según su distancia a la cámara."
 
-msgid "Do not update the viewport."
-msgstr "No actualice el viewport."
-
-msgid "Update the viewport once then set to disabled."
-msgstr "Actualiza el viewport una vez y luego ponlo en desactivado."
-
-msgid "Update the viewport whenever it is visible."
-msgstr "Actualice el viewport siempre que sea visible."
-
-msgid "Always update the viewport."
-msgstr "Siempre actualiza el viewport."
-
-msgid "The viewport is always cleared before drawing."
-msgstr "El viewport siempre se limpia antes de dibujar."
-
-msgid "The viewport is never cleared before drawing."
-msgstr "El viewport nunca se limpia antes de dibujar."
-
-msgid ""
-"The viewport is cleared once, then the clear mode is set to [constant "
-"VIEWPORT_CLEAR_NEVER]."
-msgstr ""
-"El viewport se borra una vez, luego el modo de borrado se establece en "
-"[constant VIEWPORT_CLEAR_NEVER]."
-
 msgid "Number of objects drawn in a single frame."
 msgstr "Número de objetos dibujados en un solo fotograma."
 
@@ -18424,15 +18182,6 @@ msgstr ""
 "Añade una etiqueta [code]font[/code] a la pila de etiquetas. Anula las "
 "fuentes predeterminadas para su duración."
 
-msgid ""
-"Adds a [code][font][/code] tag with a italics font to the tag stack. This is "
-"the same as adding a [code][i][/code] tag if not currently in a [code][b][/"
-"code] tag."
-msgstr ""
-"Añade una etiqueta [code]font[/code] con una fuente en cursiva a la pila de "
-"etiquetas. Esto es lo mismo que añadir una etiqueta [code]i[/code] si no "
-"está actualmente en una etiqueta [code]b[/code]."
-
 msgid "Adds a [code][font][/code] tag with a monospace font to the tag stack."
 msgstr ""
 "Añade una etiqueta [code]font[/code] con una fuente monoespacio a la pila de "
@@ -18964,12 +18713,6 @@ msgstr ""
 "hijos enfocados (incluyendo los niños indirectos) para asegurarse de que son "
 "completamente visibles."
 
-msgid "The current horizontal scroll value."
-msgstr "El valor actual de desplazamiento horizontal."
-
-msgid "The current vertical scroll value."
-msgstr "El valor actual de scroll vertical."
-
 msgid "Emitted when scrolling stops."
 msgstr "Emitido cuando el scroll se detiene."
 
@@ -19659,13 +19402,6 @@ msgstr ""
 msgid "Returns the smallest border width out of all four borders."
 msgstr "Devuelve el menor ancho de borde de los cuatro bordes."
 
-msgid ""
-"This changes the size of the faded ring. Higher values can be used to "
-"achieve a \"blurry\" effect."
-msgstr ""
-"Esto cambia el tamaño del anillo descolorido. Se pueden usar valores más "
-"altos para lograr un efecto \"borroso\"."
-
 msgid "The background color of the stylebox."
 msgstr "El color de fondo de la caja de estilo."
 
@@ -22202,9 +21938,6 @@ msgstr "[VideoStream] recurso para los videos de Ogg Theora."
 msgid "Returns the visible rectangle in global screen coordinates."
 msgstr "Devuelve el RID del viewport del [VisualServer]."
 
-msgid "Stops the input from propagating further down the [SceneTree]."
-msgstr "Evita que la entrada se propague más abajo en el [SceneTree]."
-
 msgid ""
 "Sets the number of subdivisions to use in the specified quadrant. A higher "
 "number of subdivisions allows you to have more shadows in the scene at once, "
@@ -22328,13 +22061,6 @@ msgstr "Los objetos se muestran en el estilo wireframe."
 msgid "Texture which displays the content of a [Viewport]."
 msgstr "Textura que muestra el contenido de un [Viewport]."
 
-msgid ""
-"The path to the [Viewport] node to display. This is relative to the scene "
-"root, not to the node which uses the texture."
-msgstr ""
-"La ruta al nodo [Viewport] para visualizar. Es relativa a la raíz de la "
-"escena, no al nodo que usa la textura."
-
 msgid "Enables certain nodes only when approximately visible."
 msgstr "Habilita ciertos nodos sólo cuando son aproximadamente visibles."
 

+ 202 - 384
doc/translations/fr.po

@@ -68,13 +68,14 @@
 # GuruWP <[email protected]>, 2023.
 # Paul Cordellier <[email protected]>, 2023.
 # Alexis Robin <[email protected]>, 2023.
+# "Dimitri A." <[email protected]>, 2023.
 msgid ""
 msgstr ""
 "Project-Id-Version: Godot Engine class reference\n"
 "Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2023-04-03 15:09+0000\n"
-"Last-Translator: Paul Cordellier <cordellierp@gmail.com>\n"
+"PO-Revision-Date: 2023-04-30 10:49+0000\n"
+"Last-Translator: \"Dimitri A.\" <dimitripilot3@gmail.com>\n"
 "Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
 "godot-class-reference/fr/>\n"
 "Language: fr\n"
@@ -82,7 +83,7 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.17-dev\n"
+"X-Generator: Weblate 4.18-dev\n"
 
 msgid "Description"
 msgstr "Description"
@@ -389,56 +390,6 @@ msgstr ""
 "[, res://test.gd, bar]\n"
 "[/codeblock]"
 
-msgid ""
-"Returns [code]true[/code] if [param value] is an instance of [param type]. "
-"The [param type] value must be one of the following:\n"
-"- A constant from the [enum Variant.Type] enumeration, for example [constant "
-"TYPE_INT].\n"
-"- An [Object]-derived class which exists in [ClassDB], for example [Node].\n"
-"- A [Script] (you can use any class, including inner one).\n"
-"Unlike the right operand of the [code]is[/code] operator, [param type] can "
-"be a non-constant value. The [code]is[/code] operator supports more features "
-"(such as typed arrays) and is more performant. Use the operator instead of "
-"this method if you do not need dynamic type checking.\n"
-"Examples:\n"
-"[codeblock]\n"
-"print(is_instance_of(a, TYPE_INT))\n"
-"print(is_instance_of(a, Node))\n"
-"print(is_instance_of(a, MyClass))\n"
-"print(is_instance_of(a, MyClass.InnerClass))\n"
-"[/codeblock]\n"
-"[b]Note:[/b] If [param value] and/or [param type] are freed objects (see "
-"[method @GlobalScope.is_instance_valid]), or [param type] is not one of the "
-"above options, this method will raise an runtime error.\n"
-"See also [method @GlobalScope.typeof], [method type_exists], [method Array."
-"is_same_typed] (and other [Array] methods)."
-msgstr ""
-"Renvoie [code]true[/code] si [param value] est une instance de [param type]. "
-"La valeur de [param type] doit être l'une des suivantes :\n"
-"- Une constante de l'énumération [enum Variant.Type], par exemple [constant "
-"TYPE_INT].\n"
-"- Une classe dérivée de [Object] qui existe dans [ClassDB], par exemple "
-"[Node].\n"
-"- Un [Script] (vous pouvez utiliser n'importe quelle classe, y compris une "
-"classe interne).\n"
-"Contrairement à l'opérande droit de l'opérateur [code]is[/code], [param "
-"type] peut être une valeur non constante. L'opérateur [code]is[/code] prend "
-"en charge davantage de fonctionnalités (telles que les tableaux typés) et "
-"est plus performant. Utilisez l'opérateur au lieu de cette méthode si vous "
-"n'avez pas besoin d'une vérification dynamique des types.\n"
-"Exemples :\n"
-"[bloc de code]\n"
-"print(is_instance_of(a, TYPE_INT))\n"
-"print(is_instance_of(a, Node))\n"
-"print(is_instance_of(a, MyClass))\n"
-"print(is_instance_of(a, MyClass.InnerClass))\n"
-"[/codeblock]\n"
-"[b]Note :[/b] Si [param value] et/ou [param type] sont des objets libérés "
-"(voir [method @GlobalScope.is_instance_valid]), ou si [param type] n'est pas "
-"l'une des options ci-dessus, cette méthode lèvera une erreur d'exécution.\n"
-"Voir aussi [method @GlobalScope.typeof], [method type_exists], [method Array."
-"is_same_typed] (et autres méthodes [Array])."
-
 msgid ""
 "Returns the length of the given Variant [param var]. The length can be the "
 "character count of a [String], the element count of any array type or the "
@@ -464,58 +415,6 @@ msgstr ""
 "len(a) # Renvoie 6\n"
 "[/codeblock]"
 
-msgid ""
-"Returns a [Resource] from the filesystem located at the absolute [param "
-"path]. Unless it's already referenced elsewhere (such as in another script "
-"or in the scene), the resource is loaded from disk on function call, which "
-"might cause a slight delay, especially when loading large scenes. To avoid "
-"unnecessary delays when loading something multiple times, either store the "
-"resource in a variable or use [method preload].\n"
-"[b]Note:[/b] Resource paths can be obtained by right-clicking on a resource "
-"in the FileSystem dock and choosing \"Copy Path\", or by dragging the file "
-"from the FileSystem dock into the current script.\n"
-"[codeblock]\n"
-"# Load a scene called \"main\" located in the root of the project directory "
-"and cache it in a variable.\n"
-"var main = load(\"res://main.tscn\") # main will contain a PackedScene "
-"resource.\n"
-"[/codeblock]\n"
-"[b]Important:[/b] The path must be absolute. A relative path will always "
-"return [code]null[/code].\n"
-"This function is a simplified version of [method ResourceLoader.load], which "
-"can be used for more advanced scenarios.\n"
-"[b]Note:[/b] Files have to be imported into the engine first to load them "
-"using this function. If you want to load [Image]s at run-time, you may use "
-"[method Image.load]. If you want to import audio files, you can use the "
-"snippet described in [member AudioStreamMP3.data]."
-msgstr ""
-"Retourne une [Resource] depuis le système de fichiers localisé au chemin "
-"absolu [param path]. Sauf si cela est déjà référencé autre part (comme dans "
-"un autre script ou dans une scène), la ressource est chargée depuis le "
-"disque sur un appel de fonction, qui peut causé un petit délai, en "
-"particulier pendant le chargement de larges scènes. Pour éviter des délais "
-"inutiles lorsque vous chargez quelque chose plusieurs fois, vous pouvez "
-"stocker la ressource dans une variable ou utiliser [method preload].\n"
-"[b]Note :[/b] Les chemins des ressources peuvent être obtenus en faisant un "
-"clic droit sur une ressource dans la barre d'outils du système de fichiers "
-"et en choisissant \"Copier le chemin\", ou en déplaçant le fichier du "
-"système de fichiers vers le script actuel.\n"
-"[codeblock]\n"
-"# Charge une scène appelée \"main\" située dans la racine du répertoire du "
-"projet et la stocke dans une variable.\n"
-"var main = load(\"res://main.tscn\") # main contiendra une ressource "
-"PackedScene.\n"
-"[/codeblock]\n"
-"[b]Important :[/b] Le chemin doit être absolu. Un chemin relatif retournera "
-"toujours [code]null[/code].\n"
-"Cette fonction est une version simplifiée de [method ResourceLoader.load], "
-"qui peut être utilisée pour des scénarios plus avancés.\n"
-"[b]Note :[/b] Les fichiers doivent être importés dans le moteur de jeu en "
-"premier pour qu'ils soient chargés en utilisant cette fonction. Si vous "
-"voulez importer des [Image]s au run-time vous pouvez utiliser [method Image."
-"load]. Si vous voulez importer des fichiers audio, vous pouvez utiliser "
-"l'extrait décrit dans [member AudioStreamMP3.data]."
-
 msgid ""
 "Returns a [Resource] from the filesystem located at [param path]. During run-"
 "time, the resource is loaded when the script is being parsed. This function "
@@ -929,25 +828,6 @@ msgstr "Constantes et fonction à portée globale."
 msgid "Random number generation"
 msgstr "Génération de nombres aléatoires"
 
-msgid ""
-"Returns the arc cosine of [param x] in radians. Use to get the angle of "
-"cosine [param x]. [param x] must be between [code]-1.0[/code] and [code]1.0[/"
-"code] (inclusive), otherwise, [method acos] will return [constant @GDScript."
-"NAN].\n"
-"[codeblock]\n"
-"# c is 0.523599 or 30 degrees if converted with rad_to_deg(c)\n"
-"var c = acos(0.866025)\n"
-"[/codeblock]"
-msgstr ""
-"Renvoie le cosinus inverse de [param x] en radians. À utiliser pour obtenir "
-"l'angle du cosinus [param x]. [param x] doit être entre [code]-1.0[/code] et "
-"[code]1.0[/code] (inclus), dans le cas contraire, [method acos] retournera "
-"[constant @GDScript.NAN].\n"
-"[codeblock]\n"
-"# c vaut 0.523599 ou 30 degrés si converti avec rad2deg(s)\n"
-"c = acos(0.866025)\n"
-"[/codeblock]"
-
 msgid "Converts from decibels to linear energy (audio)."
 msgstr "Convertit les décibels en énergie linéaire (audio)."
 
@@ -2008,6 +1888,45 @@ msgstr ""
 "Retourne [code]true[/code] si cette [AABB] en recouvre complètement une "
 "autre."
 
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblocks]\n"
+"[gdscript]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/gdscript]\n"
+"[csharp]\n"
+"// position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = new Aabb(new Vector3(-3, 2, 0), new Vector3(1, 1, 1));\n"
+"// position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB "
+"and Vector3(0, -1, 2)\n"
+"var box2 = box.Expand(new Vector3(0, -1, 2));\n"
+"[/csharp]\n"
+"[/codeblocks]"
+msgstr ""
+"Retourne une copie de ce [AABB] élargi afin d'inclure un point donné.\n"
+"[b]Exemple :[/b]\n"
+"[codeblocks]\n"
+"[gdscript]\n"
+"# Occupe la position (-3, 2, 0) avec une taille de (1, 1, 1).\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# Occupe la position (-3, -1, 0) avec une taille de (3, 4, 2) afin d'inclure "
+"le point défini par Vector3(0, -1, 2) en plus du AABB d'origine.\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/gdscript]\n"
+"[csharp]\n"
+"// Occupe la position (-3, 2, 0) avec une taille de (1, 1, 1).\n"
+"var box = new Aabb(new Vector3(-3, 2, 0), new Vector3(1, 1, 1));\n"
+"// Occupe la position (-3, -1, 0) avec une taille de (3, 4, 2) afin "
+"d'inclure le point défini par Vector3(0, -1, 2) en plus du AABB d'origine.\n"
+"var box2 = box.Expand(new Vector3(0, -1, 2));\n"
+"[/csharp]\n"
+"[/codeblocks]"
+
 msgid ""
 "Returns the center of the [AABB], which is equal to [member position] + "
 "([member size] / 2)."
@@ -2196,7 +2115,7 @@ msgid "Maximum value for the mode enum."
 msgstr "Valeur maximale pour le mode énumeration."
 
 msgid "3D Physics Tests Demo"
-msgstr "Démo des tests de physique 3D"
+msgstr "Démo de tests physiques en 3D"
 
 msgid "Third Person Shooter Demo"
 msgstr "Démo de tir à la troisième personne"
@@ -3121,6 +3040,12 @@ msgstr ""
 msgid "Using Area2D"
 msgstr "Utiliser les Area2D"
 
+msgid "2D Pong Demo"
+msgstr "Démo 2D « Pong »"
+
+msgid "2D Platformer Demo"
+msgstr "Démo de jeu de plateforme en 2D"
+
 msgid ""
 "Returns a list of intersecting [Area2D]s. The overlapping area's [member "
 "CollisionObject2D.collision_layer] must be part of this area's [member "
@@ -3184,7 +3109,7 @@ msgid "This area does not affect gravity/damping."
 msgstr "Cette aire n'influe pas sur la gravité/amortissement."
 
 msgid "GUI in 3D Demo"
-msgstr "Démo des interfaces en 3D"
+msgstr "Démo d'interface graphique en 3D"
 
 msgid ""
 "The rate at which objects stop spinning in this area. Represents the angular "
@@ -3317,24 +3242,6 @@ msgstr ""
 msgid "Returns [code]true[/code] if the array is empty."
 msgstr "Retourne [code]true[/code] si le tableau est vide."
 
-msgid ""
-"Returns the maximum value contained in the array if all elements are of "
-"comparable types. If the elements can't be compared, [code]null[/code] is "
-"returned."
-msgstr ""
-"Retourne la valeur maximale contenue dans le tableau si tous les éléments "
-"peuvent être comparés entre eux. Si les éléments ne peuvent pas être "
-"comparés, [code]null[/code] est retourné."
-
-msgid ""
-"Returns the minimum value contained in the array if all elements are of "
-"comparable types. If the elements can't be compared, [code]null[/code] is "
-"returned."
-msgstr ""
-"Retourne la valeur minimale contenue dans le tableau si tous les éléments "
-"peuvent être comparés entre eux. Si les éléments ne peuvent pas être "
-"comparés, [code]null[/code] est retourné."
-
 msgid ""
 "Removes and returns the last element of the array. Returns [code]null[/code] "
 "if the array is empty, without printing an error message. See also [method "
@@ -4207,9 +4114,6 @@ msgstr "Démo du générateur audio"
 msgid "Returns the length of the audio stream in seconds."
 msgstr "Retourne la durée en secondes du flux audio."
 
-msgid "Audio stream that generates sounds procedurally."
-msgstr "Un flux audio qui génère des sons de manière procédurale."
-
 msgid ""
 "The length of the buffer to generate (in seconds). Lower values result in "
 "less latency, but require the script to generate audio data faster, "
@@ -4755,9 +4659,6 @@ msgstr ""
 "La texture utilisée pour contrôler la rugosité par pixel. Multipliée par "
 "[membre roughness]."
 
-msgid "The strength of the subsurface scattering effect."
-msgstr "L'intensité de l'effet de transluminance."
-
 msgid ""
 "If [code]true[/code], instead of using [code]UV2[/code] textures will use a "
 "triplanar texture lookup to determine how to apply textures. Triplanar uses "
@@ -5011,7 +4912,7 @@ msgid "Matrix Transform Demo"
 msgstr "Démo de transformation matricielle"
 
 msgid "2.5D Demo"
-msgstr "Démo 2.5D"
+msgstr "Démo 2,5D"
 
 msgid "Constructs a pure rotation basis matrix from the given quaternion."
 msgstr ""
@@ -5209,13 +5110,13 @@ msgstr ""
 "Le nombre de boucles de bord supplémentaires insérées le long de l'axe X."
 
 msgid "3D Kinematic Character Demo"
-msgstr "Démo de caractère cinématique 3D"
+msgstr "Démo de personnage cinématique en 3D"
 
 msgid "Standard themed Button."
 msgstr "Bouton thématique standard."
 
 msgid "OS Test Demo"
-msgstr "Démo de test de système d'exploitation"
+msgstr "Démo de test des fonctions OS (système d'exploitation)"
 
 msgid ""
 "When this property is enabled, text that is too large to fit the button is "
@@ -5287,6 +5188,23 @@ msgstr "Émis lorsqu’un des boutons de ce groupe est appuyé."
 msgid "Calls the specified method after optional delay."
 msgstr "Appelle la méthode spécifiée après un délai optionnel."
 
+msgid ""
+"Makes the callback call delayed by given time in seconds.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"var tween = get_tree().create_tween()\n"
+"tween.tween_callback(queue_free).set_delay(2) #this will call queue_free() "
+"after 2 seconds\n"
+"[/codeblock]"
+msgstr ""
+"Retarde l'appel par le temps donné en secondes.\n"
+"[b]Exemple :[/b]\n"
+"[codeblock]\n"
+"var tween = get_tree().create_tween()\n"
+"tween.tween_callback(queue_free).set_delay(2) # Ceci va appeler queue_free() "
+"après 2 secondes\n"
+"[/codeblock]"
+
 msgid "Camera node for 2D scenes."
 msgstr "Nœud de caméra pour les scènes en 2D."
 
@@ -5294,7 +5212,7 @@ msgid "2D Isometric Demo"
 msgstr "Démo 2D isométrique"
 
 msgid "2D HDR Demo"
-msgstr "Démo 2D HDR"
+msgstr "Démo de plage dynamique étendue (HDR) en 2D"
 
 msgid "Aligns the camera to the tracked node."
 msgstr "Aligne la caméra sur le nœud suivi."
@@ -5353,7 +5271,7 @@ msgid "The camera updates with the [code]_process[/code] callback."
 msgstr "La caméra se met à jour durant l'appel de [code]_process[/code]."
 
 msgid "Camera node, displays from a point of view."
-msgstr "Nœud de caméra, affiche d'un point de vue."
+msgstr "Un nœud de caméra ; affichage d'un point de vue."
 
 msgid ""
 "Makes this camera the current camera for the [Viewport] (see class "
@@ -5387,6 +5305,36 @@ msgstr ""
 "la caméra. Ceci est utile pour lancer des rayons sous la forme (origine, "
 "normale) pour l'intersection ou la sélection d'objets."
 
+msgid ""
+"Returns the 2D coordinate in the [Viewport] rectangle that maps to the given "
+"3D point in world space.\n"
+"[b]Note:[/b] When using this to position GUI elements over a 3D viewport, "
+"use [method is_position_behind] to prevent them from appearing if the 3D "
+"point is behind the camera:\n"
+"[codeblock]\n"
+"# This code block is part of a script that inherits from Node3D.\n"
+"# `control` is a reference to a node inheriting from Control.\n"
+"control.visible = not get_viewport().get_camera_3d()."
+"is_position_behind(global_transform.origin)\n"
+"control.position = get_viewport().get_camera_3d()."
+"unproject_position(global_transform.origin)\n"
+"[/codeblock]"
+msgstr ""
+"Retourne les coordonnées 2D dans le rectangle du [Viewport] qui "
+"correspondent à un point 3D donné dans l'espace du monde.\n"
+"[b]Note :[/b] Lorsque vous utilisez cette méthode pour positionner des "
+"éléments graphiques sur un [Viewport] en 3D, pensez à utiliser [method "
+"is_position_behind] pour les empêcher d'apparaître tant que le point 3D se "
+"trouve derrière la caméra :\n"
+"[codeblock]\n"
+"# Cet extrait de code fait partie d'un script qui hérite de Node3D.\n"
+"# `control` fait référence à un nœud qui hérite de Control.\n"
+"control.visible = not get_viewport().get_camera_3d()."
+"is_position_behind(global_transform.origin)\n"
+"control.position = get_viewport().get_camera_3d()."
+"unproject_position(global_transform.origin)\n"
+"[/codeblock]"
+
 msgid "The [Environment] to use for this camera."
 msgstr "L'[Environment] à utiliser pour cette caméra."
 
@@ -5649,13 +5597,6 @@ msgstr ""
 msgid "Returns the [RID] of the [World2D] canvas where this item is in."
 msgstr "Retourne le [RID] de la toile [World2D] où cet élément se trouve."
 
-msgid ""
-"Returns the mouse's position in the [CanvasLayer] that this [CanvasItem] is "
-"in using the coordinate system of the [CanvasLayer]."
-msgstr ""
-"Retourne la position de la souris dans le [CanvasLayer] que ce [CanvasItem] "
-"utilise suivant le système de coordonnées du [CanvasLayer]."
-
 msgid ""
 "Returns the mouse's position in this [CanvasItem] using the local coordinate "
 "system of this [CanvasItem]."
@@ -5719,21 +5660,6 @@ msgstr ""
 "Si [code]true[/code], la propriété [member material] du [CanvasItem] parent "
 "est utilisée comme matériau de celui-ci."
 
-msgid ""
-"If [code]true[/code], this [CanvasItem] is drawn. The node is only visible "
-"if all of its antecedents are visible as well (in other words, [method "
-"is_visible_in_tree] must return [code]true[/code]).\n"
-"[b]Note:[/b] For controls that inherit [Popup], the correct way to make them "
-"visible is to call one of the multiple [code]popup*()[/code] functions "
-"instead."
-msgstr ""
-"Si [code]true[/code], ce [CanvasItem] est affiché. Le nœud n'est visible que "
-"si tous ses parents le sont également (en d'autres termes, [méthode "
-"is_visible_in_tree] doit retourner [code]true[/code]).\n"
-"[b]Note :[/b] Pour les contrôles qui héritent de [Popup], la bonne manière "
-"de les rendre visible est plutôt d'appeler l'une des fonctions [code]popup*()"
-"[/code]."
-
 msgid ""
 "If [code]true[/code], the node's Z index is relative to its parent's Z "
 "index. If this node's Z index is 2 and its parent's effective Z index is 3, "
@@ -5931,7 +5857,7 @@ msgid "Kinematic character (2D)"
 msgstr "Caractère cinématique (2D)"
 
 msgid "2D Kinematic Character Demo"
-msgstr "Démo de caractère cinétique 2D"
+msgstr "Démo de personnage cinématique en 2D"
 
 msgid ""
 "Returns a [KinematicCollision2D], which contains information about the "
@@ -6352,11 +6278,14 @@ msgstr ""
 msgid "A disabled collision shape has no effect in the world."
 msgstr "Une forme de collision désactivée n’a aucun effet dans le monde."
 
+msgid "2D GD Paint Demo"
+msgstr "Démo 2D « GD Paint »"
+
 msgid "Tween Demo"
 msgstr "Démo des Tween"
 
 msgid "GUI Drag And Drop Demo"
-msgstr "Démo de l'interface de déposer-glisser"
+msgstr "Démo de glisser-déplacer dans une interface graphique"
 
 msgid ""
 "The color's alpha component, typically on the range of 0 to 1. A value of 0 "
@@ -7117,16 +7046,7 @@ msgid "Control node gallery"
 msgstr "Galerie des nœuds de contrôle"
 
 msgid "All GUI Demos"
-msgstr "Toutes les démos d'interface"
-
-msgid ""
-"Marks an input event as handled. Once you accept an input event, it stops "
-"propagating, even to nodes listening to [method Node._unhandled_input] or "
-"[method Node._unhandled_key_input]."
-msgstr ""
-"Marque un événement d'entrée comme traité. Une fois l'événement accepté, il "
-"arrête de se propager, même aux nœuds surchargeant les méthodes [method Node."
-"_unhandled_input] ou [method Node._unhandled_key_input]."
+msgstr "Toutes les démos d'interface graphique"
 
 msgid ""
 "Finds the next (below in the tree) [Control] that can receive the focus."
@@ -9825,6 +9745,18 @@ msgstr ""
 "Définit une liste des dossiers récemment visités dans le dialogue de "
 "fichiers de ce projet."
 
+msgid ""
+"The language to use for the editor interface.\n"
+"Translations are provided by the community. If you spot a mistake, "
+"[url=$DOCS_URL/contributing/documentation/editor_and_docs_localization."
+"html]contribute to editor translations on Weblate![/url]"
+msgstr ""
+"La langue à utiliser dans l'interface de l'éditeur.\n"
+"Les traductions sont fournies par la communauté. Si vous apercevez une "
+"erreur, [url=$DOCS_URL/contributing/documentation/"
+"editor_and_docs_localization.html]merci de contribuer aux traductions de "
+"l'éditeur sur Weblate ![/url]"
+
 msgid "Emitted after any editor setting has changed."
 msgstr "Émis après qu'une préférence de l'éditeur a changé."
 
@@ -10567,6 +10499,16 @@ msgstr ""
 "lumières physiques (qui ont une portée infinie). Lors de la création d'une "
 "lumière Godot, la portée est fixée à 4096 unités."
 
+msgid "2D Particles Demo"
+msgstr "Démo des particules en 2D"
+
+msgid ""
+"2D Dodge The Creeps Demo (uses GPUParticles2D for the trail behind the "
+"player)"
+msgstr ""
+"Démo 2D « Dodge The Creeps » (utilise GPUParticles2D pour les traces "
+"derrière le joueur)"
+
 msgid "Returns a rectangle containing the positions of all existing particles."
 msgstr ""
 "Retourne un rectangle contenant la position de toutes les particules "
@@ -10611,9 +10553,6 @@ msgstr ""
 "Une ressource d'interpolation de couleur qui peut être utilisé pour générer "
 "des couleurs entre des points de couleur définis par l'utilisateur."
 
-msgid "Returns the interpolated color specified by [code]offset[/code]."
-msgstr "Retourne la couleur interpolée spécifiée à [code]offset[/code]."
-
 msgid ""
 "Defines how the colors between points of the gradient are interpolated. See "
 "[enum InterpolationMode] for available modes."
@@ -12527,6 +12466,9 @@ msgstr ""
 msgid "Base class for all 3D joints."
 msgstr "La classe parente de tous les joints 3D."
 
+msgid "3D Truck Town Demo"
+msgstr "Démo 3D « Truck Town »"
+
 msgid "The node attached to the first side (A) of the joint."
 msgstr "Le nœud attaché à la première extrémité (A) du joint."
 
@@ -13098,6 +13040,18 @@ msgstr "Appelé une fois lors de l’initialisation."
 msgid "Emitted when a user responds to a permission request."
 msgstr "Émis quand l'utilisateur répond à une demande de permission."
 
+msgid ""
+"Notification received when translations may have changed. Can be triggered "
+"by the user changing the locale. Can be used to respond to language changes, "
+"for example to change the UI strings on the fly. Useful when working with "
+"the built-in translation support, like [method Object.tr]."
+msgstr ""
+"La notification reçue quand les traductions peuvent avoir changé. Peut être "
+"déclenchée quand l'utilisateur modifie les paramètres régionaux. Permet de "
+"réagir aux changements de langue, par exemple en modifiant le texte des "
+"interfaces utilisateur à la volée. Pratique lorsque vous utilisez la prise "
+"en charge intégrée des traductions, comme par le biais de [method Object.tr]."
+
 msgid ""
 "Notification received from Godot's crash handler when the engine is about to "
 "crash.\n"
@@ -13636,9 +13590,6 @@ msgstr ""
 "d'exécution.\n"
 "[b]Note :[/b] Si n'est à l'intérieur d'un RPC, cette méthode retournera 0."
 
-msgid "WebRTC Signaling Demo"
-msgstr "Démo des signaux WebRTC"
-
 msgid ""
 "Returns the current state of the connection. See [enum ConnectionStatus]."
 msgstr "Retourne l'état actuel de la connexion. Voir [enum ConnexionStatus]."
@@ -13837,6 +13788,12 @@ msgstr ""
 "les zones d'un environnement qui peuvent être traversés pour aider les "
 "agents dans leur cheminement dans les espaces compliqués."
 
+msgid "3D Navmesh Demo"
+msgstr "Démo de NavigationMesh (« navmesh ») en 3D"
+
+msgid "Using NavigationMeshes"
+msgstr "Utiliser les NavigationMesh"
+
 msgid ""
 "Adds a polygon using the indices of the vertices you get when calling "
 "[method get_vertices]."
@@ -14842,17 +14799,6 @@ msgstr ""
 "Retourne si ce nœud utilise une échelle de [code](1, 1, 1)[/code] ou son "
 "échelle de transformation locale."
 
-msgid ""
-"Returns [code]true[/code] if the node is present in the [SceneTree], its "
-"[member visible] property is [code]true[/code] and all its antecedents are "
-"also visible. If any antecedent is hidden, this node will not be visible in "
-"the scene tree."
-msgstr ""
-"Retourne [code]true[/code] si le nœud est présent dans le [SceneTree], que "
-"sa propriété [member visible] est [code]true[/code] et que tous ses parents "
-"sont également visibles. Si un parent est caché, ce nœud ne sera pas visible "
-"dans l'arborescence de la scène."
-
 msgid ""
 "Rotates the local transformation around axis, a unit [Vector3], by specified "
 "angle in radians."
@@ -15492,75 +15438,6 @@ msgstr ""
 "d'envoyer des paquets à une adresse de diffusion (par exemple "
 "[code]255.255.255[/code])."
 
-msgid ""
-"Waits for a packet to arrive on the bound address. See [method bind].\n"
-"[b]Note:[/b] [method wait] can't be interrupted once it has been called. "
-"This can be worked around by allowing the other party to send a specific "
-"\"death pill\" packet like this:\n"
-"[codeblocks]\n"
-"[gdscript]\n"
-"socket = PacketPeerUDP.new()\n"
-"# Server\n"
-"socket.set_dest_address(\"127.0.0.1\", 789)\n"
-"socket.put_packet(\"Time to stop\".to_ascii())\n"
-"\n"
-"# Client\n"
-"while socket.wait() == OK:\n"
-"    var data = socket.get_packet().get_string_from_ascii()\n"
-"    if data == \"Time to stop\":\n"
-"        return\n"
-"[/gdscript]\n"
-"[csharp]\n"
-"var socket = new PacketPeerUDP();\n"
-"// Server\n"
-"socket.SetDestAddress(\"127.0.0.1\", 789);\n"
-"socket.PutPacket(\"Time to stop\".ToAscii());\n"
-"\n"
-"// Client\n"
-"while (socket.Wait() == OK)\n"
-"{\n"
-"    string data = socket.GetPacket().GetStringFromASCII();\n"
-"    if (data == \"Time to stop\")\n"
-"    {\n"
-"        return;\n"
-"    }\n"
-"}\n"
-"[/csharp]\n"
-"[/codeblocks]"
-msgstr ""
-"Attend qu'un paquet arrive sur l'adresse attachée. Voir [method bind].\n"
-"[b]Note :[/b] [method wait] ne peut pas être interrompu une fois appelé. "
-"Nous pouvons contourner cela en autorisant l'autre partie à envoyer un "
-"paquet \"death pill\" comme cela :\n"
-"[codeblock]\n"
-"# Serveur\n"
-"socket.set_dest_address(\"127.0.0.1\", 789)\n"
-"socket.put_packet(\"Time to stop\".to_ascii())\n"
-"\n"
-"# Client\n"
-"while socket.wait() == OK:\n"
-"    var data = socket.get_packet().get_string_from_ascii()\n"
-"    if data == \"Time to stop\":\n"
-"        return\n"
-"[/gdscript]\n"
-"[csharp]\n"
-"var socket = new PacketPeerUDP();\n"
-"// Serveur\n"
-"socket.SetDestAddress(\"127.0.0.1\", 789);\n"
-"socket.PutPacket(\"Time to stop\".ToAscii());\n"
-"\n"
-"// Client\n"
-"while (socket.Wait() == OK)\n"
-"{\n"
-"    string data = socket.GetPacket().GetStringFromASCII();\n"
-"    if (data == \"Time to stop\")\n"
-"    {\n"
-"        return;\n"
-"    }\n"
-"}\n"
-"[/csharp]\n"
-"[/codeblocks]"
-
 msgid "Provides an opaque background for [Control] children."
 msgstr "Fournis un arrière-plan opaque pour le [Control] enfant."
 
@@ -16359,6 +16236,48 @@ msgstr ""
 "Définit l'ordre d'une valeur de configuration (qui a une influence quand "
 "sauvegardée dans le fichier de configuration)."
 
+msgid ""
+"Sets whether a setting requires restarting the editor to properly take "
+"effect.\n"
+"[b]Note:[/b] This is just a hint to display to the user that the editor must "
+"be restarted for changes to take effect. Enabling [method "
+"set_restart_if_changed] does [i]not[/i] delay the setting being set when "
+"changed."
+msgstr ""
+"Définit si un paramètre exige que l'éditeur soit redémarré afin d'être "
+"correctement pris en compte.\n"
+"[b]Note :[/b] Cela n'aura pour effet que d'indiquer (ou non) à l'utilisateur "
+"que l'éditeur doit être redémarré pour que les changements prennent effet. "
+"Activer [method set_restart_if_changed] [i]ne retarde pas[/i] l'affectation "
+"d'une valeur à un paramètre lorsqu'il est modifié."
+
+msgid ""
+"Sets the value of a setting.\n"
+"[b]Example:[/b]\n"
+"[codeblocks]\n"
+"[gdscript]\n"
+"ProjectSettings.set_setting(\"application/config/name\", \"Example\")\n"
+"[/gdscript]\n"
+"[csharp]\n"
+"ProjectSettings.SetSetting(\"application/config/name\", \"Example\");\n"
+"[/csharp]\n"
+"[/codeblocks]\n"
+"This can also be used to erase custom project settings. To do this change "
+"the setting value to [code]null[/code]."
+msgstr ""
+"Définit la valeur d'un paramètre.\n"
+"[b]Exemple :[/b]\n"
+"[codeblocks]\n"
+"[gdscript]\n"
+"ProjectSettings.set_setting(\"application/config/name\", \"Exemple\")\n"
+"[/gdscript]\n"
+"[csharp]\n"
+"ProjectSettings.SetSetting(\"application/config/name\", \"Exemple\");\n"
+"[/csharp]\n"
+"[/codeblocks]\n"
+"Cela permet aussi de supprimer un paramètre personnalisé du projet : pour ce "
+"faire, remplacez la valeur de ce dernier par [code]null[/code]."
+
 msgid "Background color for the boot splash."
 msgstr "La couleur d'arrière plan pour l'écran de lancement."
 
@@ -16417,6 +16336,14 @@ msgstr ""
 "L'icône utilisée pour le projet, défini au chargement du projet. Les "
 "exportateurs utiliseront également cette icône si possible."
 
+msgid ""
+"Translations of the project's name. This setting is used by OS tools to "
+"translate application name on Android, iOS and macOS."
+msgstr ""
+"Traductions du nom du projet. Ce paramètre est utilisé en interne par le "
+"système d'exploitation afin de traduire le nom de l'application sur Android, "
+"iOS et macOS."
+
 msgid ""
 "Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
 "distance matching[/url] in Zstandard."
@@ -17195,9 +17122,6 @@ msgstr ""
 msgid "2D in 3D Demo"
 msgstr "Démo pour la 2D en 3D"
 
-msgid "Quaternion."
-msgstr "Quaternion."
-
 msgid ""
 "Constructs a quaternion that will rotate around the given axis by the "
 "specified angle. The axis must be a normalized vector."
@@ -17626,9 +17550,6 @@ msgstr "Efface le [CanvasItem] et enlève toutes les commandes."
 msgid "Sets the index for the [CanvasItem]."
 msgstr "Définit l’index du [CanvasItem]."
 
-msgid "Sets a new material to the [CanvasItem]."
-msgstr "Définit un nouveau matériau pour le [CanvasItem]."
-
 msgid "Sets if the [CanvasItem] uses its parent's material."
 msgstr "Définit si le [CanvasItem] utilise le même matériau que son parent."
 
@@ -17690,13 +17611,6 @@ msgstr "Définit la forme du polygone occulteur."
 msgid "Modulates all colors in the given canvas."
 msgstr "Module toutes les couleurs du canevas spécifié."
 
-msgid ""
-"Sets the [i]BGMode[/i] of the environment. Equivalent to [member Environment."
-"background_mode]."
-msgstr ""
-"Définit le mode d'arrière-plan [i]BGMode[/i] de l'environnement. Équivalent "
-"à [member Environment.background_mode]."
-
 msgid "Sets the intensity of the background color."
 msgstr "Définit l'intensité de la couleur de l'arrière-plan."
 
@@ -17745,9 +17659,6 @@ msgstr ""
 "Définit le drapeau pour un [enum InstanceFlags] spécifié. Voir [enum "
 "InstanceFlags] pour plus de détails."
 
-msgid "Not implemented in Godot 3.x."
-msgstr "Non mis en œuvre dans Godot 3.x."
-
 msgid "Returns the value of a certain material's parameter."
 msgstr "Retourne la valeur du paramètre du matériau."
 
@@ -17822,9 +17733,6 @@ msgstr ""
 "Retourne [code]true[/code] si les particules ne sont pas émises et qu'elles "
 "sont inactives."
 
-msgid "Returns a shader's code."
-msgstr "Retourne le code d'un shader."
-
 msgid "Returns the [Transform2D] set for a specific bone of this skeleton."
 msgstr ""
 "Retourne la [Transform2D] définie pour l'os spécifié pour ce squelette."
@@ -17865,22 +17773,10 @@ msgstr ""
 "Définit le mode d'affichage de débogage de la fenêtre d'affichage. Voir "
 "[enum ViewportDebugDraw] pour les options."
 
-msgid "If [code]true[/code], the viewport's canvas is not rendered."
-msgstr ""
-"Si [code]true[/code], le canevas de la fenêtre d'affichage n'est pas rendu."
-
 msgid "Sets the viewport's global transformation matrix."
 msgstr ""
 "Définit la matrice de transformation globale de la fenêtre d'affichage."
 
-msgid "Sets the viewport's parent to another viewport."
-msgstr ""
-"Définir le parent de la fenêtre d'affichage par une autre fenêtre "
-"d'affichage."
-
-msgid "Sets the viewport's width and height."
-msgstr "Définit la largeur et la hauteur de la fenêtre d'affichage."
-
 msgid ""
 "If [code]true[/code], the viewport renders its background as transparent."
 msgstr ""
@@ -17898,18 +17794,12 @@ msgid "The maximum Z-layer for canvas items."
 msgstr ""
 "Le niveau maximal du calque de profondeur pour les éléments de canevas."
 
-msgid "Unused enum in Godot 3.x."
-msgstr "Énumération inutilisée dans Godot 3.x."
-
 msgid "Shader is a 3D shader."
 msgstr "Ce shader est utilisé en 3D."
 
 msgid "Shader is a 2D shader."
 msgstr "Ce shader est utilisé en 2D."
 
-msgid "Shader is a particle shader."
-msgstr "Ce shader est utilisé pour les particules."
-
 msgid "Represents the size of the [enum ShaderMode] enum."
 msgstr "Représente la taille de l'énumération [enum ShaderMode]."
 
@@ -17919,45 +17809,27 @@ msgstr "La priorité minimale de rendu de tous les matériaux."
 msgid "The maximum renderpriority of all materials."
 msgstr "La priorité maximale de rendu de tous les matériaux."
 
-msgid "Array is a vertex array."
-msgstr "Le tableau est un tableau de sommets."
-
 msgid "Array is a normal array."
 msgstr "Le tableau est un tableau normal."
 
 msgid "Array is a tangent array."
 msgstr "Le tableau est un tableau de tangentes."
 
-msgid "Array is a color array."
-msgstr "Le tableau est un tableau de couleurs."
-
 msgid "Array is an UV coordinates array."
 msgstr "Le tableau est un tableau de coordonnées UV."
 
-msgid "Array is an UV coordinates array for the second UV coordinates."
-msgstr "Le tableau est un tableau de coordonnées UV secondaires (UV2)."
-
 msgid "Array contains bone information."
 msgstr "Le tableau contient des informations sur les os."
 
 msgid "Array is weight information."
 msgstr "Le tableau est une information sur le poids."
 
-msgid "Array is index array."
-msgstr "Le tableau est un tableau d'index."
-
-msgid "Flag used to mark a vertex array."
-msgstr "Drapeau utilisé pour marquer un tableau de sommets."
-
 msgid "Flag used to mark a normal array."
 msgstr "Drapeau utilisé pour marquer un tableau de normales."
 
 msgid "Flag used to mark a tangent array."
 msgstr "Drapeau utilisé pour marquer un tableau de tangentes."
 
-msgid "Flag used to mark a color array."
-msgstr "Drapeau utilisé pour marquer un tableau de couleurs."
-
 msgid "Flag used to mark an UV coordinates array."
 msgstr "Drapeau utilisé pour marquer un tableau de coordonnées UV."
 
@@ -17981,15 +17853,6 @@ msgstr "Représente la taille de l'énumération [enum PrimitiveType]."
 msgid "Use [Transform2D] to store MultiMesh transform."
 msgstr "Utiliser [Transform2D] pour stocker la transformation des MultiMesh."
 
-msgid "Is a directional (sun) light."
-msgstr "Est une lumière (solaire) directionnelle."
-
-msgid "Is an omni light."
-msgstr "Est une lumière omnidirectionnelle."
-
-msgid "Is a spot light."
-msgstr "Est une lumière ponctuelle."
-
 msgid "The light's influence on specularity."
 msgstr "L’influence de la lumière sur la spécularité."
 
@@ -18005,9 +17868,6 @@ msgstr "L’angle du projecteur."
 msgid "The spotlight's attenuation."
 msgstr "L'atténuation du projecteur."
 
-msgid "Max distance that shadows will be rendered."
-msgstr "Distance maximale à laquelle les ombres seront rendues."
-
 msgid "Represents the size of the [enum LightParam] enum."
 msgstr "Représente la taille de l'énumération [enum LightParam]."
 
@@ -18047,31 +17907,6 @@ msgstr "Trier les particules par durée de vie."
 msgid "Sort particles based on their distance to the camera."
 msgstr "Trier les particules suivant leur distance à la caméra."
 
-msgid "Do not update the viewport."
-msgstr "Ne pas mettre à jour le viewport."
-
-msgid "Update the viewport once then set to disabled."
-msgstr "Met à jour le fenêtre d'affichage une fois puis arrête les mis à jour."
-
-msgid "Update the viewport whenever it is visible."
-msgstr "Met à jour la fenêtre d'affichage quand elle est visible."
-
-msgid "Always update the viewport."
-msgstr "Toujours mettre à jour la fenêtre d'affichage."
-
-msgid "The viewport is always cleared before drawing."
-msgstr "La fenêtre d'affichage est toujours nettoyée avant d'être dessinée."
-
-msgid "The viewport is never cleared before drawing."
-msgstr "La fenêtre d'affichage n'est jamais nettoyée avant d'être dessinée."
-
-msgid ""
-"The viewport is cleared once, then the clear mode is set to [constant "
-"VIEWPORT_CLEAR_NEVER]."
-msgstr ""
-"La fenêtre d'affichage sera effacée une seule fois, puis passera en mode "
-"[constant VIEWPORT_CLEAR_NEVER]."
-
 msgid "Number of objects drawn in a single frame."
 msgstr "Le nombre d'objets affichés en une seule trame."
 
@@ -18550,12 +18385,6 @@ msgstr "Classe de base pour les barres de défilement."
 msgid "Emitted when the scrollbar is being scrolled."
 msgstr "Émis quand la barre de défilement est défilée."
 
-msgid "The current horizontal scroll value."
-msgstr "La valeur de défilement horizontal actuelle."
-
-msgid "The current vertical scroll value."
-msgstr "La valeur de défilement vertical actuelle."
-
 msgid "Emitted when scrolling stops."
 msgstr "Émis lorsque le défilement s'arrête."
 
@@ -19206,13 +19035,6 @@ msgstr ""
 msgid "Returns the smallest border width out of all four borders."
 msgstr "Retourne la plus fine bordure parmi les quatre bordures."
 
-msgid ""
-"This changes the size of the faded ring. Higher values can be used to "
-"achieve a \"blurry\" effect."
-msgstr ""
-"Cela change la taille de l’anneau fané. Des valeurs plus élevées peuvent "
-"être utilisées pour obtenir un effet « flou »."
-
 msgid "The background color of the stylebox."
 msgstr "La couleur d'arrière-plan de la stylebox."
 
@@ -21602,10 +21424,6 @@ msgstr ""
 "[constant Node. NOTIFICATION_DRAG_END] lorsque vous préférez récupérer "
 "directement la valeur."
 
-msgid "Stops the input from propagating further down the [SceneTree]."
-msgstr ""
-"Arrête la propagation de l'entrée plus profondément dans le [SceneTree]."
-
 msgid "If [code]true[/code], the viewport will process 2D audio streams."
 msgstr "Si [code]true[/code], la fenêtre d'affichage gèrera les flux audio 2D."
 

ファイルの差分が大きいため隠しています
+ 159 - 695
doc/translations/zh_CN.po


+ 5 - 1
drivers/gl_context/SCsub

@@ -10,7 +10,11 @@ if env["platform"] in ["haiku", "macos", "windows", "linuxbsd"]:
     ]
     thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
 
-    env.Prepend(CPPPATH=[thirdparty_dir])
+    # Treat glad headers as system headers to avoid raising warnings. Not supported on MSVC.
+    if not env.msvc:
+        env.Append(CPPFLAGS=["-isystem", Dir(thirdparty_dir).path])
+    else:
+        env.Prepend(CPPPATH=[thirdparty_dir])
 
     env.Append(CPPDEFINES=["GLAD_ENABLED"])
     env.Append(CPPDEFINES=["GLES_OVER_GL"])

+ 4 - 3
drivers/gles3/rasterizer_gles3.cpp

@@ -300,12 +300,13 @@ void RasterizerGLES3::_blit_render_target_to_screen(RID p_render_target, Display
 	}
 
 	GLuint read_fbo = 0;
+	glGenFramebuffers(1, &read_fbo);
+	glBindFramebuffer(GL_READ_FRAMEBUFFER, read_fbo);
+
 	if (rt->view_count > 1) {
-		glGenFramebuffers(1, &read_fbo);
-		glBindFramebuffer(GL_READ_FRAMEBUFFER, read_fbo);
 		glFramebufferTextureLayer(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, rt->color, 0, p_layer);
 	} else {
-		glBindFramebuffer(GL_READ_FRAMEBUFFER, rt->fbo);
+		glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, rt->color, 0);
 	}
 
 	glReadBuffer(GL_COLOR_ATTACHMENT0);

+ 1 - 1
drivers/gles3/storage/material_storage.cpp

@@ -1651,7 +1651,7 @@ MaterialStorage::MaterialStorage() {
 		actions.renames["CAMERA_POSITION_WORLD"] = "scene_data.inv_view_matrix[3].xyz";
 		actions.renames["CAMERA_DIRECTION_WORLD"] = "scene_data.view_matrix[3].xyz";
 		actions.renames["CAMERA_VISIBLE_LAYERS"] = "scene_data.camera_visible_layers";
-		actions.renames["NODE_POSITION_VIEW"] = "(model_matrix * scene_data.view_matrix)[3].xyz";
+		actions.renames["NODE_POSITION_VIEW"] = "(scene_data.view_matrix * model_matrix)[3].xyz";
 
 		actions.renames["VIEW_INDEX"] = "ViewIndex";
 		actions.renames["VIEW_MONO_LEFT"] = "uint(0)";

+ 2 - 2
drivers/pulseaudio/audio_driver_pulseaudio.cpp

@@ -222,8 +222,8 @@ Error AudioDriverPulseAudio::init_output_device() {
 			break;
 	}
 
-	int latency = GLOBAL_GET("audio/driver/output_latency");
-	buffer_frames = closest_power_of_2(latency * mix_rate / 1000);
+	int tmp_latency = GLOBAL_GET("audio/driver/output_latency");
+	buffer_frames = closest_power_of_2(tmp_latency * mix_rate / 1000);
 	pa_buffer_size = buffer_frames * pa_map.channels;
 
 	print_verbose("PulseAudio: detected " + itos(pa_map.channels) + " output channels");

+ 6 - 6
drivers/unix/file_access_unix.cpp

@@ -284,11 +284,11 @@ bool FileAccessUnix::file_exists(const String &p_path) {
 
 uint64_t FileAccessUnix::_get_modified_time(const String &p_file) {
 	String file = fix_path(p_file);
-	struct stat flags = {};
-	int err = stat(file.utf8().get_data(), &flags);
+	struct stat status = {};
+	int err = stat(file.utf8().get_data(), &status);
 
 	if (!err) {
-		return flags.st_mtime;
+		return status.st_mtime;
 	} else {
 		print_verbose("Failed to get modified time for: " + p_file + "");
 		return 0;
@@ -297,11 +297,11 @@ uint64_t FileAccessUnix::_get_modified_time(const String &p_file) {
 
 uint32_t FileAccessUnix::_get_unix_permissions(const String &p_file) {
 	String file = fix_path(p_file);
-	struct stat flags = {};
-	int err = stat(file.utf8().get_data(), &flags);
+	struct stat status = {};
+	int err = stat(file.utf8().get_data(), &status);
 
 	if (!err) {
-		return flags.st_mode & 0x7FF; //only permissions
+		return status.st_mode & 0x7FF; //only permissions
 	} else {
 		ERR_FAIL_V_MSG(0, "Failed to get unix permissions for: " + p_file + ".");
 	}

+ 14 - 34
drivers/vulkan/rendering_device_vulkan.cpp

@@ -2463,10 +2463,10 @@ Error RenderingDeviceVulkan::_texture_update(RID p_texture, uint32_t p_layer, co
 	}
 
 	ERR_FAIL_COND_V_MSG(texture->bound, ERR_CANT_ACQUIRE_RESOURCE,
-			"Texture can't be updated while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
+			"Texture can't be updated while a draw list that uses it as part of a framebuffer is being created. Ensure the draw list is finalized (and that the color/depth texture using it is not set to `RenderingDevice.FINAL_ACTION_CONTINUE`) to update this texture.");
 
 	ERR_FAIL_COND_V_MSG(!(texture->usage_flags & TEXTURE_USAGE_CAN_UPDATE_BIT), ERR_INVALID_PARAMETER,
-			"Texture requires the TEXTURE_USAGE_CAN_UPDATE_BIT in order to be updatable.");
+			"Texture requires the `RenderingDevice.TEXTURE_USAGE_CAN_UPDATE_BIT` to be set to be updatable.");
 
 	uint32_t layer_count = texture->layers;
 	if (texture->type == TEXTURE_TYPE_CUBE || texture->type == TEXTURE_TYPE_CUBE_ARRAY) {
@@ -2739,9 +2739,9 @@ Vector<uint8_t> RenderingDeviceVulkan::texture_get_data(RID p_texture, uint32_t
 	ERR_FAIL_COND_V(!tex, Vector<uint8_t>());
 
 	ERR_FAIL_COND_V_MSG(tex->bound, Vector<uint8_t>(),
-			"Texture can't be retrieved while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
+			"Texture can't be retrieved while a draw list that uses it as part of a framebuffer is being created. Ensure the draw list is finalized (and that the color/depth texture using it is not set to `RenderingDevice.FINAL_ACTION_CONTINUE`) to retrieve this texture.");
 	ERR_FAIL_COND_V_MSG(!(tex->usage_flags & TEXTURE_USAGE_CAN_COPY_FROM_BIT), Vector<uint8_t>(),
-			"Texture requires the TEXTURE_USAGE_CAN_COPY_FROM_BIT in order to be retrieved.");
+			"Texture requires the `RenderingDevice.TEXTURE_USAGE_CAN_COPY_FROM_BIT` to be set to be retrieved.");
 
 	uint32_t layer_count = tex->layers;
 	if (tex->type == TEXTURE_TYPE_CUBE || tex->type == TEXTURE_TYPE_CUBE_ARRAY) {
@@ -2889,9 +2889,9 @@ Error RenderingDeviceVulkan::texture_copy(RID p_from_texture, RID p_to_texture,
 	ERR_FAIL_COND_V(!src_tex, ERR_INVALID_PARAMETER);
 
 	ERR_FAIL_COND_V_MSG(src_tex->bound, ERR_INVALID_PARAMETER,
-			"Source texture can't be copied while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
+			"Source texture can't be copied while a draw list that uses it as part of a framebuffer is being created. Ensure the draw list is finalized (and that the color/depth texture using it is not set to `RenderingDevice.FINAL_ACTION_CONTINUE`) to copy this texture.");
 	ERR_FAIL_COND_V_MSG(!(src_tex->usage_flags & TEXTURE_USAGE_CAN_COPY_FROM_BIT), ERR_INVALID_PARAMETER,
-			"Source texture requires the TEXTURE_USAGE_CAN_COPY_FROM_BIT in order to be retrieved.");
+			"Source texture requires the `RenderingDevice.TEXTURE_USAGE_CAN_COPY_FROM_BIT` to be set to be retrieved.");
 
 	uint32_t src_layer_count = src_tex->layers;
 	uint32_t src_width, src_height, src_depth;
@@ -2910,9 +2910,9 @@ Error RenderingDeviceVulkan::texture_copy(RID p_from_texture, RID p_to_texture,
 	ERR_FAIL_COND_V(!dst_tex, ERR_INVALID_PARAMETER);
 
 	ERR_FAIL_COND_V_MSG(dst_tex->bound, ERR_INVALID_PARAMETER,
-			"Destination texture can't be copied while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
+			"Destination texture can't be copied while a draw list that uses it as part of a framebuffer is being created. Ensure the draw list is finalized (and that the color/depth texture using it is not set to `RenderingDevice.FINAL_ACTION_CONTINUE`) to copy this texture.");
 	ERR_FAIL_COND_V_MSG(!(dst_tex->usage_flags & TEXTURE_USAGE_CAN_COPY_TO_BIT), ERR_INVALID_PARAMETER,
-			"Destination texture requires the TEXTURE_USAGE_CAN_COPY_TO_BIT in order to be retrieved.");
+			"Destination texture requires the `RenderingDevice.TEXTURE_USAGE_CAN_COPY_TO_BIT` to be set to be retrieved.");
 
 	uint32_t dst_layer_count = dst_tex->layers;
 	uint32_t dst_width, dst_height, dst_depth;
@@ -3084,9 +3084,9 @@ Error RenderingDeviceVulkan::texture_resolve_multisample(RID p_from_texture, RID
 	ERR_FAIL_COND_V(!src_tex, ERR_INVALID_PARAMETER);
 
 	ERR_FAIL_COND_V_MSG(src_tex->bound, ERR_INVALID_PARAMETER,
-			"Source texture can't be copied while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
+			"Source texture can't be copied while a draw list that uses it as part of a framebuffer is being created. Ensure the draw list is finalized (and that the color/depth texture using it is not set to `RenderingDevice.FINAL_ACTION_CONTINUE`) to copy this texture.");
 	ERR_FAIL_COND_V_MSG(!(src_tex->usage_flags & TEXTURE_USAGE_CAN_COPY_FROM_BIT), ERR_INVALID_PARAMETER,
-			"Source texture requires the TEXTURE_USAGE_CAN_COPY_FROM_BIT in order to be retrieved.");
+			"Source texture requires the `RenderingDevice.TEXTURE_USAGE_CAN_COPY_FROM_BIT` to be set to be retrieved.");
 
 	ERR_FAIL_COND_V_MSG(src_tex->type != TEXTURE_TYPE_2D, ERR_INVALID_PARAMETER, "Source texture must be 2D (or a slice of a 3D/Cube texture)");
 	ERR_FAIL_COND_V_MSG(src_tex->samples == TEXTURE_SAMPLES_1, ERR_INVALID_PARAMETER, "Source texture must be multisampled.");
@@ -3095,9 +3095,9 @@ Error RenderingDeviceVulkan::texture_resolve_multisample(RID p_from_texture, RID
 	ERR_FAIL_COND_V(!dst_tex, ERR_INVALID_PARAMETER);
 
 	ERR_FAIL_COND_V_MSG(dst_tex->bound, ERR_INVALID_PARAMETER,
-			"Destination texture can't be copied while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
+			"Destination texture can't be copied while a draw list that uses it as part of a framebuffer is being created. Ensure the draw list is finalized (and that the color/depth texture using it is not set to `RenderingDevice.FINAL_ACTION_CONTINUE`) to copy this texture.");
 	ERR_FAIL_COND_V_MSG(!(dst_tex->usage_flags & TEXTURE_USAGE_CAN_COPY_TO_BIT), ERR_INVALID_PARAMETER,
-			"Destination texture requires the TEXTURE_USAGE_CAN_COPY_TO_BIT in order to be retrieved.");
+			"Destination texture requires the `RenderingDevice.TEXTURE_USAGE_CAN_COPY_TO_BIT` to be set to be retrieved.");
 
 	ERR_FAIL_COND_V_MSG(dst_tex->type != TEXTURE_TYPE_2D, ERR_INVALID_PARAMETER, "Destination texture must be 2D (or a slice of a 3D/Cube texture).");
 	ERR_FAIL_COND_V_MSG(dst_tex->samples != TEXTURE_SAMPLES_1, ERR_INVALID_PARAMETER, "Destination texture must not be multisampled.");
@@ -3255,13 +3255,13 @@ Error RenderingDeviceVulkan::texture_clear(RID p_texture, const Color &p_color,
 	ERR_FAIL_COND_V(!src_tex, ERR_INVALID_PARAMETER);
 
 	ERR_FAIL_COND_V_MSG(src_tex->bound, ERR_INVALID_PARAMETER,
-			"Source texture can't be cleared while a render pass that uses it is being created. Ensure render pass is finalized (and that it was created with RENDER_PASS_CONTENTS_FINISH) to unbind this texture.");
+			"Source texture can't be cleared while a draw list that uses it as part of a framebuffer is being created. Ensure the draw list is finalized (and that the color/depth texture using it is not set to `RenderingDevice.FINAL_ACTION_CONTINUE`) to clear this texture.");
 
 	ERR_FAIL_COND_V(p_layers == 0, ERR_INVALID_PARAMETER);
 	ERR_FAIL_COND_V(p_mipmaps == 0, ERR_INVALID_PARAMETER);
 
 	ERR_FAIL_COND_V_MSG(!(src_tex->usage_flags & TEXTURE_USAGE_CAN_COPY_TO_BIT), ERR_INVALID_PARAMETER,
-			"Source texture requires the TEXTURE_USAGE_CAN_COPY_TO_BIT in order to be cleared.");
+			"Source texture requires the `RenderingDevice.TEXTURE_USAGE_CAN_COPY_TO_BIT` to be set to be cleared.");
 
 	uint32_t src_layer_count = src_tex->layers;
 	if (src_tex->type == TEXTURE_TYPE_CUBE || src_tex->type == TEXTURE_TYPE_CUBE_ARRAY) {
@@ -4326,10 +4326,6 @@ RID RenderingDeviceVulkan::vertex_buffer_create(uint32_t p_size_bytes, const Vec
 	_THREAD_SAFE_METHOD_
 
 	ERR_FAIL_COND_V(p_data.size() && (uint32_t)p_data.size() != p_size_bytes, RID());
-	ERR_FAIL_COND_V_MSG(draw_list != nullptr && p_data.size(), RID(),
-			"Creating buffers with data is forbidden during creation of a draw list");
-	ERR_FAIL_COND_V_MSG(compute_list != nullptr && p_data.size(), RID(),
-			"Creating buffers with data is forbidden during creation of a draw list");
 
 	uint32_t usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
 	if (p_use_as_storage) {
@@ -4467,10 +4463,6 @@ RID RenderingDeviceVulkan::vertex_array_create(uint32_t p_vertex_count, VertexFo
 
 RID RenderingDeviceVulkan::index_buffer_create(uint32_t p_index_count, IndexBufferFormat p_format, const Vector<uint8_t> &p_data, bool p_use_restart_indices) {
 	_THREAD_SAFE_METHOD_
-	ERR_FAIL_COND_V_MSG(draw_list != nullptr && p_data.size(), RID(),
-			"Creating buffers with data is forbidden during creation of a draw list");
-	ERR_FAIL_COND_V_MSG(compute_list != nullptr && p_data.size(), RID(),
-			"Creating buffers with data is forbidden during creation of a draw list");
 
 	ERR_FAIL_COND_V(p_index_count == 0, RID());
 
@@ -5153,10 +5145,6 @@ RID RenderingDeviceVulkan::uniform_buffer_create(uint32_t p_size_bytes, const Ve
 	_THREAD_SAFE_METHOD_
 
 	ERR_FAIL_COND_V(p_data.size() && (uint32_t)p_data.size() != p_size_bytes, RID());
-	ERR_FAIL_COND_V_MSG(draw_list != nullptr && p_data.size(), RID(),
-			"Creating buffers with data is forbidden during creation of a draw list");
-	ERR_FAIL_COND_V_MSG(compute_list != nullptr && p_data.size(), RID(),
-			"Creating buffers with data is forbidden during creation of a draw list");
 
 	Buffer buffer;
 	Error err = _buffer_allocate(&buffer, p_size_bytes, VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE, 0);
@@ -5176,10 +5164,6 @@ RID RenderingDeviceVulkan::uniform_buffer_create(uint32_t p_size_bytes, const Ve
 
 RID RenderingDeviceVulkan::storage_buffer_create(uint32_t p_size_bytes, const Vector<uint8_t> &p_data, BitField<StorageBufferUsage> p_usage) {
 	_THREAD_SAFE_METHOD_
-	ERR_FAIL_COND_V_MSG(draw_list != nullptr && p_data.size(), RID(),
-			"Creating buffers with data is forbidden during creation of a draw list");
-	ERR_FAIL_COND_V_MSG(compute_list != nullptr && p_data.size(), RID(),
-			"Creating buffers with data is forbidden during creation of a draw list");
 
 	ERR_FAIL_COND_V(p_data.size() && (uint32_t)p_data.size() != p_size_bytes, RID());
 
@@ -5202,10 +5186,6 @@ RID RenderingDeviceVulkan::storage_buffer_create(uint32_t p_size_bytes, const Ve
 
 RID RenderingDeviceVulkan::texture_buffer_create(uint32_t p_size_elements, DataFormat p_format, const Vector<uint8_t> &p_data) {
 	_THREAD_SAFE_METHOD_
-	ERR_FAIL_COND_V_MSG(draw_list != nullptr && p_data.size(), RID(),
-			"Creating buffers with data is forbidden during creation of a draw list");
-	ERR_FAIL_COND_V_MSG(compute_list != nullptr && p_data.size(), RID(),
-			"Creating buffers with data is forbidden during creation of a draw list");
 
 	uint32_t element_size = get_format_vertex_size(p_format);
 	ERR_FAIL_COND_V_MSG(element_size == 0, RID(), "Format requested is not supported for texture buffers");

+ 22 - 1
drivers/wasapi/audio_driver_wasapi.cpp

@@ -480,6 +480,14 @@ Error AudioDriverWASAPI::init_output_device(bool p_reinit) {
 	}
 
 	switch (audio_output.channels) {
+		case 1: // Mono
+		case 3: // Surround 2.1
+		case 5: // Surround 5.0
+		case 7: // Surround 7.0
+			// We will downmix as required.
+			channels = audio_output.channels + 1;
+			break;
+
 		case 2: // Stereo
 		case 4: // Surround 3.1
 		case 6: // Surround 5.1
@@ -499,7 +507,7 @@ Error AudioDriverWASAPI::init_output_device(bool p_reinit) {
 	input_position = 0;
 	input_size = 0;
 
-	print_verbose("WASAPI: detected " + itos(channels) + " channels");
+	print_verbose("WASAPI: detected " + itos(audio_output.channels) + " channels");
 	print_verbose("WASAPI: audio buffer frames: " + itos(buffer_frames) + " calculated latency: " + itos(buffer_frames * 1000 / mix_rate) + "ms");
 
 	return OK;
@@ -746,6 +754,19 @@ void AudioDriverWASAPI::thread_func(void *p_udata) {
 							for (unsigned int i = 0; i < write_frames * ad->channels; i++) {
 								ad->write_sample(ad->audio_output.format_tag, ad->audio_output.bits_per_sample, buffer, i, ad->samples_in.write[write_ofs++]);
 							}
+						} else if (ad->channels == ad->audio_output.channels + 1) {
+							// Pass all channels except the last two as-is, and then mix the last two
+							// together as one channel. E.g. stereo -> mono, or 3.1 -> 2.1.
+							unsigned int last_chan = ad->audio_output.channels - 1;
+							for (unsigned int i = 0; i < write_frames; i++) {
+								for (unsigned int j = 0; j < last_chan; j++) {
+									ad->write_sample(ad->audio_output.format_tag, ad->audio_output.bits_per_sample, buffer, i * ad->audio_output.channels + j, ad->samples_in.write[write_ofs++]);
+								}
+								int32_t l = ad->samples_in.write[write_ofs++];
+								int32_t r = ad->samples_in.write[write_ofs++];
+								int32_t c = (int32_t)(((int64_t)l + (int64_t)r) / 2);
+								ad->write_sample(ad->audio_output.format_tag, ad->audio_output.bits_per_sample, buffer, i * ad->audio_output.channels + last_chan, c);
+							}
 						} else {
 							for (unsigned int i = 0; i < write_frames; i++) {
 								for (unsigned int j = 0; j < MIN(ad->channels, ad->audio_output.channels); j++) {

+ 9 - 6
drivers/windows/dir_access_windows.cpp

@@ -59,6 +59,14 @@ struct DirAccessWindowsPrivate {
 	WIN32_FIND_DATAW fu; //unicode version
 };
 
+String DirAccessWindows::fix_path(String p_path) const {
+	String r_path = DirAccess::fix_path(p_path);
+	if (r_path.is_absolute_path() && !r_path.is_network_share_path() && r_path.length() > MAX_PATH) {
+		r_path = "\\\\?\\" + r_path.replace("/", "\\");
+	}
+	return r_path;
+}
+
 // CreateFolderAsync
 
 Error DirAccessWindows::list_dir_begin() {
@@ -158,6 +166,7 @@ Error DirAccessWindows::make_dir(String p_dir) {
 	p_dir = fix_path(p_dir);
 	if (p_dir.is_relative_path()) {
 		p_dir = current_dir.path_join(p_dir);
+		p_dir = fix_path(p_dir);
 	}
 
 	p_dir = p_dir.simplify_path().replace("/", "\\");
@@ -165,12 +174,6 @@ Error DirAccessWindows::make_dir(String p_dir) {
 	bool success;
 	int err;
 
-	if (!p_dir.is_network_share_path()) {
-		p_dir = "\\\\?\\" + p_dir;
-		// Add "\\?\" to the path to extend max. path length past 248, if it's not a network share UNC path.
-		// See https://msdn.microsoft.com/en-us/library/windows/desktop/aa363855(v=vs.85).aspx
-	}
-
 	success = CreateDirectoryW((LPCWSTR)(p_dir.utf16().get_data()), nullptr);
 	err = GetLastError();
 

+ 3 - 0
drivers/windows/dir_access_windows.h

@@ -53,6 +53,9 @@ class DirAccessWindows : public DirAccess {
 	bool _cisdir = false;
 	bool _cishidden = false;
 
+protected:
+	virtual String fix_path(String p_path) const override;
+
 public:
 	virtual Error list_dir_begin() override; ///< This starts dir listing
 	virtual String get_next() override;

+ 8 - 0
drivers/windows/file_access_windows.cpp

@@ -68,6 +68,14 @@ bool FileAccessWindows::is_path_invalid(const String &p_path) {
 	return invalid_files.has(fname);
 }
 
+String FileAccessWindows::fix_path(const String &p_path) const {
+	String r_path = FileAccess::fix_path(p_path);
+	if (r_path.is_absolute_path() && !r_path.is_network_share_path() && r_path.length() > MAX_PATH) {
+		r_path = "\\\\?\\" + r_path.replace("/", "\\");
+	}
+	return r_path;
+}
+
 Error FileAccessWindows::open_internal(const String &p_path, int p_mode_flags) {
 	if (is_path_invalid(p_path)) {
 #ifdef DEBUG_ENABLED

+ 1 - 0
drivers/windows/file_access_windows.h

@@ -54,6 +54,7 @@ class FileAccessWindows : public FileAccess {
 	static HashSet<String> invalid_files;
 
 public:
+	virtual String fix_path(const String &p_path) const override;
 	virtual Error open_internal(const String &p_path, int p_mode_flags) override; ///< open a file
 	virtual bool is_open() const override; ///< true when file is open
 

+ 1 - 1
editor/debugger/script_editor_debugger.cpp

@@ -1717,7 +1717,7 @@ ScriptEditorDebugger::ScriptEditorDebugger() {
 
 	{ //debugger
 		VBoxContainer *vbc = memnew(VBoxContainer);
-		vbc->set_name(TTR("Debugger"));
+		vbc->set_name(TTR("Stack Trace"));
 		Control *dbg = vbc;
 
 		HBoxContainer *hbc = memnew(HBoxContainer);

+ 8 - 2
editor/editor_command_palette.cpp

@@ -75,9 +75,15 @@ void EditorCommandPalette::_update_command_search(const String &search_text) {
 		r.shortcut_text = E.value.shortcut;
 		r.last_used = E.value.last_used;
 
-		if (search_text.is_subsequence_ofn(r.display_name)) {
+		bool is_subsequence_of_key_name = search_text.is_subsequence_ofn(r.key_name);
+		bool is_subsequence_of_display_name = search_text.is_subsequence_ofn(r.display_name);
+
+		if (is_subsequence_of_key_name || is_subsequence_of_display_name) {
 			if (!search_text.is_empty()) {
-				r.score = _score_path(search_text, r.display_name.to_lower());
+				float key_name_score = is_subsequence_of_key_name ? _score_path(search_text, r.key_name.to_lower()) : .0f;
+				float display_name_score = is_subsequence_of_display_name ? _score_path(search_text, r.display_name.to_lower()) : .0f;
+
+				r.score = MAX(key_name_score, display_name_score);
 			}
 
 			entries.push_back(r);

+ 1 - 1
editor/editor_data.cpp

@@ -595,7 +595,7 @@ void EditorData::remove_scene(int p_idx) {
 	}
 
 	if (!edited_scene[p_idx].path.is_empty()) {
-		ScriptEditor::get_singleton()->close_builtin_scripts_from_scene(edited_scene[p_idx].path);
+		EditorNode::get_singleton()->emit_signal("scene_closed", edited_scene[p_idx].path);
 	}
 
 	undo_redo_manager->discard_history(edited_scene[p_idx].history_id);

+ 1 - 0
editor/editor_node.cpp

@@ -6617,6 +6617,7 @@ void EditorNode::_bind_methods() {
 	ADD_SIGNAL(MethodInfo("scene_saved", PropertyInfo(Variant::STRING, "path")));
 	ADD_SIGNAL(MethodInfo("project_settings_changed"));
 	ADD_SIGNAL(MethodInfo("scene_changed"));
+	ADD_SIGNAL(MethodInfo("scene_closed", PropertyInfo(Variant::STRING, "path")));
 }
 
 static Node *_resource_get_edited_scene() {

+ 0 - 1
editor/editor_properties.cpp

@@ -3998,7 +3998,6 @@ void EditorPropertyResource::_viewport_selected(const NodePath &p_path) {
 	Ref<ViewportTexture> vt;
 	vt.instantiate();
 	vt->set_viewport_path_in_scene(get_tree()->get_edited_scene_root()->get_path_to(to_node));
-	vt->setup_local_to_scene();
 
 	emit_changed(get_edited_property(), vt);
 	update_property();

+ 1 - 1
editor/editor_properties_array_dict.cpp

@@ -222,7 +222,7 @@ void EditorPropertyArray::update_property() {
 	String array_type_name = Variant::get_type_name(array_type);
 	if (array_type == Variant::ARRAY && subtype != Variant::NIL) {
 		String type_name;
-		if (subtype == Variant::OBJECT && subtype_hint == PROPERTY_HINT_RESOURCE_TYPE) {
+		if (subtype == Variant::OBJECT && (subtype_hint == PROPERTY_HINT_RESOURCE_TYPE || subtype_hint == PROPERTY_HINT_NODE_TYPE)) {
 			type_name = subtype_hint_string;
 		} else {
 			type_name = Variant::get_type_name(subtype);

+ 2 - 0
editor/export/project_export.cpp

@@ -244,6 +244,7 @@ void ProjectExportDialog::_edit_preset(int p_index) {
 
 	export_filter->select(current->get_export_filter());
 	include_filters->set_text(current->get_include_filter());
+	include_label->set_text(current->get_export_filter() == EditorExportPreset::EXCLUDE_SELECTED_RESOURCES ? TTR("Resources to exclude:") : TTR("Resources to export:"));
 	exclude_filters->set_text(current->get_exclude_filter());
 	server_strip_message->set_visible(current->get_export_filter() == EditorExportPreset::EXPORT_CUSTOMIZED);
 
@@ -704,6 +705,7 @@ void ProjectExportDialog::_export_type_changed(int p_which) {
 	if (filter_type == EditorExportPreset::EXPORT_CUSTOMIZED && current->get_customized_files_count() == 0) {
 		current->set_file_export_mode("res://", EditorExportPreset::MODE_FILE_STRIP);
 	}
+	include_label->set_text(current->get_export_filter() == EditorExportPreset::EXCLUDE_SELECTED_RESOURCES ? TTR("Resources to exclude:") : TTR("Resources to export:"));
 
 	updating = true;
 	_fill_resource_tree();

ファイルの差分が大きいため隠しています
+ 273 - 273
editor/import/collada.cpp


+ 36 - 36
editor/import/collada.h

@@ -69,7 +69,7 @@ public:
 		bool double_sided = true;
 		bool unshaded = false;
 
-		String get_texture_path(const String &p_source, Collada &state) const;
+		String get_texture_path(const String &p_source, Collada &p_state) const;
 
 		Effect() {
 			diffuse.color = Color(1, 1, 1, 1);
@@ -266,7 +266,7 @@ public:
 			}
 		}
 
-		void fix_unit_scale(const Collada &state);
+		void fix_unit_scale(const Collada &p_state);
 
 		bool operator<(const Vertex &p_vert) const {
 			if (uid == p_vert.uid) {
@@ -348,7 +348,7 @@ public:
 
 		Node *parent = nullptr;
 
-		Transform3D compute_transform(const Collada &state) const;
+		Transform3D compute_transform(const Collada &p_state) const;
 		Transform3D get_global_transform() const;
 		Transform3D get_transform() const;
 
@@ -526,39 +526,39 @@ public:
 private: // private stuff
 	HashMap<String, int> channel_map;
 
-	void _parse_asset(XMLParser &parser);
-	void _parse_image(XMLParser &parser);
-	void _parse_material(XMLParser &parser);
-	void _parse_effect_material(XMLParser &parser, Effect &effect, String &id);
-	void _parse_effect(XMLParser &parser);
-	void _parse_camera(XMLParser &parser);
-	void _parse_light(XMLParser &parser);
-	void _parse_animation_clip(XMLParser &parser);
-
-	void _parse_mesh_geometry(XMLParser &parser, String p_id, String p_name);
-	void _parse_curve_geometry(XMLParser &parser, String p_id, String p_name);
-
-	void _parse_skin_controller(XMLParser &parser, String p_id);
-	void _parse_morph_controller(XMLParser &parser, String p_id);
-	void _parse_controller(XMLParser &parser);
-
-	Node *_parse_visual_instance_geometry(XMLParser &parser);
-	Node *_parse_visual_instance_camera(XMLParser &parser);
-	Node *_parse_visual_instance_light(XMLParser &parser);
-
-	Node *_parse_visual_node_instance_data(XMLParser &parser);
-	Node *_parse_visual_scene_node(XMLParser &parser);
-	void _parse_visual_scene(XMLParser &parser);
-
-	void _parse_animation(XMLParser &parser);
-	void _parse_scene(XMLParser &parser);
-	void _parse_library(XMLParser &parser);
-
-	Variant _parse_param(XMLParser &parser);
-	Vector<float> _read_float_array(XMLParser &parser);
-	Vector<String> _read_string_array(XMLParser &parser);
-	Transform3D _read_transform(XMLParser &parser);
-	String _read_empty_draw_type(XMLParser &parser);
+	void _parse_asset(XMLParser &p_parser);
+	void _parse_image(XMLParser &p_parser);
+	void _parse_material(XMLParser &p_parser);
+	void _parse_effect_material(XMLParser &p_parser, Effect &p_effect, String &p_id);
+	void _parse_effect(XMLParser &p_parser);
+	void _parse_camera(XMLParser &p_parser);
+	void _parse_light(XMLParser &p_parser);
+	void _parse_animation_clip(XMLParser &p_parser);
+
+	void _parse_mesh_geometry(XMLParser &p_parser, String p_id, String p_name);
+	void _parse_curve_geometry(XMLParser &p_parser, String p_id, String p_name);
+
+	void _parse_skin_controller(XMLParser &p_parser, String p_id);
+	void _parse_morph_controller(XMLParser &p_parser, String p_id);
+	void _parse_controller(XMLParser &p_parser);
+
+	Node *_parse_visual_instance_geometry(XMLParser &p_parser);
+	Node *_parse_visual_instance_camera(XMLParser &p_parser);
+	Node *_parse_visual_instance_light(XMLParser &p_parser);
+
+	Node *_parse_visual_node_instance_data(XMLParser &p_parser);
+	Node *_parse_visual_scene_node(XMLParser &p_parser);
+	void _parse_visual_scene(XMLParser &p_parser);
+
+	void _parse_animation(XMLParser &p_parser);
+	void _parse_scene(XMLParser &p_parser);
+	void _parse_library(XMLParser &p_parser);
+
+	Variant _parse_param(XMLParser &p_parser);
+	Vector<float> _read_float_array(XMLParser &p_parser);
+	Vector<String> _read_string_array(XMLParser &p_parser);
+	Transform3D _read_transform(XMLParser &p_parser);
+	String _read_empty_draw_type(XMLParser &p_parser);
 
 	void _joint_set_owner(Collada::Node *p_node, NodeSkeleton *p_owner);
 	void _create_skeletons(Collada::Node **p_node, NodeSkeleton *p_skeleton = nullptr);

+ 1 - 1
editor/import/post_import_plugin_skeleton_rest_fixer.cpp

@@ -669,7 +669,7 @@ void PostImportPluginSkeletonRestFixer::internal_process(InternalImportCategory
 						StringName bn = skin->get_bind_name(i);
 						int bone_idx = src_skeleton->find_bone(bn);
 						if (bone_idx >= 0) {
-							Transform3D new_rest = silhouette_diff[i] * src_skeleton->get_bone_global_rest(bone_idx);
+							Transform3D new_rest = silhouette_diff[bone_idx] * src_skeleton->get_bone_global_rest(bone_idx);
 							skin->set_bind_pose(i, new_rest.inverse() * ibm_diff[bone_idx]);
 						}
 					}

+ 6 - 6
editor/plugins/collision_shape_2d_editor_plugin.cpp

@@ -436,7 +436,7 @@ void CollisionShape2DEditor::forward_canvas_draw_over_viewport(Control *p_overla
 
 	switch (shape_type) {
 		case CAPSULE_SHAPE: {
-			Ref<CapsuleShape2D> shape = node->get_shape();
+			Ref<CapsuleShape2D> shape = current_shape;
 
 			handles.resize(2);
 			float radius = shape->get_radius();
@@ -451,7 +451,7 @@ void CollisionShape2DEditor::forward_canvas_draw_over_viewport(Control *p_overla
 		} break;
 
 		case CIRCLE_SHAPE: {
-			Ref<CircleShape2D> shape = node->get_shape();
+			Ref<CircleShape2D> shape = current_shape;
 
 			handles.resize(1);
 			handles.write[0] = Point2(shape->get_radius(), 0);
@@ -467,7 +467,7 @@ void CollisionShape2DEditor::forward_canvas_draw_over_viewport(Control *p_overla
 		} break;
 
 		case WORLD_BOUNDARY_SHAPE: {
-			Ref<WorldBoundaryShape2D> shape = node->get_shape();
+			Ref<WorldBoundaryShape2D> shape = current_shape;
 
 			handles.resize(2);
 			handles.write[0] = shape->get_normal() * shape->get_distance();
@@ -479,7 +479,7 @@ void CollisionShape2DEditor::forward_canvas_draw_over_viewport(Control *p_overla
 		} break;
 
 		case SEPARATION_RAY_SHAPE: {
-			Ref<SeparationRayShape2D> shape = node->get_shape();
+			Ref<SeparationRayShape2D> shape = current_shape;
 
 			handles.resize(1);
 			handles.write[0] = Point2(0, shape->get_length());
@@ -489,7 +489,7 @@ void CollisionShape2DEditor::forward_canvas_draw_over_viewport(Control *p_overla
 		} break;
 
 		case RECTANGLE_SHAPE: {
-			Ref<RectangleShape2D> shape = node->get_shape();
+			Ref<RectangleShape2D> shape = current_shape;
 
 			handles.resize(8);
 			Vector2 ext = shape->get_size() / 2;
@@ -501,7 +501,7 @@ void CollisionShape2DEditor::forward_canvas_draw_over_viewport(Control *p_overla
 		} break;
 
 		case SEGMENT_SHAPE: {
-			Ref<SegmentShape2D> shape = node->get_shape();
+			Ref<SegmentShape2D> shape = current_shape;
 
 			handles.resize(2);
 			handles.write[0] = shape->get_a();

+ 11 - 1
editor/plugins/material_editor_plugin.cpp

@@ -157,9 +157,19 @@ void MaterialEditor::_button_pressed(Node *p_button) {
 MaterialEditor::MaterialEditor() {
 	// canvas item
 
+	vc_2d = memnew(SubViewportContainer);
+	vc_2d->set_stretch(true);
+	add_child(vc_2d);
+	vc_2d->set_anchors_and_offsets_preset(PRESET_FULL_RECT);
+
+	viewport_2d = memnew(SubViewport);
+	vc_2d->add_child(viewport_2d);
+	viewport_2d->set_disable_input(true);
+	viewport_2d->set_transparent_background(true);
+
 	layout_2d = memnew(HBoxContainer);
 	layout_2d->set_alignment(BoxContainer::ALIGNMENT_CENTER);
-	add_child(layout_2d);
+	viewport_2d->add_child(layout_2d);
 	layout_2d->set_anchors_and_offsets_preset(PRESET_FULL_RECT);
 
 	rect_instance = memnew(ColorRect);

+ 2 - 0
editor/plugins/material_editor_plugin.h

@@ -50,6 +50,8 @@ class MaterialEditor : public Control {
 
 	Vector2 rot;
 
+	SubViewportContainer *vc_2d = nullptr;
+	SubViewport *viewport_2d = nullptr;
 	HBoxContainer *layout_2d = nullptr;
 	ColorRect *rect_instance = nullptr;
 

+ 7 - 5
editor/plugins/node_3d_editor_plugin.cpp

@@ -8340,8 +8340,6 @@ Node3DEditor::Node3DEditor() {
 	snap_scale->set_select_all_on_focus(true);
 	snap_dialog_vbc->add_margin_child(TTR("Scale Snap (%):"), snap_scale);
 
-	_snap_update();
-
 	/* SETTINGS DIALOG */
 
 	settings_dialog = memnew(ConfirmationDialog);
@@ -8545,9 +8543,11 @@ void fragment() {
 		sun_color->get_popup()->connect("about_to_popup", callable_mp(EditorNode::get_singleton(), &EditorNode::setup_color_picker).bind(sun_color->get_picker()));
 
 		sun_energy = memnew(EditorSpinSlider);
+		sun_energy->set_max(64.0);
+		sun_energy->set_min(0);
+		sun_energy->set_step(0.05);
 		sun_vb->add_margin_child(TTR("Sun Energy"), sun_energy);
 		sun_energy->connect("value_changed", callable_mp(this, &Node3DEditor::_preview_settings_changed).unbind(1));
-		sun_energy->set_max(64.0);
 
 		sun_max_distance = memnew(EditorSpinSlider);
 		sun_vb->add_margin_child(TTR("Shadow Max Distance"), sun_max_distance);
@@ -8596,8 +8596,10 @@ void fragment() {
 		environ_ground_color->get_popup()->connect("about_to_popup", callable_mp(EditorNode::get_singleton(), &EditorNode::setup_color_picker).bind(environ_ground_color->get_picker()));
 		environ_vb->add_margin_child(TTR("Ground Color"), environ_ground_color);
 		environ_energy = memnew(EditorSpinSlider);
-		environ_energy->connect("value_changed", callable_mp(this, &Node3DEditor::_preview_settings_changed).unbind(1));
 		environ_energy->set_max(8.0);
+		environ_energy->set_min(0);
+		environ_energy->set_step(0.05);
+		environ_energy->connect("value_changed", callable_mp(this, &Node3DEditor::_preview_settings_changed).unbind(1));
 		environ_vb->add_margin_child(TTR("Sky Energy"), environ_energy);
 		HBoxContainer *fx_vb = memnew(HBoxContainer);
 		fx_vb->set_h_size_flags(SIZE_EXPAND_FILL);
@@ -8657,7 +8659,7 @@ void fragment() {
 		_load_default_preview_settings();
 		_preview_settings_changed();
 	}
-	clear(); // Make sure values are initialized.
+	clear(); // Make sure values are initialized. Will call _snap_update() for us.
 }
 Node3DEditor::~Node3DEditor() {
 	memdelete(preview_node);

+ 4 - 4
editor/plugins/node_3d_editor_plugin.h

@@ -402,8 +402,8 @@ private:
 	Camera3D *previewing = nullptr;
 	Camera3D *preview = nullptr;
 
-	bool previewing_camera;
-	bool previewing_cinema;
+	bool previewing_camera = false;
+	bool previewing_cinema = false;
 	bool _is_node_locked(const Node *p_node);
 	void _preview_exited_scene();
 	void _toggle_camera_preview(bool);
@@ -580,8 +580,8 @@ private:
 	bool origin_enabled = false;
 	RID grid[3];
 	RID grid_instance[3];
-	bool grid_visible[3]; //currently visible
-	bool grid_enable[3]; //should be always visible if true
+	bool grid_visible[3] = { false, false, false }; //currently visible
+	bool grid_enable[3] = { false, false, false }; //should be always visible if true
 	bool grid_enabled = false;
 	bool grid_init_draw = false;
 	Camera3D::ProjectionType grid_camera_last_update_perspective = Camera3D::PROJECTION_PERSPECTIVE;

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません