summaryrefslogtreecommitdiff
path: root/modules
AgeCommit message (Collapse)Author
2022-12-02C#: Cleanup Variant marshaling code in source/bindings generatorsIgnacio Roldán Etcheverry
This change aims to reduce the number of places that need to be changed when adding or editing a Godot type to the bindings. Since the addition of `Variant.From<T>/As<T>` and `VariantUtils.CreateFrom<T>/ConvertTo<T>`, we can now replace a lot of the previous code in the bindings generator and the source generators that specify these conversions for each type manually. The only exceptions are the generic Godot collections (`Array<T>` and `Dictionary<TKey, TValue>`) which still use the old version, as that one cannot be matched by our new conversion methods (limitation in the language with generics, forcing us to use delegate pointers). The cleanup applies to: - Bindings generator: - `TypeInterface.cs_variant_to_managed` - `TypeInterface.cs_managed_to_variant` - Source generators: - `MarshalUtils.AppendNativeVariantToManagedExpr` - `MarshalUtils.AppendManagedToNativeVariantExpr` - `MarshalUtils.AppendVariantToManagedExpr` - `MarshalUtils.AppendManagedToVariantExpr`
2022-12-02C#: Replace most conversions between Variant and System.ObjectIgnacio Roldán Etcheverry
This commit replaces most usages of `ConvertManagedObjectToVariant` and `ConvertVariantToManagedObjectOfType`, by using the `Godot.Variant` struct instead of `System.Object`. The most notable change is to the `GetGodotPropertyDefaultValues` method that's generated for scripts. The dictionary it returns now stores `Godot.Variant` values. Remaining usages are: - The `DelegateUtils` class, for the serialization of closure display classes during assembly reloading by the editor. These display classes are compiler generated classes to store values captured by a closure. Since it's generated by the compiler, the only way we have to access the fields is through reflection. This leads to using `System.Object`. - Converting parameters when invoking constructors from the engine. This will be replaced with source generators in the future. - Legacy support for old `GetGodotPropertyDefaultValues` return values. We need to keep supporting the old version of this generated method for some time. Otherwise, if loading a project built with the previous version, it could lead to the loss of exported property values. Ideally, we should remove this legacy support before a stable release.
2022-12-02C#: Remove `ConvertVariantToManagedObject`Ignacio Roldán Etcheverry
Its two usages were: - The Array `ICollection.CopyTo` implementation. It's possible that this class shouldn't be implementing the non-generic `ICollection`, but this commit doesn't change that. The new implementation stores the elements as boxed `Variant` values. - The `Variant.Obj` property. I'm not sure if this property's existence is justified, but for now I rewrote it as a simpler version of `ConvertVariantToManagedObject`.
2022-12-02Merge pull request #67023 from raulsntos/dotnet/fix-signal-callback-generationIgnacio Roldán Etcheverry
C#: Fix signature of generated signal callbacks
2022-12-02Merge pull request #69166 from souplamp/icon-annotation-not-workingYuri Sizov
Update docs to clarify `@icon` only works with global script classes
2022-12-01Update docs to mention `@icon` only works with global script classessouplamp
Update the docs to clarify that the `@icon` annotation does not work when only attaching a script to a node, and clarify that the script itself must be a globally accessible script type.
2022-12-01Merge pull request #69423 from KoBeWi/parentureRémi Verschelde
Improve parent signature error
2022-12-01Merge pull request #68481 from dalexeev/gds-fix-dyn-arg-def-valRémi Verschelde
GDScript 2.0: Fix shift due to skip of non-constant default argument values
2022-12-01Improve parent signature errorkobewi
2022-12-01Merge pull request #69303 from Chaosus/gds_fix_loopsRémi Verschelde
Reset unassigned local variables to null in the loops
2022-11-30Merge pull request #69392 from dsnopek/openxr-quest-fixRémi Verschelde
Fix OpenXR on the Meta Quest: XR_KHR_loader_init_android is not reported as available (but it works anyway)
2022-11-30Merge pull request #69278 from rhofour/remove-namespacesIgnacio Roldán Etcheverry
Remove unnecessary namespaces in generated PropertyDefVal files.
2022-11-30Merge pull request #69269 from red1939/red1939/masterRémi Verschelde
Acknowledge that a CLASS kind of a DataType might not have an identifier
2022-11-30Acknowledge that a CLASS kind of a DataType might not have an identifierBartosz Bielecki
2022-11-29Remove unnecessary namespaces in generated PropertyDefVal files.R. Alex Hofer
2022-11-29Fix OpenXR on the Meta Quest: XR_KHR_loader_init_android is not reported as ↵David Snopek
available (but it works anyway)
2022-11-30Merge pull request #65905 from raulsntos/dotnet/marshaling-collectionsIgnacio Roldán Etcheverry
C#: Fix marshaling generic Godot collections
2022-11-29Enable GLES3 on Androidclayjohn
Add necessary build flags and switch from using a GLES2 context to a GLES3 one. This also enables building for OpenXR Co-authored-by: m4gr3d <fhuyakou@gmail.com> Co-authored-by: dsnopek <dsnopek@gmail.com>
2022-11-29Merge pull request #68665 from TokageItLab/cut-unkeyed-gltf-animRémi Verschelde
Add "Trimming" option to cut un-keyed timeline before first key in glTF animation
2022-11-29Use forward-declarations in big editor classestrollodel
2022-11-29Add trimming option to cut un-keyed timeline before first key in gltfSilc Renew
2022-11-28Reset unassigned local variables to null in the loopsYuri Rubinsky
2022-11-28Merge pull request #69224 from adamscott/fix-PackedScene-reload_from_fileRémi Verschelde
Add `PackedScene::reload_from_file()` override
2022-11-28Add PackedScene::reload_from_file() overrideAdam Scott
2022-11-28Fix lookup code to pass functions with the same name as built-insYuri Rubinsky
2022-11-28Merge pull request #69259 from adamscott/fix-cyclic-reference-base-issueRémi Verschelde
Fix cyclic reference base being loaded but not valid (which is ok)
2022-11-28Merge pull request #69272 from rune-scape/rune-avoid-global-baseRémi Verschelde
Avoid using `get_global_class_native_base`
2022-11-28Merge pull request #67031 from raulsntos/dotnet/string-extensionsRémi Verschelde
C#: Cleanup and sync StringExtensions with core
2022-11-28Merge pull request #65907 from magian1127/4.0FixPropertiesGeneratorIgnacio Roldán Etcheverry
C#: Fix Generated ScriptProperty Error.
2022-11-27C#: Remove/deprecate unnecessary string extensionsRaul Santos
- Removed `UnicodeAt` - Removed `EndsWith` - Removed `LPad` and `RPad` - Deprecated `BeginsWith` in favor of `string.StartsWith` - Deprecated `LStrip` and `RStrip` in favor of `string.TrimStart` and `string.TrimEnd`
2022-11-27Fix cyclic reference base being loaded but not valid (which is ok)Adam Scott
2022-11-27C#: Fix Generated ScriptProperty Error.Magian
1. Add "this." to prevent errors caused by duplicate variable names. 2. Try to find the default value of property getters.
2022-11-27GDScript: Avoid using `get_global_class_native_base`rune-scape
2022-11-27Merge pull request #69194 from raulsntos/dotnet/begone-variant-disposerIgnacio Roldán Etcheverry
C#: Remove VariantSpanDisposer and use constants in stackalloc
2022-11-27C#: Remove VariantSpanDisposer and use constants in stackallocRaul Santos
- Remove `VariantSpanDisposer`, no need to dispose of the Variant Spans since we are now borrowing the Variants instead of copying them. - Remove `VariantSpanExtensions.Cleared` that was only used so the Span was initialized for `VariantSpanDisposer` to know what to dispose. - Fix stackalloc Spans to use constant VarArgsSpanThreshold and avoid bound checks.
2022-11-26Merge pull request #69191 from raulsntos/dotnet/no-throwIgnacio Roldán Etcheverry
Fix `VariantUtils.UnsupportedType` method throwing
2022-11-26Merge pull request #69088 from raulsntos/dotnet/globalIgnacio Roldán Etcheverry
C#: Add `global::` namespace to generated source
2022-11-26Fix `VariantUtils.UnsupportedType` method throwingRaul Santos
This method was not supposed to throw, just return the new constructed exception so it can be thrown by the caller.
2022-11-26C#: Add `global::` namespace to generated sourceRaul Santos
Adds `global::` to the fully qualified types in source generators to prevent ambiguity.
2022-11-25Merge pull request #69079 from adamscott/fix-singleton-scene-cyclic-loadRémi Verschelde
Fix singleton scene cyclic loading
2022-11-25Merge pull request #68310 from neikeq/csharp-opt-variant-generic-convRémi Verschelde
C#: Optimize Variant conversion callbacks
2022-11-25Fix singleton scene cyclic loadingAdam Scott
2022-11-25C#: Cleanup and sync crypto/buffer StringExtensions with coreRaul Santos
- Replaced `MD5Buffer`, `MD5Text`, `SHA256Buffer` and `SHA256Text` implementation to use the `System.Security.Cryptography` classes and avoid marshaling. - Added `SHA1Buffer` and `SHA1Text`. - Renamed `ToUTF8` to `ToUTF8Buffer`. - Renamed `ToAscii` to `ToASCIIBuffer`. - Added `ToUTF16Buffer` and `ToUTF32Buffer`. - Added `GetStringFromUTF16` and `GetStringFromUTF32`.
2022-11-25C#: Cleanup and sync `IsValid*` StringExtensions with coreRaul Santos
- Renamed `IsValidInteger` to `IsValidInt`. - Added `IsValidFileName`. - Added `IsValidHexNumber`. - Added support for IPv6 to `IsValidIPAddress`. - Added `ValidateNodeName`. - Updated the documentation of the `IsValid*` methods.
2022-11-25C#: Cleanup and sync StringExtensions with coreRaul Santos
- Moved `GetBaseName` to keep methods alphabetically sorted. - Removed `Length`, users should just use the Length property. - Removed `Insert`, string already has a method with the same signature that takes precedence. - Removed `Erase`. - Removed `ToLower` and `ToUpper`, string already has methods with the same signature that take precedence. - Removed `FindLast` in favor of `RFind`. - Replaced `RFind` and `RFindN` implemenation with a ca ll to `string.LastIndexOf` to avoid marshaling. - Added `LPad` and `RPad`. - Added `StripEscapes`. - Replaced `LStrip` and `RStrip` implementation with a call to `string.TrimStart` and `string.TrimEnd`. - Added `TrimPrefix` and `TrimSuffix`. - Renamed `OrdAt` to `UnicodeAt`. - Added `CountN` and move the `caseSensitive` parameter of `Count` to the end. - Added `Indent` and `Dedent`.
2022-11-25Merge pull request #69144 from DeeJayLSP/update_embreeRémi Verschelde
Update embree to 3.13.5
2022-11-25Update embree to 3.13.5DeeJayLSP
2022-11-25Merge pull request #69123 from queezle42/queezle42/masterRémi Verschelde
Fix GLAD-related build problems on Linux
2022-11-25Merge pull request #67511 from neikeq/issue-66060Rémi Verschelde
C#: Load assemblies as collectible only in the Godot editor
2022-11-25C#: Optimize Variant conversion callbacksIgnacio Roldán Etcheverry
These callbacks are used for marshaling by callables and generic Godot collections. C# generics don't support specialization the way C++ templates do. I knew NativeAOT could optimize away many type checks when the types are known at compile time, but I didn't trust the JIT would do as good a job, so I initially went with cached function pointers. Well, it turns out the JIT is also very good at optimizing in this scenario, so I'm changing the methods to do the conversion directly, rather than returning a function pointer for the conversion. The methods were moved to `VariantUtils`, and were renamed from `GetFromVariantCallback/GetToVariantCallback` to `ConvertTo/CreateFrom`. The new implementation looks like it goes through many `if` checks at runtime to find the right branch for the type, but in practice it works pretty much like template specialization. The JIT only generates code for the relevant branch. Together with inlining, the result is very close or the same as doing the conversion manually: ```cs godot_variant variant; int foo = variant.Int; int bar = VariantUtils.ConvertTo<int>(variant); ``` If the type is a generic Godot collection, the conversion still goes through a function pointer call. The new code happens to be much shorter as well, with the file going from 1057 lines to 407. Side note: `Variant.cs` was mistakenly created in the wrong folder, so I moved it to the `Core` folder.