1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-10 13:00:37 +00:00
Commit Graph

75 Commits

Author SHA1 Message Date
Rémi Verschelde
1123d7fd9c Merge pull request #102499 from Jordyfel/resource-docs
Improve documentation of some `Resource` methods
2025-06-28 13:02:54 +02:00
A Thousand Ships
2db7ecd410 [Docs] Various grammar and spelling fixes 2025-06-23 20:54:08 +02:00
Pedro J. Estébanez
7dc37bdc9c Enhance bindings of deep resource duplication 2025-06-20 18:40:41 +02:00
kobewi
13f642d959 Replace XML codeblock spaces with tabs 2025-06-06 14:35:38 +02:00
Pedro J. Estébanez
342266cfd9 Overhaul Variant::duplicate() for resources
This in the scope of a duplication triggered via any type in the `Variant` realm. that is, the following: `Variant` itself, `Array` and `Dictionary`. That includes invoking `duplicate()` from scripts.

A `duplicate_deep(deep_subresources_mode)` method is added to `Variant`, `Array` and `Dictionary` (for compatibility reasons, simply adding an extra parameter was not possible). The default value for it is `RESOURCE_DEEP_DUPLICATE_NONE`, which is like calling `duplicate(true)`.

Remarks:
- The results of copying resources via those `Variant` types are exactly the same as if the copy were initiated from the `Resource` type at C++.
- In order to keep some separation between `Variant` and the higher-level animal which is `Resource`, `Variant` still contains the original code for that, so it's self-sufficient unless there's a `Resource` involved. Once the deep copy finds a `Resource` that has to be copied according to the duplication parameters, the algorithm invokes the `Resource` duplication machinery. When the stack is unwind back to a nesting level `Variant` can handle, `Variant` duplication logic keeps functioning.

While that is good from a responsibility separation standpoint, that would have a caveat: `Variant` would not be aware of the mapping between original and duplicate subresources and so wouldn't be able to keep preventing multiple duplicates.

To avoid that, this commit also introduces a wormwhole, a sharing mechanism by which `Variant` and `Resource` can collaborate in managing the lifetime of the original-to-duplicates map. The user-visible benefit is that the overduplicate prevention works as broadly as the whole `Variant` entity being copied, including all nesting levels, regardless how disconnected the data members containing resources may be across al the nesting levels. In other words, despite the aforementioned division of duties between `Variant` and `Resource` duplication logic, the duplicates map is shared among them. It's created when first finding a `Resource` and, however how deep the copy was working at that point, the map kept alive unitl the stack is unwind to the root user call, until the first step of the recursion.

Thanks to that common map of duplicates, this commit is able to fix the issue that `Resource::duplicate_for_local_scene()` used to ignore overridden duplicate logic.
2025-05-26 10:06:40 +02:00
Pedro J. Estébanez
2a03b459b9 Overhaul Resource::duplicate()
Thanks to a refactor, `Resource::duplicate_for_local_scene()` and `Resource::duplicate()` are now both users of the same, parametrized, implementation.

`Resource::duplicate()` now honors deepness in a more consistent and predictable fashion. `Resource::duplicate_deep()` is added (instead of just adding a parameter to the former, for compatibility needs).

The behavior after this change is as follows:
  - Deep (`deep=true`, formerly `subresources=true`):
    - Previously, only resources found as direct property values of the one to copy would be, recursively, duplicated.
    - Now, in addition, arrays and dictionaries are walked so the copy is truly deep, and only local subresources found across are copied.
    - Previously, subresources would be duplicated as many times as being referenced throughout the main resource.
    - Now, each subresource is only duplicated once and from that point, a referenced to that single copy is used. That's the enhanced behavior that `duplicate_for_local_scene()` already featured.
    - The behavior with respect to packed arrays is still duplication.
    - Formerly, arrays and dictionaries were recursive duplicated, with resources ignored.
    - Now, arrays and dictionaries are recursive duplicated, with resources duplicated.
    - When doing it through `duplicate_deep()`, there's a` deep_subresources_mode` parameter, with various possibilites to control if no resources are duplicated (so arrays, etc. are, but keeping referencing the originals), if only the internal ones are (resources with no non-local path, the default), or if all of them are. The default is to copy every subresource, just like `duplicate(true)`.
  - Not deep (`deep=false`, formerly `subresources=false`): <a name="resource-shallow"></a>
    - Previously, the first level of resources found as direct property values would be duplicated unconditionally. Packed arrays, arrays and dictionaries were non-recursively duplicated.
    - Now, no subresource found at any level in any form will be duplicated, but the original reference kept instead. Packed arrays, arrays and dictionaries are referenced, not duplicated at all.
    - Now, resources found as values of always-duplicate properties are duplicated, recursively or not matching what was requested for the root call.

This commit also changes what's the virtual method to override to customize the duplication (now it's the protected `_duplicate()` instead of the public `duplicate()`).
2025-05-26 10:05:25 +02:00
Jordyfel
e9703ee1aa Improve documentation of some Resource methods 2025-02-11 21:55:20 +02:00
Thaddeus Crews
2c31bd767c Merge pull request #99020 from Mickeon/documentation-example-pruning-2
Clean up more `[b]Example:[/b]` lines from the class reference
2024-11-12 09:28:02 -06:00
Micky
932b1c434c Clean up more [b]Example:[/b] lines from the class reference 2024-11-11 12:05:34 +01:00
Chris Cranford
bc3dcf3d40 Expose several resource/resource-saver functions 2024-09-22 15:27:13 -04:00
kobewi
0d1c388991 Fix some legacy code 2024-08-01 12:08:14 +02:00
Adriaan de Jongh
5488fef3af Clarify that Resource.duplicate(true) doesn't duplicate subresources inside Array or Dictionary properties 2024-07-14 16:32:08 +02:00
Ryan
42ce14043e Expose scene unique id functionality in Resource 2024-03-07 14:53:58 +01:00
Micky
c54e09a5a3 Overhaul some "uncommon" wording in class reference 2024-03-01 15:32:38 +01:00
Micky
f9a758772a Update many Deprecated/Experimental descriptions for consistency 2024-02-17 21:33:12 +01:00
Danil Alexeev
af28f87791 Documentation: Add support for deprecated/experimental messages 2024-02-15 15:59:50 +03:00
kobewi
a1aa1a468f Clarify some descriptions regarding resource cache 2023-12-10 20:30:01 +01:00
Boris The Brave
a390996a61 Document that resource_name is not always supported
Closes #82333.

Co-authored-by: Yuri Sizov <11782833+YuriSizov@users.noreply.github.com>
2023-11-01 10:43:41 +01:00
Micky
79ce0c6e80 Reimplement Resource._local_to_scene_setup & remove workaround
Reimplements the virtual method _setup_local_to_scene, lost in #51970

Also deprecates the redundant `setup_local_to_scene_requested` signal.
2023-09-09 13:51:12 +02:00
Micky
0af2467029 Unexpose Resource.setup_local_to_scene
Good riddance.

Also modifies a note in ViewportTexture
2023-09-06 23:38:42 +02:00
Jose Falanga
bf62fb059c Clarify when the changed signal is emitted for Resource and ShaderMaterial 2023-07-24 10:31:57 -03:00
Rémi Verschelde
81064cc239 Doctool: Remove version attribute from XML header
We don't use that info for anything, and it generates unnecessary diffs
every time we bump the minor version (and CI failures if we forget to
sync some files from opt-in modules (mono, text_server_fb).
2023-07-06 10:08:21 +02:00
Rémi Verschelde
346f1ab86b Bump version to 4.2-dev
Keep on waitin'
2023-07-05 22:07:03 +02:00
Yuri Sizov
490a76edc8 Merge pull request #76526 from MewPurPur/improve-docs-top-sections-CORE
Overhaul the top sections of the class reference (Core classes)
2023-05-29 17:08:40 +02:00
Ninni Pipping
17fb77223c Minor grammar fixes to documentation 2023-05-28 18:27:56 +02:00
VolTer
04562662d3 Overhaul the top sections of the class reference (Core classes) 2023-05-19 07:04:48 +02:00
Rémi Verschelde
1c1524a651 Bump version to 4.1-dev
Can't stop, won't stop, they said, huh?
2023-03-01 01:44:37 +01:00
Aaron Franke
2a65f6812b Add PROPERTY_USAGE_NEVER_DUPLICATE flag and use for script
Co-authored-by: Yakov Borevich <j.borevich@gmail.com>
2023-01-24 16:37:50 -06:00
Aaron Franke
2bc0bcbd26 PropertyUsage: Rename "DO_NOT_SHARE_ON_DUPLICATE" to "ALWAYS_DUPLICATE" 2023-01-24 16:05:07 -06:00
Rémi Verschelde
f7c611ab71 Style: Misc docs and comment style and language fixes
- Removed empty paragraphs in XML.
- Consistently use bold style for "Example:", on a new line.
- Fix usage of `[code]` when hyperlinks could be used (`[member]`, `[constant]`).
- Fix invalid usage of backticks for inline code in BBCode.
- Fix some American/British English spelling inconsistencies.
- Other minor fixes spotted along the way, including typo fixes with codespell.
- Don't specify `@GlobalScope` for `enum` and `constant`.
2022-11-02 19:01:18 +01:00
Micky
34804a68e8 Rewrite most of Resource's documentation 2022-10-18 21:03:29 +02:00
Andy Maloney
1f72f48361 [doc] Use "param" instead of "code" to refer to parameters #3 2022-08-09 22:00:19 -04:00
Yuri Sizov
c5d7115038 Rename the argument tag to param in XML documentation 2022-08-08 22:34:31 +03:00
reduz
6f51eca1e3 Discern between virtual and abstract class bindings
* Previous "virtual" classes (which can't be instantiated) are not corretly named "abstract".
* Added a new "virtual" category for classes, they can't be instantiated from the editor, but can be inherited from script and extensions.
* Converted a large amount of classes from "abstract" to "virtual" where it makes sense.

Most classes that make sense have been converted. Missing:

* Physics servers
* VideoStream
* Script* classes.

which will go in a separate PR due to the complexity involved.
2022-03-10 12:28:11 +01:00
Hugo Locurcio
b68dd2e189 Add an XML schema for documentation
This makes it easier to spot syntax errors when editing the
class reference. The schema is referenced locally so validation
can still work offline.

Each class XML's schema conformance is also checked on GitHub Actions.
2022-02-15 00:03:31 +01:00
Rémi Verschelde
6c1bd4d227 Replace Godot docs URL with $DOCS_URL in XML class reference 2021-11-15 13:02:21 +01:00
Rémi Verschelde
862994a8ef doc: Update links to latest documentation after content reorganization 2021-10-06 13:48:48 +02:00
Aaron Franke
d54f2ad7ca Don't generate empty doc sections and reduce code duplication 2021-09-20 20:59:33 -05:00
Rémi Verschelde
f24a98024d Merge pull request #44885 from Jummit/duplicate-docs
Clarify that duplicate only copies exported members and fails with a constructor
2021-09-16 10:52:19 +02:00
Jummit
a6108f8a3d clarify what duplicate does and its limitations 2021-09-12 09:18:52 +02:00
reduz
3682978aee Replace BIND_VMETHOD by new GDVIRTUAL syntax
* New syntax is type safe.
* New syntax allows for type safe virtuals in native extensions.
* New syntax permits extremely fast calling.

Note: Everything was replaced where possible except for `_gui_input` `_input` and `_unhandled_input`.
These will require API rework on a separate PR as they work different than the rest of the functions.

Added a new method flag METHOD_FLAG_OBJECT_CORE, used internally. Allows to not dump the core virtuals like `_notification` to the json API, since each language will implement those as it is best fits.
2021-08-22 08:23:58 -03:00
Rémi Verschelde
7adf4cc9b5 doc: Use self-closing tags for return and argument
For the time being we don't support writing a description for those, preferring
having all details in the method's description.

Using self-closing tags saves half the lines, and prevents contributors from
thinking that they should write the argument or return documentation there.
2021-07-30 15:29:52 +02:00
Lightning_A
e28fd07b2b Rename instance()->instantiate() when it's a verb 2021-06-19 20:49:18 -06:00
Pedro J. Estébanez
04688b92ff Rename Reference to RefCounted 2021-06-11 18:48:42 +02:00
Hugo Locurcio
2ba893e3ce Document Resource.duplicate() only copying exported variables' values 2021-05-31 00:11:38 +02:00
Hugo Locurcio
1a606b1a04 Document a built-in use of Resource.resource_name 2021-01-23 21:33:48 +01:00
Andrii Doroshenko (Xrayez)
e94f46dcdb Expose Resource.emit_changed() to script
Also known as `emit_signal("changed")`.
2021-01-13 16:27:58 +02:00
skyace65
dca298d22b Remove the implication that references and resources are not objected from their description 2021-01-11 08:22:16 -05:00
Tomasz Chabora
b552c26c68 Mention that 'changed' signal needs manual emit 2020-12-03 20:11:52 +01:00
Hugo Locurcio
0565c76e8b Document C# garbage collection caveats in Reference and Resource 2020-11-23 14:01:50 +01:00