1
0
Fork 0
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