What's new in this version:
Among its more than 800 new commits, Godot 3.2.2 includes 5 major features:
C# support for the iOS platform:
- Thanks to our Mono/C# maintainer Ignacio (neikeq) and the sponsorship of Microsoft, C# projects can now be exported to iOS. This nearly completes the platform support for C# projects in Godot (only UWP support is still missing).
- iOS export templates are now included in the Mono build. Exporting C# projects to iOS should be done from macOS using the classical workflow, and the scripts will be automatically compiled Ahead-of-Time (AOT) for iOS.
2D batching for the GLES2 renderer:
- While most rendering work was postponed for the 4.0 release with its new Vulkan-based renderer, our contributors lawnjelly and Clay (clayjohn) decided to give some more attention to the 3.2 branch.
- Among a wide array of bug fixes to the GLES2 and GLES3 renderer, they also designed and implemented a 2D batching system for GLES2, which greatly optimizes the 2D rendering performance in many situations. This drastically reduces drawcall-related bottlenecks and can give massive gains in specific scenarios (drawing lots of sprites, big TileMaps, text rendering). It's not magical, and projects have to fulfill some conditions to benefit from it (and actually have a drawcall-related bottleneck). Lawnjelly and Clay are working on some documentation to help you make the best use of the new batching - it will soon be in the main docs, but until then you can refer to the current draft.
Re-architecture of the Android plugin system:
- Godot 3.2 came with a brand new Android plugin system, and notably the possibility to build custom APKs from your project folder with any additional plugins/modules that your project needs.
- Our Android maintainer Fredia (m4gr3d) had done a lot of work back then to improve Juan's initial custom build system, which led him to notice many things that could be modernized to be better suited to the current Android ecosystem. Notably, he re-architectured the plugin system to leverage the Android AAR library file format, and allow the easy distribution and use of Android plugins using a custom .gdap metadata file.
- This new plugin system is backward-incompatible with the 3.2/3.2.1 system, but both systems are kept functional in future releases of the 3.2.x branch. Since we previously did not version our Android plugin systems, this new one is now labelled v1, and is the starting point for the modern Godot Android ecosystem.
- The Android plugin documentation has been updated with instructions on how to write plugins for this new system. Porting existing 3.2 plugins should be fairly straightforward.
- Note: In this process, the GodotPaymentsV3 built-in Android module has been porting to an external, first-party GodotGooglePlayBilling plugin thanks to Timo. See the updated Android in-app purchase docs for a migration guide.
DTLS support and ENet integration:
- Our networking maintainer Fabio has been working for over a year on networking features and the HTML5 platform thanks to an award from Mozilla. Almost all of the networking improvements made their way into Godot 3.2, but DTLS support and its ENet integration came a bit close to the release date and was postponed to 3.2.2.
- This is now included and ready to use! See the dedicated devblog for usage examples.
- Note: We recently found out that Godot's UDPServer (and thus DTLSServer) do not work on Windows. Fabio is working on a fix which should be included in Godot 3.2.3.
Better handling of Variants pointing to released Objects:
- Many Godot users working on bigger projects have run into issues linked to having a Variant pointing to an Object becoming a "dangling pointer" once the Object is released (e.g. with free()). Such pointer could be reported as valid even though the memory it points to was not, or worse, that memory could now hold a different object, leading to hard to debug situations.
- Thanks to the work of Pedro (RandomShaper), debug versions of Godot (e.g. when running in the editor, or exporting a debug build) will properly handle such situations and, when using the debugger, provide a clear error message so that the user code can be adapted to prevent the issue. Checks are currently not done in release builds for performance reasons, so make sure to handle those errors in debug builds before shipping a release build in production.
Updated and localized documentation:
- It's also worth noting that, while it's not included in the 3.2.2 build per se, the online documentation for Godot 3.2 has also seen hundreds of changes since the original 3.2 release, with a lot of new content and many updates to existing tutorials to match the 3.2 feature set.
- Additionally, translators have been hard at work to localize the online documentation, and we now have 100% complete documentation in French, as well as near complete versions in Chinese (Simplified), Japanese, and Spanish. You can join the translation effort on Weblate and help bring high quality localized documentation to game developers all over the world!
- A big thankyou to all the documentation and localization contributors!
- The 3.2.2 release includes more than 800 commits from 140 contributors – thanks a ton to all of them for their work! Contributors fixed a wide range of issues (both new and older ones), as well as improving usability and documentation. Dozens more have been involved in updating translations to make Godot 3.2.2 available in over 20 languages!
- Consult the complete changelog (sorted by authors or by reverse chronological order) for an exhaustive list of all changes.
Here's a hand-picked list of the some of the main changes in Godot 3.2.2:
- 2D: Expose the cell_size affecting VisibilityNotifier2D precision
- 2D: Add MODULATE builtin to canvas item shaders
- Android: Re-architecture of the Godot Android plugin
- Android: Add signal support to Godot Android plugins
- Android: Fix LineEdit virtual keyboard issues
- Android: The GodotPayments plugin was moved to an external first-party plugin using the Google Play Billing library
- AStar: Implements estimate_cost/compute_cost for AStar2D
- AStar: Make get_closest_point() deterministic for equidistant points
- Audio: Fix volume interpolation in positional audio nodes
- C#: Add iOS support
- C#: Sync csproj when files are changed from the FileSystem dock
- C#: Replace uses of old Configuration and update old csprojs
- C#: Allow debugging exported games
- C#: Revert marshalling of IDictionary/IEnumerable implementing types
- C#: Fix inherited scene not inheriting parent's exported properties
- C#: Fix exported values not updated in the remote inspector
- Core: Ensure COWData does not always reallocate on resize
- Core: Fix dangling Variants
- Core: Fixed false positives in the culling system
- Core: Fix leaks and crashes in OAHashMap
- CSG: Various bug fixes
- Debug: Add a suffix to the window title when running from a debug build
- Editor: Add rotation widget to 3D viewport
- Editor: Add editor freelook navigation scheme settings
- Editor: Improved go-to definition (Ctrl + Click) in script editor
- Editor: Account for file deletion and renaming in Export Presets
- Editor: Allow duplicating files when holding Control
- Files: Improve UX of drive letters
- GDNative: Fix Variant size on 32-bit platforms
- GDScript: Fix leaked objects when game ends with yields in progress
- GDScript: Fix object leaks caused by unfulfilled yields
- GDScript: Various bugs fixed in
- GLES2: Add 2D batch rendering across items
- GLES2: Avoid unnecessary material rebind when using skeleton
- GLES3: Add Nvidia draw_rect flickering workaround
- GLES2/GLES3: Add support for OpenGL external textures
- GLES2/GLES3: Reset texture flags after radiance map generation
- HTML5: Implement audio buffer size calculation, should fix iOS Safari audio issues
- HTML5: Switch key detection from keyCode to code
- Image: Fixing wrong blending rect methods
- Image: Fix upscaling image with bilinear interpolation option specified
- Import: Fix changing the import type of multiple files at once (regression fix)
- Import: Respect 'mesh compression' editor import option in Assimp and glTF importers
- Import: Add support for glTF lights
- Input: Various fixes for touch pen input
- Input: Fix joypad GUID conversion to match new SDL format on OSX and Windows
- Input: Add keyboard layout enumeration / set / get functions
- Language Server: Switch the GDScript LSP from WebSocket to TCP, compatible with more external editors
- macOS: Ignore process serial number argument passed by macOS Gatekeeper
- macOS: Enable signing of DMG and ZIP'ed exports
- macOS: Fix exports losing executable permission when unzipped
- Main: Improve the low processor mode sleep precision
- Networking: DTLS support + optional ENet encryption
- Object: Add has_signal method
- Particles: Fix uninitialized memory in CPUParticles and CPUParticles2D
- Physics: Make soft body completely stiff to attachment point
- Physics: Test collision mask before creating constraint pair in Godot physics broadphase 2D and 3D
- Physics: Normalize up direction vector in move_and_slide()
- RegEx: Enable Unicode support for RegEx class
- RichTextLabel: Fix alignment bug with [center] and [right] tags
- RichTextLabel: Add option to fit height to contents
- Shaders: Add shader time scaling
- Skeleton: Fix IK rotation issue
- UWP: Renamed the "Windows Universal" export preset to "UWP", to avoid confusion
- VR: Fix aspect ratio on HMD projection matrix
- Windows: Make stack size on Windows match Linux and macOS
- Windows: Fix certain characters being recognized as special keys when using the US international layout
- Windows: Add tablet driver selection (WinTab, Windows Ink)
- Windows: Fix quoting arguments with special characters in OS.execute()
- Windows: Do not probe joypads if DirectInput cannot be initializer
- Windows: Fix overflow condition with QueryPerformanceCounter
- API documentation updates
- Editor translation updates
- And many more bug fixes and usability enhancements all around the engine
- While we strive to preserve compatibility in the 3.2 branch, there's a lot of surface covered in a game engine and some bug fixes might have an impact on your projects if you somehow used a bug as a feature. Here's a list of known incompatibilities / changes that you might need to be aware of:
- Android: The GodotPaymentsV3 built-in module was removed and replaced by a first-party GodotGooglePlayBilling plugin (see above for details).
- GDNative: The fix for Variant size on 32-bit platforms (GH-38799) might require that you rebuild your GDNative libraries using the latest 3.2 commit from godot_headers.
- GDScript: The Language Server Protocol was switched from WebSocket to TCP, so third-party plugins using it should be updated to use TCP. Contact the plugin developers if this has not been done yet in preparation for Godot 3.2.2.
- GDScript: Shadowing local variables with the iterator of a for loop now raises an error (like it already did for if or while blocks, see GH-39861).
- macOS: A breaking regression was found post-release in the export workflow, which cause macOS ZIP archives to have invalid file permissions, and some unarchiving tools will mess them up. To fix it for now, use unzip on macOS or Linux to extract the ZIP, and then recreate it with your favorite ZIP tool. A fix will be released soon with Godot 3.2.3.
- Sliders: A grabber_area_highlight style was added GH-37517, so projects made before 3.2.2 that use themed sliders may need to define a new style for grabber_area_highlight too to prevent falling back to the default style (see GH-38103).
- Windows: Per-pixel transparency no longer lets mouse events pass-through (GH-39914. This change greatly improves performance and fixes compatibility with other platforms (Linux, macOS).