summaryrefslogtreecommitdiff
path: root/modules/mono/glue
AgeCommit message (Collapse)Author
2022-08-22C#: Begin move to .NET CoreIgnacio Roldán Etcheverry
We're targeting .NET 5 for now to make development easier while .NET 6 is not yet released. TEMPORARY REGRESSIONS --------------------- Assembly unloading is not implemented yet. As such, many Godot resources are leaked at exit. This will be re-implemented later together with assembly hot-reloading.
2022-08-22C#: Restructure code prior move to .NET CoreIgnacio Roldán Etcheverry
The main focus here was to remove the majority of code that relied on Mono's embedding APIs, specially the reflection APIs. The embedding APIs we still use are the bare minimum we need for things to work. A lot of code was moved to C#. We no longer deal with any managed objects (`MonoObject*`, and such) in native code, and all marshaling is done in C#. The reason for restructuring the code and move away from embedding APIs is that once we move to .NET Core, we will be limited by the much more minimal .NET hosting. PERFORMANCE REGRESSIONS ----------------------- Some parts of the code were written with little to no concern about performance. This includes code that calls into script methods and accesses script fields, properties and events. The reason for this is that all of that will be moved to source generators, so any work prior to that would be a waste of time. DISABLED FEATURES ----------------- Some code was removed as it no longer makes sense (or won't make sense in the future). Other parts were commented out with `#if 0`s and TODO warnings because it doesn't make much sense to work on them yet as those parts will change heavily when we switch to .NET Core but also when we start introducing source generators. As such, the following features were disabled temporarily: - Assembly-reloading (will be done with ALCs in .NET Core). - Properties/fields exports and script method listing (will be handled by source generators in the future). - Exception logging in the editor and stack info for errors. - Exporting games. - Building of C# projects. We no longer copy the Godot API assemblies to the project directory, so MSBuild won't be able to find them. The idea is to turn them into NuGet packages in the future, which could also be obtained from local NuGet sources during development.
2022-08-22C#: Re-write GD and some other icalls as P/InvokeIgnacio Roldán Etcheverry
2022-08-22C#: Re-write Array, Dictionary, NodePath, String icalls as P/InvokeIgnacio Roldán Etcheverry
2022-08-22C#: Remove DynamicGodotObject/Object.DynamicObjectIgnacio Roldán Etcheverry
We are moving in the direction of no dynamic code generation, so this is no longer desired. The feature can still be easily implemented by any project that still want it.
2022-08-22C#: Move marshaling logic and generated glue to C#Ignacio Roldán Etcheverry
We will be progressively moving most code to C#. The plan is to only use Mono's embedding APIs to set things at launch. This will make it much easier to later support CoreCLR too which doesn't have rich embedding APIs. Additionally the code in C# is more maintainable and makes it easier to implement new features, e.g.: runtime codegen which we could use to avoid using reflection for marshaling everytime a field, property or method is accessed. SOME NOTES ON INTEROP We make the same assumptions as GDNative about the size of the Godot structures we use. We take it a bit further by also assuming the layout of fields in some cases, which is riskier but let's us squeeze out some performance by avoiding unnecessary managed to native calls. Code that deals with native structs is less safe than before as there's no RAII and copy constructors in C#. It's like using the GDNative C API directly. One has to take special care to free values they own. Perhaps we could use roslyn analyzers to check this, but I don't know any that uses attributes to determine what's owned or borrowed. As to why we maily use pointers for native structs instead of ref/out: - AFAIK (and confirmed with a benchmark) ref/out are pinned during P/Invoke calls and that has a cost. - Native struct fields can't be ref/out in the first place. - A `using` local can't be passed as ref/out, only `in`. Calling a method or property on an `in` value makes a silent copy, so we want to avoid `in`. REGARDING THE BUILD SYSTEM There's no longer a `mono_glue=yes/no` SCons options. We no longer need to build with `mono_glue=no`, generate the glue and then build again with `mono_glue=yes`. We build only once and generate the glue (which is in C# now). However, SCons no longer builds the C# projects for us. Instead one must run `build_assemblies.py`, e.g.: ```sh %godot_src_root%/modules/mono/build_scripts/build_assemblies.py \ --godot-output-dir=%godot_src_root%/bin \ --godot-target=release_debug` ``` We could turn this into a custom build target, but I don't know how to do that with SCons (it's possible with Meson). OTHER NOTES Most of the moved code doesn't follow the C# naming convention and still has the word Mono in the names despite no longer dealing with Mono's embedding APIs. This is just temporary while transitioning, to make it easier to understand what was moved where.
2022-08-09vector4 distance_squared_to and update csharpantonWetzel
2022-08-07Various fixes to C# documentationRaul Santos
2022-08-03Replace Vector3.ToDiagonalMatrix with Basis.FromScale in C#Aaron Franke
2022-08-02Fix consistency of translated/scaled/rotated in Transform2D and Transform3DFabian Keller
2022-08-01C#: Remove unused `Transform2D.ScaleBasis` methodRaul Santos
2022-08-01 Rename math 'phi' arguments to 'angle' in C#Raul Santos
2022-07-31create vector4, vector4i and projection for csharpantonWetzel
2022-07-31Merge pull request #63656 from raulsntos/fix-signal-bind-csharpRémi Verschelde
2022-07-30Fix TranslatedLocal method in C# affecting the original transformAaron Franke
2022-07-29Fix Callable calls in mono moduleRaul Santos
The `Callable::call` and `Callable::call_deferred` methods have been renamed to `Callable::callp` and `Callable::call_deferredp`.
2022-07-28Merge pull request #63049 from Faless/mp/4.x_as_moduleRémi Verschelde
2022-07-28Merge pull request #57698 from ↵Rémi Verschelde
bluenote10/feature/rename_translated_to_translated_local
2022-07-26[Net] Modularize multiplayer, expose MultiplayerAPI to extensions.Fabio Alessandrelli
- RPC configurations are now dictionaries. - Script.get_rpc_methods renamed to Script.get_rpc_config. - Node.rpc[_id] and Callable.rpc now return an Error. - Refactor MultiplayerAPI to allow extension. - New MultiplayerAPI.rpc method with Array argument (for scripts). - Move the default MultiplayerAPI implementation to a module.
2022-07-25Code quality: Fix header guards consistencyRémi Verschelde
Adds `header_guards.sh` bash script, used in CI to validate future changes. Can be run locally to fix invalid header guards.
2022-07-21Rename `epsilon` to `tolerance` in the `Plane::has_point` methodYuri Rubinsky
2022-07-16rename translate(d) to translate(d)_local in Transform 2D/3DFabian Keller
2022-07-13Fix documentation for C# Vector2/3i classes.Lerg
The / operator was wrongly documented as a multiplication.
2022-07-07Merge pull request #62805 from raulsntos/csharp-rpcRémi Verschelde
2022-07-07C#: New `RPCAttribute`Raul Santos
Replace old RPC attributes with a new single `RPCAttribute` which works like the GDScript `@rpc` annotation.
2022-07-06C#: Add `BezierInterpolate` methodRaul Santos
Adds a `BezierInterpolate` method for floats in `Mathf` and for vectors in `Vector2` and `Vector3`.
2022-07-01implement bone renamer in importerSilc Renew
2022-06-29Adding print_rich for printing with BBCodeVoylin
2022-06-16Fix Lerp documentation and implement RangeLerpPaul Joannon
2022-06-11Added documentation comments to the .NET libraryJoshua Quinones
Comments have been added for the following: modules/mono/glue/GodotSharp/GodotSharp/Core/GodotTaskScheduler.cs modules/mono/glue/GodotSharp/GodotSharp/Core/GodotSynchronizationContext.cs modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/AssemblyHasScriptsAttribute.cs modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/DisableGodotGeneratorsAttribute.cs modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/ExportAttribute.cs modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/GodotMethodAttribute.cs modules/mono/glue/GodotSharp/GodotSharp/Core/Attributes/ScriptPathAttribute.cs
2022-06-03Support explicit values in flag properties, add C# flags supportRaul Santos
- Add support for explicit values in properties using `PROPERTY_HINT_FLAGS` that works the same way it does for enums. - Fix enums and flags in VisualScriptEditor (it wasn't considering the explicit value). - Use `PROPERTY_HINT_FLAGS` for C# enums with the FlagsAttribute instead of `PROPERTY_HINT_ENUM`.
2022-05-16Replace most uses of Map by HashMapreduz
* Map is unnecessary and inefficient in almost every case. * Replaced by the new HashMap. * Renamed Map to RBMap and Set to RBSet for cases that still make sense (order matters) but use is discouraged. There were very few cases where replacing by HashMap was undesired because keeping the key order was intended. I tried to keep those (as RBMap) as much as possible, but might have missed some. Review appreciated!
2022-05-05Core: Rename math 'phi' arguments to 'angle'Rémi Verschelde
2022-05-03Remove `RES` and `REF` typedefs in favor of spelled out `Ref<>`Hugo Locurcio
These typedefs don't save much typing compared to the full `Ref<Resource>` and `Ref<RefCounted>`, yet they sometimes introduce confusion among new contributors.
2022-04-04Zero initialize all pointer class and struct membersRémi Verschelde
This prevents the pitfall of UB when checking if they have been assigned something valid by comparing to nullptr.
2022-03-12Fix Slerp C# docs and add test cases for vectors in the same directionAaron Franke
2022-03-09Remove VARIANT_ARG* macrosreduz
* Very old macros from the time Godot was created. * Limited arguments to 5 (then later changed to 8) in many places. * They were replaced by C++11 Variadic Templates. * Renamed methods that take argument pointers to have a "p" suffix. This was used in some places and not in others, so made it standard. * Also added a dereference check for Variant*. Helped catch a couple of bugs.
2022-03-06Implement `Deconstruct` methods for C# vectorsBerke Kocaoğlu
See https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/functional/deconstruct#user-defined-types
2022-02-12Implement cubic_interpolate() as MathFunc for refactoringSilc 'Tokage' Renew
2022-02-08Merge pull request #57076 from IgorKordiukiewicz/fix-mono-string-capitalizeIgnacio Roldán Etcheverry
String.Capitalize() in C# now matches the behaviour of String::capitalize() in C++
2022-02-07Allow C# Vector2/3 slerp values to have any lengthAndrew Jacob
2022-01-27Rename C# `IsSubsequenceOfI` to `IsSubsequenceOfN`Raul Santos
2022-01-23String.Capitalize() in C# now matches the behaviour of String::capitalize() ↵Igor Kordiukiewicz
in C++
2022-01-12Fix marshaling values of generic Godot DictionaryRaul Santos
2022-01-03Update copyright statements to 2022Rémi Verschelde
Happy new year to the wonderful Godot community!
2022-01-02Fix various typosluz paz
Found via ` codespell -q 3 -S ./thirdparty,*.po,./DONORS.md -L ackward,ang,ans,ba,beng,cas,childs,childrens,dof,doubleclick,expct,fave,findn,gird,hist,inout,leapyear,lod,nd,numer,ois,ony,paket,seeked,sinc,switchs,te,uint,varn` Update editor/import/resource_importer_layered_texture.cpp Co-authored-by: Raul Santos <raulsntos@gmail.com> Update doc/classes/TileSetScenesCollectionSource.xml Co-authored-by: Raul Santos <raulsntos@gmail.com> Update scene/gui/graph_edit.cpp Co-authored-by: Raul Santos <raulsntos@gmail.com> Update scene/resources/animation.cpp Co-authored-by: Raul Santos <raulsntos@gmail.com> Update scene/resources/animation.cpp Co-authored-by: Raul Santos <raulsntos@gmail.com> Update scene/resources/animation.cpp Co-authored-by: Raul Santos <raulsntos@gmail.com> Update scene/gui/rich_text_label.cpp Co-authored-by: Raul Santos <raulsntos@gmail.com> Revert previously committed change
2021-12-23Fix `KeyValuePairAt` memory leakRaul Santos
2021-12-07Various fixes to C# documentationRaul Santos
2021-12-06Rename C# `Quaternion()` -> `GetQuaternion()`Raul Santos
To keep consistency with GDScript, the method `Quaternion()` is renamed `GetQuaternion()`, and made `internal` so it's not exposed to scripting. The documentation references are also fixed. Also, the methods `GetQuaternion()` and `GetRotationQuaternion()` are moved below `GetEuler()` to follow alphabetic order.
2021-12-06Merge pull request #34005 from aaronfranke/minmaxRémi Verschelde