Browse Source

classref: Sync with current 3.4 branch (5816a26c0)

Rémi Verschelde 3 years ago
parent
commit
6d70a9bb7a

+ 3 - 1
classes/[email protected]

@@ -1895,7 +1895,9 @@ enum **PropertyHint**:
 
 
 - **PROPERTY_HINT_EXP_RANGE** = **2** --- Hints that a float property should be within an exponential range specified via the hint string ``"min,max"`` or ``"min,max,step"``. The hint string can optionally include ``"or_greater"`` and/or ``"or_lesser"`` to allow manual input going respectively above the max or below the min values. Example: ``"0.01,100,0.01,or_greater"``.
 - **PROPERTY_HINT_EXP_RANGE** = **2** --- Hints that a float property should be within an exponential range specified via the hint string ``"min,max"`` or ``"min,max,step"``. The hint string can optionally include ``"or_greater"`` and/or ``"or_lesser"`` to allow manual input going respectively above the max or below the min values. Example: ``"0.01,100,0.01,or_greater"``.
 
 
-- **PROPERTY_HINT_ENUM** = **3** --- Hints that an integer, float or string property is an enumerated value to pick in a list specified via a hint string such as ``"Hello,Something,Else"``.
+- **PROPERTY_HINT_ENUM** = **3** --- Hints that an integer, float or string property is an enumerated value to pick in a list specified via a hint string.
+
+The hint string is a comma separated list of names such as ``"Hello,Something,Else"``. For integer and float properties, the first name in the list has value 0, the next 1, and so on. Explicit values can also be specified by appending ``:integer`` to the name, e.g. ``"Zero,One,Three:3,Four,Six:6"``.
 
 
 - **PROPERTY_HINT_EXP_EASING** = **4** --- Hints that a float property should be edited via an exponential easing function. The hint string can include ``"attenuation"`` to flip the curve horizontally and/or ``"inout"`` to also include in/out easing.
 - **PROPERTY_HINT_EXP_EASING** = **4** --- Hints that a float property should be edited via an exponential easing function. The hint string can include ``"attenuation"`` to flip the curve horizontally and/or ``"inout"`` to also include in/out easing.
 
 

+ 3 - 3
classes/class_animationnode.rst

@@ -82,7 +82,7 @@ Signals
 
 
 - **removed_from_graph** **(** **)**
 - **removed_from_graph** **(** **)**
 
 
-Called when the node was removed from the graph.
+Emitted when the node was removed from the graph.
 
 
 ----
 ----
 
 
@@ -241,7 +241,7 @@ Returns ``true`` whether you want the blend tree editor to display filter editin
 
 
 - :ref:`bool<class_bool>` **is_path_filtered** **(** :ref:`NodePath<class_NodePath>` path **)** |const|
 - :ref:`bool<class_bool>` **is_path_filtered** **(** :ref:`NodePath<class_NodePath>` path **)** |const|
 
 
-Returns ``true`` whether a given path is filtered.
+Returns whether the given path is filtered.
 
 
 ----
 ----
 
 
@@ -277,7 +277,7 @@ Adds or removes a path for the filter.
 
 
 - void **set_parameter** **(** :ref:`String<class_String>` name, :ref:`Variant<class_Variant>` value **)**
 - void **set_parameter** **(** :ref:`String<class_String>` name, :ref:`Variant<class_Variant>` value **)**
 
 
-Sets a custom parameter. These are used as local storage, because resources can be reused across the tree or scenes.
+Sets a custom parameter. These are used as local memory, because resources can be reused across the tree or scenes.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 1 - 1
classes/class_array.rst

@@ -285,7 +285,7 @@ Returns ``true`` if the array is empty.
 
 
 - void **erase** **(** :ref:`Variant<class_Variant>` value **)**
 - void **erase** **(** :ref:`Variant<class_Variant>` value **)**
 
 
-Removes the first occurrence of a value from the array. To remove an element by index, use :ref:`remove<class_Array_method_remove>` instead.
+Removes the first occurrence of a value from the array. If the value does not exist in the array, nothing happens. To remove an element by index, use :ref:`remove<class_Array_method_remove>` instead.
 
 
 **Note:** This method acts in-place and doesn't return a value.
 **Note:** This method acts in-place and doesn't return a value.
 
 

+ 1 - 1
classes/class_canvasitem.rst

@@ -718,7 +718,7 @@ Transformations issued by ``event``'s inputs are applied in local space instead
 
 
 - void **set_as_toplevel** **(** :ref:`bool<class_bool>` enable **)**
 - void **set_as_toplevel** **(** :ref:`bool<class_bool>` enable **)**
 
 
-If ``enable`` is ``true``, the node won't inherit its transform from parent canvas items.
+If ``enable`` is ``true``, this ``CanvasItem`` will *not* inherit its transform from parent ``CanvasItem``\ s. Its draw order will also be changed to make it draw on top of other ``CanvasItem``\ s that are not set as top-level. The ``CanvasItem`` will effectively act as if it was placed as a child of a bare :ref:`Node<class_Node>`. See also :ref:`is_set_as_toplevel<class_CanvasItem_method_is_set_as_toplevel>`.
 
 
 ----
 ----
 
 

+ 2 - 0
classes/class_collisionobject2d.rst

@@ -20,6 +20,8 @@ Description
 
 
 CollisionObject2D is the base class for 2D physics objects. It can hold any number of 2D collision :ref:`Shape2D<class_Shape2D>`\ s. Each shape must be assigned to a *shape owner*. The CollisionObject2D can have any number of shape owners. Shape owners are not nodes and do not appear in the editor, but are accessible through code using the ``shape_owner_*`` methods.
 CollisionObject2D is the base class for 2D physics objects. It can hold any number of 2D collision :ref:`Shape2D<class_Shape2D>`\ s. Each shape must be assigned to a *shape owner*. The CollisionObject2D can have any number of shape owners. Shape owners are not nodes and do not appear in the editor, but are accessible through code using the ``shape_owner_*`` methods.
 
 
+**Note:** Only collisions between objects within the same canvas (:ref:`Viewport<class_Viewport>` canvas or :ref:`CanvasLayer<class_CanvasLayer>`) are supported. The behavior of collisions between objects in different canvases is undefined.
+
 Properties
 Properties
 ----------
 ----------
 
 

+ 1 - 1
classes/class_control.rst

@@ -1062,7 +1062,7 @@ The minimum size of the node's bounding rectangle. If you set it to a value grea
 | *Getter*  | get_pivot_offset()      |
 | *Getter*  | get_pivot_offset()      |
 +-----------+-------------------------+
 +-----------+-------------------------+
 
 
-By default, the node's pivot is its top-left corner. When you change its :ref:`rect_scale<class_Control_property_rect_scale>`, it will scale around this pivot. Set this property to :ref:`rect_size<class_Control_property_rect_size>` / 2 to center the pivot in the node's rectangle.
+By default, the node's pivot is its top-left corner. When you change its :ref:`rect_rotation<class_Control_property_rect_rotation>` or :ref:`rect_scale<class_Control_property_rect_scale>`, it will rotate or scale around this pivot. Set this property to :ref:`rect_size<class_Control_property_rect_size>` / 2 to pivot around the Control's center.
 
 
 ----
 ----
 
 

+ 1 - 1
classes/class_curve2d.rst

@@ -92,7 +92,7 @@ Method Descriptions
 
 
 - void **add_point** **(** :ref:`Vector2<class_Vector2>` position, :ref:`Vector2<class_Vector2>` in=Vector2( 0, 0 ), :ref:`Vector2<class_Vector2>` out=Vector2( 0, 0 ), :ref:`int<class_int>` at_position=-1 **)**
 - void **add_point** **(** :ref:`Vector2<class_Vector2>` position, :ref:`Vector2<class_Vector2>` in=Vector2( 0, 0 ), :ref:`Vector2<class_Vector2>` out=Vector2( 0, 0 ), :ref:`int<class_int>` at_position=-1 **)**
 
 
-Adds a point to a curve at ``position``, with control points ``in`` and ``out``.
+Adds a point to a curve at ``position`` relative to the ``Curve2D``'s position, with control points ``in`` and ``out``.
 
 
 If ``at_position`` is given, the point is inserted before the point number ``at_position``, moving that point (and every point after) after the inserted point. If ``at_position`` is not given, or is an illegal value (``at_position <0`` or ``at_position >= [method get_point_count]``), the point will be appended at the end of the point list.
 If ``at_position`` is given, the point is inserted before the point number ``at_position``, moving that point (and every point after) after the inserted point. If ``at_position`` is not given, or is an illegal value (``at_position <0`` or ``at_position >= [method get_point_count]``), the point will be appended at the end of the point list.
 
 

+ 1 - 1
classes/class_curve3d.rst

@@ -120,7 +120,7 @@ Method Descriptions
 
 
 - void **add_point** **(** :ref:`Vector3<class_Vector3>` position, :ref:`Vector3<class_Vector3>` in=Vector3( 0, 0, 0 ), :ref:`Vector3<class_Vector3>` out=Vector3( 0, 0, 0 ), :ref:`int<class_int>` at_position=-1 **)**
 - void **add_point** **(** :ref:`Vector3<class_Vector3>` position, :ref:`Vector3<class_Vector3>` in=Vector3( 0, 0, 0 ), :ref:`Vector3<class_Vector3>` out=Vector3( 0, 0, 0 ), :ref:`int<class_int>` at_position=-1 **)**
 
 
-Adds a point to a curve at ``position``, with control points ``in`` and ``out``.
+Adds a point to a curve at ``position`` relative to the ``Curve3D``'s position, with control points ``in`` and ``out``.
 
 
 If ``at_position`` is given, the point is inserted before the point number ``at_position``, moving that point (and every point after) after the inserted point. If ``at_position`` is not given, or is an illegal value (``at_position <0`` or ``at_position >= [method get_point_count]``), the point will be appended at the end of the point list.
 If ``at_position`` is given, the point is inserted before the point number ``at_position``, moving that point (and every point after) after the inserted point. If ``at_position`` is not given, or is an illegal value (``at_position <0`` or ``at_position >= [method get_point_count]``), the point will be appended at the end of the point list.
 
 

+ 7 - 1
classes/class_environment.rst

@@ -256,7 +256,9 @@ Enumerations
 
 
 enum **BGMode**:
 enum **BGMode**:
 
 
-- **BG_KEEP** = **5** --- Keeps on screen every pixel drawn in the background. This is the fastest background mode, but it can only be safely used in fully-interior scenes (no visible sky or sky reflections). If enabled in a scene where the background is visible, "ghost trail" artifacts will be visible when moving the camera.
+- **BG_KEEP** = **5** --- Keeps on screen every pixel drawn in the background. Only select this mode if you really need to keep the old data. On modern GPUs it will generally not be faster than clearing the background, and can be significantly slower, particularly on mobile.
+
+It can only be safely used in fully-interior scenes (no visible sky or sky reflections). If enabled in a scene where the background is visible, "ghost trail" artifacts will be visible when moving the camera.
 
 
 - **BG_CLEAR_COLOR** = **0** --- Clears the background using the clear color defined in :ref:`ProjectSettings.rendering/environment/default_clear_color<class_ProjectSettings_property_rendering/environment/default_clear_color>`.
 - **BG_CLEAR_COLOR** = **0** --- Clears the background using the clear color defined in :ref:`ProjectSettings.rendering/environment/default_clear_color<class_ProjectSettings_property_rendering/environment/default_clear_color>`.
 
 
@@ -1195,6 +1197,10 @@ The bloom's intensity. If set to a value higher than ``0``, this will make glow
 
 
 If ``true``, the glow effect is enabled.
 If ``true``, the glow effect is enabled.
 
 
+**Note:** Only effective if :ref:`ProjectSettings.rendering/quality/intended_usage/framebuffer_allocation<class_ProjectSettings_property_rendering/quality/intended_usage/framebuffer_allocation>` is **3D** (*not* **3D Without Effects**). On mobile, :ref:`ProjectSettings.rendering/quality/intended_usage/framebuffer_allocation<class_ProjectSettings_property_rendering/quality/intended_usage/framebuffer_allocation>` defaults to **3D Without Effects** by default, so its ``.mobile`` override needs to be changed to **3D**.
+
+**Note:** When using GLES3 on mobile, HDR rendering is disabled by default for performance reasons. This means glow will only be visible if :ref:`glow_hdr_threshold<class_Environment_property_glow_hdr_threshold>` is decreased below ``1.0`` or if :ref:`glow_bloom<class_Environment_property_glow_bloom>` is increased above ``0.0``. Also consider increasing :ref:`glow_intensity<class_Environment_property_glow_intensity>` to ``1.5``. If you want glow to behave on mobile like it does on desktop (at a performance cost), enable :ref:`ProjectSettings.rendering/quality/depth/hdr<class_ProjectSettings_property_rendering/quality/depth/hdr>`'s ``.mobile`` override.
+
 ----
 ----
 
 
 .. _class_Environment_property_glow_hdr_luminance_cap:
 .. _class_Environment_property_glow_hdr_luminance_cap:

+ 1 - 1
classes/class_geometry.rst

@@ -468,7 +468,7 @@ Triangulates the area specified by discrete set of ``points`` such that no point
 
 
 - :ref:`PoolIntArray<class_PoolIntArray>` **triangulate_polygon** **(** :ref:`PoolVector2Array<class_PoolVector2Array>` polygon **)**
 - :ref:`PoolIntArray<class_PoolIntArray>` **triangulate_polygon** **(** :ref:`PoolVector2Array<class_PoolVector2Array>` polygon **)**
 
 
-Triangulates the polygon specified by the points in ``polygon``. Returns a :ref:`PoolIntArray<class_PoolIntArray>` where each triangle consists of three consecutive point indices into ``polygon`` (i.e. the returned array will have ``n * 3`` elements, with ``n`` being the number of found triangles). If the triangulation did not succeed, an empty :ref:`PoolIntArray<class_PoolIntArray>` is returned.
+Triangulates the polygon specified by the points in ``polygon``. Returns a :ref:`PoolIntArray<class_PoolIntArray>` where each triangle consists of three consecutive point indices into ``polygon`` (i.e. the returned array will have ``n * 3`` elements, with ``n`` being the number of found triangles). Output triangles will always be counter clockwise, and the contour will be flipped if it's clockwise. If the triangulation did not succeed, an empty :ref:`PoolIntArray<class_PoolIntArray>` is returned.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 2 - 0
classes/class_giprobe.rst

@@ -268,6 +268,8 @@ Bakes the effect from all :ref:`GeometryInstance<class_GeometryInstance>`\ s mar
 
 
 **Note:** :ref:`bake<class_GIProbe_method_bake>` works from the editor and in exported projects. This makes it suitable for procedurally generated or user-built levels. Baking a ``GIProbe`` generally takes from 5 to 20 seconds in most scenes. Reducing :ref:`subdiv<class_GIProbe_property_subdiv>` can speed up baking.
 **Note:** :ref:`bake<class_GIProbe_method_bake>` works from the editor and in exported projects. This makes it suitable for procedurally generated or user-built levels. Baking a ``GIProbe`` generally takes from 5 to 20 seconds in most scenes. Reducing :ref:`subdiv<class_GIProbe_property_subdiv>` can speed up baking.
 
 
+**Note:** :ref:`GeometryInstance<class_GeometryInstance>`\ s and :ref:`Light<class_Light>`\ s must be fully ready before :ref:`bake<class_GIProbe_method_bake>` is called. If you are procedurally creating those and some meshes or lights are missing from your baked ``GIProbe``, use ``call_deferred("bake")`` instead of calling :ref:`bake<class_GIProbe_method_bake>` directly.
+
 ----
 ----
 
 
 .. _class_GIProbe_method_debug_bake:
 .. _class_GIProbe_method_debug_bake:

+ 2 - 2
classes/class_heightmapshape.rst

@@ -60,7 +60,7 @@ Height map data, pool array must be of :ref:`map_width<class_HeightMapShape_prop
 | *Getter*  | get_map_depth()      |
 | *Getter*  | get_map_depth()      |
 +-----------+----------------------+
 +-----------+----------------------+
 
 
-Depth of the height map data. Changing this will resize the :ref:`map_data<class_HeightMapShape_property_map_data>`.
+Number of vertices in the depth of the height map. Changing this will resize the :ref:`map_data<class_HeightMapShape_property_map_data>`.
 
 
 ----
 ----
 
 
@@ -76,7 +76,7 @@ Depth of the height map data. Changing this will resize the :ref:`map_data<class
 | *Getter*  | get_map_width()      |
 | *Getter*  | get_map_width()      |
 +-----------+----------------------+
 +-----------+----------------------+
 
 
-Width of the height map data. Changing this will resize the :ref:`map_data<class_HeightMapShape_property_map_data>`.
+Number of vertices in the width of the height map. Changing this will resize the :ref:`map_data<class_HeightMapShape_property_map_data>`.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 3 - 1
classes/class_node.rst

@@ -547,6 +547,8 @@ The name of the node. This name is unique among the siblings (other child nodes
 
 
 The node owner. A node can have any other node as owner (as long as it is a valid parent, grandparent, etc. ascending in the tree). When saving a node (using :ref:`PackedScene<class_PackedScene>`), all the nodes it owns will be saved with it. This allows for the creation of complex :ref:`SceneTree<class_SceneTree>`\ s, with instancing and subinstancing.
 The node owner. A node can have any other node as owner (as long as it is a valid parent, grandparent, etc. ascending in the tree). When saving a node (using :ref:`PackedScene<class_PackedScene>`), all the nodes it owns will be saved with it. This allows for the creation of complex :ref:`SceneTree<class_SceneTree>`\ s, with instancing and subinstancing.
 
 
+**Note:** If you want a child to be persisted to a :ref:`PackedScene<class_PackedScene>`, you must set :ref:`owner<class_Node_property_owner>` in addition to calling :ref:`add_child<class_Node_method_add_child>`. This is typically relevant for `tool scripts <https://docs.godotengine.org/en/3.4/tutorials/misc/running_code_in_the_editor.html>`__ and `editor plugins <https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html>`__. If :ref:`add_child<class_Node_method_add_child>` is called without setting :ref:`owner<class_Node_property_owner>`, the newly added ``Node`` will not be visible in the scene tree, though it will be visible in the 2D/3D view.
+
 ----
 ----
 
 
 .. _class_Node_property_pause_mode:
 .. _class_Node_property_pause_mode:
@@ -720,7 +722,7 @@ If ``legible_unique_name`` is ``true``, the child node will have a human-readabl
         child_node.get_parent().remove_child(child_node)
         child_node.get_parent().remove_child(child_node)
     add_child(child_node)
     add_child(child_node)
 
 
-**Note:** If you want a child to be persisted to a :ref:`PackedScene<class_PackedScene>`, you must set :ref:`owner<class_Node_property_owner>` in addition to calling :ref:`add_child<class_Node_method_add_child>`. This is typically relevant for `tool scripts <https://godot.readthedocs.io/en/3.2/tutorials/misc/running_code_in_the_editor.html>`__ and `editor plugins <https://godot.readthedocs.io/en/latest/tutorials/plugins/editor/index.html>`__. If :ref:`add_child<class_Node_method_add_child>` is called without setting :ref:`owner<class_Node_property_owner>`, the newly added ``Node`` will not be visible in the scene tree, though it will be visible in the 2D/3D view.
+**Note:** If you want a child to be persisted to a :ref:`PackedScene<class_PackedScene>`, you must set :ref:`owner<class_Node_property_owner>` in addition to calling :ref:`add_child<class_Node_method_add_child>`. This is typically relevant for `tool scripts <https://docs.godotengine.org/en/3.4/tutorials/misc/running_code_in_the_editor.html>`__ and `editor plugins <https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html>`__. If :ref:`add_child<class_Node_method_add_child>` is called without setting :ref:`owner<class_Node_property_owner>`, the newly added ``Node`` will not be visible in the scene tree, though it will be visible in the 2D/3D view.
 
 
 ----
 ----
 
 

+ 3 - 1
classes/class_object.rst

@@ -220,7 +220,9 @@ Each property's :ref:`Dictionary<class_Dictionary>` must contain at least ``name
 
 
 - void **_init** **(** **)** |virtual|
 - void **_init** **(** **)** |virtual|
 
 
-Called when the object is initialized.
+Called when the object is initialized in memory. Can be defined to take in parameters, that are passed in when constructing.
+
+**Note:** If :ref:`_init<class_Object_method__init>` is defined with required parameters, then explicit construction is the only valid means of creating an Object of the class. If any other means (such as :ref:`PackedScene.instance<class_PackedScene_method_instance>`) is used, then initialization will fail.
 
 
 ----
 ----
 
 

+ 1 - 1
classes/class_physicsserver.rst

@@ -1525,7 +1525,7 @@ Sets a generic_6_DOF_joint parameter (see :ref:`G6DOFJointAxisParam<enum_Physics
 
 
 - :ref:`int<class_int>` **get_process_info** **(** :ref:`ProcessInfo<enum_PhysicsServer_ProcessInfo>` process_info **)**
 - :ref:`int<class_int>` **get_process_info** **(** :ref:`ProcessInfo<enum_PhysicsServer_ProcessInfo>` process_info **)**
 
 
-Returns an Info defined by the :ref:`ProcessInfo<enum_PhysicsServer_ProcessInfo>` input given.
+Returns information about the current state of the 3D physics engine. See :ref:`ProcessInfo<enum_PhysicsServer_ProcessInfo>` for a list of available states. Only implemented for Godot Physics.
 
 
 ----
 ----
 
 

+ 11 - 5
classes/class_projectsettings.rst

@@ -5110,7 +5110,7 @@ Uses a simplified method of generating PVS (potentially visible set) data. The r
 | *Default* | ``true`` |
 | *Default* | ``true`` |
 +-----------+----------+
 +-----------+----------+
 
 
-If ``true``, allocates the main framebuffer with high dynamic range. High dynamic range allows the use of :ref:`Color<class_Color>` values greater than 1.
+If ``true``, allocates the root :ref:`Viewport<class_Viewport>`'s framebuffer with high dynamic range. High dynamic range allows the use of :ref:`Color<class_Color>` values greater than 1. This must be set to ``true`` for glow rendering to work if :ref:`Environment.glow_hdr_threshold<class_Environment_property_glow_hdr_threshold>` is greater than or equal to ``1.0``.
 
 
 **Note:** Only available on the GLES3 backend.
 **Note:** Only available on the GLES3 backend.
 
 
@@ -5124,7 +5124,9 @@ If ``true``, allocates the main framebuffer with high dynamic range. High dynami
 | *Default* | ``false`` |
 | *Default* | ``false`` |
 +-----------+-----------+
 +-----------+-----------+
 
 
-Lower-end override for :ref:`rendering/quality/depth/hdr<class_ProjectSettings_property_rendering/quality/depth/hdr>` on mobile devices, due to performance concerns or driver support.
+Lower-end override for :ref:`rendering/quality/depth/hdr<class_ProjectSettings_property_rendering/quality/depth/hdr>` on mobile devices, due to performance concerns or driver support. This must be set to ``true`` for glow rendering to work if :ref:`Environment.glow_hdr_threshold<class_Environment_property_glow_hdr_threshold>` is greater than or equal to ``1.0``.
+
+**Note:** Only available on the GLES3 backend.
 
 
 ----
 ----
 
 
@@ -5290,7 +5292,7 @@ If ``true``, uses nearest-neighbor mipmap filtering when using mipmaps (also cal
 | *Default* | ``2`` |
 | *Default* | ``2`` |
 +-----------+-------+
 +-----------+-------+
 
 
-Strategy used for framebuffer allocation. The simpler it is, the less resources it uses (but the less features it supports). If set to "2D Without Sampling" or "3D Without Effects", sample buffers will not be allocated. This means ``SCREEN_TEXTURE`` and ``DEPTH_TEXTURE`` will not be available in shaders and post-processing effects will not be available in the :ref:`Environment<class_Environment>`.
+Strategy used for framebuffer allocation. The simpler it is, the less resources it uses (but the less features it supports). If set to "2D Without Sampling" or "3D Without Effects", sample buffers will not be allocated. This means ``SCREEN_TEXTURE`` and ``DEPTH_TEXTURE`` will not be available in shaders and post-processing effects such as glow will not be available in :ref:`Environment<class_Environment>`.
 
 
 ----
 ----
 
 
@@ -5472,7 +5474,11 @@ Lower-end override for :ref:`rendering/quality/shading/force_lambert_over_burley
 | *Default* | ``false`` |
 | *Default* | ``false`` |
 +-----------+-----------+
 +-----------+-----------+
 
 
-If ``true``, forces vertex shading for all rendering. This can increase performance a lot, but also reduces quality immensely. Can be used to optimize performance on low-end mobile devices.
+If ``true``, forces vertex shading for all 3D :ref:`SpatialMaterial<class_SpatialMaterial>` and :ref:`ShaderMaterial<class_ShaderMaterial>` rendering. This can be used to improve performance on low-end mobile devices. The downside is that shading becomes much less accurate, with visible linear interpolation between vertices that are joined together. This can be compensated by ensuring meshes have a sufficient level of subdivision (but not too much, to avoid reducing performance). Some material features are also not supported when vertex shading is enabled.
+
+See also :ref:`SpatialMaterial.flags_vertex_lighting<class_SpatialMaterial_property_flags_vertex_lighting>` which can be used to enable vertex shading on specific materials only.
+
+**Note:** This setting does not affect unshaded materials.
 
 
 ----
 ----
 
 
@@ -5484,7 +5490,7 @@ If ``true``, forces vertex shading for all rendering. This can increase performa
 | *Default* | ``true`` |
 | *Default* | ``true`` |
 +-----------+----------+
 +-----------+----------+
 
 
-Lower-end override for :ref:`rendering/quality/shading/force_vertex_shading<class_ProjectSettings_property_rendering/quality/shading/force_vertex_shading>` on mobile devices, due to performance concerns or driver support.
+Lower-end override for :ref:`rendering/quality/shading/force_vertex_shading<class_ProjectSettings_property_rendering/quality/shading/force_vertex_shading>` on mobile devices, due to performance concerns or driver support. If lighting looks broken after exporting the project to a mobile platform, try disabling this setting.
 
 
 ----
 ----
 
 

+ 5 - 3
classes/class_range.rst

@@ -69,7 +69,9 @@ Emitted when :ref:`min_value<class_Range_property_min_value>`, :ref:`max_value<c
 
 
 - **value_changed** **(** :ref:`float<class_float>` value **)**
 - **value_changed** **(** :ref:`float<class_float>` value **)**
 
 
-Emitted when :ref:`value<class_Range_property_value>` changes.
+Emitted when :ref:`value<class_Range_property_value>` changes. When used on a :ref:`Slider<class_Slider>`, this is called continuously while dragging (potentially every frame). If you are performing an expensive operation in a function connected to :ref:`value_changed<class_Range_signal_value_changed>`, consider using a *debouncing* :ref:`Timer<class_Timer>` to call the function less often.
+
+**Note:** Unlike signals such as :ref:`LineEdit.text_changed<class_LineEdit_signal_text_changed>`, :ref:`value_changed<class_Range_signal_value_changed>` is also emitted when ``value`` is set directly via code.
 
 
 Property Descriptions
 Property Descriptions
 ---------------------
 ---------------------
@@ -237,7 +239,7 @@ Method Descriptions
 
 
 - void **share** **(** :ref:`Node<class_Node>` with **)**
 - void **share** **(** :ref:`Node<class_Node>` with **)**
 
 
-Binds two ranges together along with any ranges previously grouped with either of them. When any of range's member variables change, it will share the new value with all other ranges in its group.
+Binds two ``Range``\ s together along with any ranges previously grouped with either of them. When any of range's member variables change, it will share the new value with all other ranges in its group.
 
 
 ----
 ----
 
 
@@ -245,7 +247,7 @@ Binds two ranges together along with any ranges previously grouped with either o
 
 
 - void **unshare** **(** **)**
 - void **unshare** **(** **)**
 
 
-Stops range from sharing its member variables with any other.
+Stops the ``Range`` from sharing its member variables with any other.
 
 
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`
 .. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

+ 7 - 1
classes/class_spatialmaterial.rst

@@ -1407,7 +1407,13 @@ If ``true``, enables the "shadow to opacity" render mode where lighting modifies
 | *Getter*  | get_flag()      |
 | *Getter*  | get_flag()      |
 +-----------+-----------------+
 +-----------+-----------------+
 
 
-If ``true``, lighting is calculated per vertex rather than per pixel. This may increase performance on low-end devices.
+If ``true``, lighting is calculated per vertex rather than per pixel. This may increase performance on low-end devices, especially for meshes with a lower polygon count. The downside is that shading becomes much less accurate, with visible linear interpolation between vertices that are joined together. This can be compensated by ensuring meshes have a sufficient level of subdivision (but not too much, to avoid reducing performance). Some material features are also not supported when vertex shading is enabled.
+
+See also :ref:`ProjectSettings.rendering/quality/shading/force_vertex_shading<class_ProjectSettings_property_rendering/quality/shading/force_vertex_shading>` which can globally enable vertex shading on all materials.
+
+**Note:** By default, vertex shading is enforced on mobile platforms by :ref:`ProjectSettings.rendering/quality/shading/force_vertex_shading<class_ProjectSettings_property_rendering/quality/shading/force_vertex_shading>`'s ``mobile`` override.
+
+**Note:** :ref:`flags_vertex_lighting<class_SpatialMaterial_property_flags_vertex_lighting>` has no effect if :ref:`flags_unshaded<class_SpatialMaterial_property_flags_unshaded>` is ``true``.
 
 
 ----
 ----
 
 

+ 39 - 7
classes/class_string.rst

@@ -405,7 +405,11 @@ Returns ``true`` if the string begins with the given string.
 
 
 - :ref:`PoolStringArray<class_PoolStringArray>` **bigrams** **(** **)**
 - :ref:`PoolStringArray<class_PoolStringArray>` **bigrams** **(** **)**
 
 
-Returns the bigrams (pairs of consecutive letters) of this string.
+Returns an array containing the bigrams (pairs of consecutive letters) of this string.
+
+::
+
+    print("Bigrams".bigrams()) # Prints "[Bi, ig, gr, ra, am, ms]"
 
 
 ----
 ----
 
 
@@ -706,7 +710,14 @@ Returns ``true`` if this string is free from characters that aren't allowed in f
 
 
 - :ref:`bool<class_bool>` **is_valid_float** **(** **)**
 - :ref:`bool<class_bool>` **is_valid_float** **(** **)**
 
 
-Returns ``true`` if this string contains a valid float.
+Returns ``true`` if this string contains a valid float. This is inclusive of integers, and also supports exponents:
+
+::
+
+    print("1.7".is_valid_float()) # Prints "True"
+    print("24".is_valid_float()) # Prints "True"
+    print("7e3".is_valid_float()) # Prints "True"
+    print("Hello".is_valid_float()) # Prints "False"
 
 
 ----
 ----
 
 
@@ -732,6 +743,12 @@ Returns ``true`` if this string contains a valid color in hexadecimal HTML notat
 
 
 Returns ``true`` if this string is a valid identifier. A valid identifier may contain only letters, digits and underscores (``_``) and the first character may not be a digit.
 Returns ``true`` if this string is a valid identifier. A valid identifier may contain only letters, digits and underscores (``_``) and the first character may not be a digit.
 
 
+::
+
+    print("good_ident_1".is_valid_identifier()) # Prints "True"
+    print("1st_bad_ident".is_valid_identifier()) # Prints "False"
+    print("bad_ident_#2".is_valid_identifier()) # Prints "False"
+
 ----
 ----
 
 
 .. _class_String_method_is_valid_integer:
 .. _class_String_method_is_valid_integer:
@@ -740,6 +757,14 @@ Returns ``true`` if this string is a valid identifier. A valid identifier may co
 
 
 Returns ``true`` if this string contains a valid integer.
 Returns ``true`` if this string contains a valid integer.
 
 
+::
+
+    print("7".is_valid_int()) # Prints "True"
+    print("14.6".is_valid_int()) # Prints "False"
+    print("L".is_valid_int()) # Prints "False"
+    print("+3".is_valid_int()) # Prints "True"
+    print("-12".is_valid_int()) # Prints "True"
+
 ----
 ----
 
 
 .. _class_String_method_is_valid_ip_address:
 .. _class_String_method_is_valid_ip_address:
@@ -788,7 +813,7 @@ Returns a copy of the string with characters removed from the left. The ``chars`
 
 
 - :ref:`bool<class_bool>` **match** **(** :ref:`String<class_String>` expr **)**
 - :ref:`bool<class_bool>` **match** **(** :ref:`String<class_String>` expr **)**
 
 
-Does a simple case-sensitive expression match, where ``"*"`` matches zero or more arbitrary characters and ``"?"`` matches any single character except a period (``"."``).
+Does a simple case-sensitive expression match, where ``"*"`` matches zero or more arbitrary characters and ``"?"`` matches any single character except a period (``"."``). An empty string or empty expression always evaluates to ``false``.
 
 
 ----
 ----
 
 
@@ -796,7 +821,7 @@ Does a simple case-sensitive expression match, where ``"*"`` matches zero or mor
 
 
 - :ref:`bool<class_bool>` **matchn** **(** :ref:`String<class_String>` expr **)**
 - :ref:`bool<class_bool>` **matchn** **(** :ref:`String<class_String>` expr **)**
 
 
-Does a simple case-insensitive expression match, where ``"*"`` matches zero or more arbitrary characters and ``"?"`` matches any single character except a period (``"."``).
+Does a simple case-insensitive expression match, where ``"*"`` matches zero or more arbitrary characters and ``"?"`` matches any single character except a period (``"."``). An empty string or empty expression always evaluates to ``false``.
 
 
 ----
 ----
 
 
@@ -959,8 +984,8 @@ Example:
     var some_string = "One,Two,Three,Four"
     var some_string = "One,Two,Three,Four"
     var some_array = some_string.rsplit(",", true, 1)
     var some_array = some_string.rsplit(",", true, 1)
     print(some_array.size()) # Prints 2
     print(some_array.size()) # Prints 2
-    print(some_array[0]) # Prints "Four"
-    print(some_array[1]) # Prints "Three,Two,One"
+    print(some_array[0]) # Prints "One,Two,Three"
+    print(some_array[1]) # Prints "Four"
 
 
 ----
 ----
 
 
@@ -1010,7 +1035,14 @@ Returns the SHA-256 hash of the string as a string.
 
 
 - :ref:`float<class_float>` **similarity** **(** :ref:`String<class_String>` text **)**
 - :ref:`float<class_float>` **similarity** **(** :ref:`String<class_String>` text **)**
 
 
-Returns the similarity index of the text compared to this string. 1 means totally similar and 0 means totally dissimilar.
+Returns the similarity index (`Sorensen-Dice coefficient <https://en.wikipedia.org/wiki/S%C3%B8rensen%E2%80%93Dice_coefficient>`__) of this string compared to another. A result of 1.0 means totally similar, while 0.0 means totally dissimilar.
+
+::
+
+    print("ABC123".similarity("ABC123")) # Prints "1"
+    print("ABC123".similarity("XYZ456")) # Prints "0"
+    print("ABC123".similarity("123ABC")) # Prints "0.8"
+    print("ABC123".similarity("abc123")) # Prints "0.4"
 
 
 ----
 ----