Ceramic v2.2.0
A lot is landing in this new Ceramic release: a fully reworked cross-backend Dear ImGui integration, audio filters compiled as standalone native worklets with Reflaxe.CPP, concurrent garbage collector on HXCPP, rendering optimised with SIMD, initial CPPIA support, iOS fixes, along with more improvements and fixes.
Changelog
New Features
- Cppia: CPPIA is now supported in Ceramic. Add
--cppiato your native Ceramic build command and it will use it: build the host and the client as needed. Expect some rough edges though, it's bleeding edge and is not yet fully tested, but if you feel adventurous... - ImGui: Complete rework of the Dear ImGui integration. Previous version used an older Dear ImGui version, and it only worked on C++ and Web targets. Now, a new unified Haxe API is compatible with all Ceramic targets, including Unity, using the
dockingbranch of Dear ImGui, and pre-configured to look nicer than the default style! - Audio: Audio filters can now be compiled as standalone C++ worklets running on the audio thread (via a dedicated reflaxe.CPP fork), with proper locking primitives and no GC interaction
- Rendering: SIMD-optimized rendering on native targets, WASM SIMD on the web target and Burst kernel on Unity
- Runtime: New
beginRenderVisualsandendRenderVisualsevents, allowing to draw overlays right before the whole frame is submitted - Runtime: New
ceramic.Renderabletype allowing to create custom visuals that directly talk with the cross-platform graphics backend - Runtime:
Linenow supports round caps and round joins, backed by a more robust clipper2-based implementation - iOS: New
--run-deviceoption to build, deploy and run on a plugged device straight from the CLI - iOS/Android:
settings.orientationnow controls device orientation at runtime - Tools: New toolchain to cross-compile Windows builds from mac and linux
- Electron: Add a way to take screenshots on signal (from code), and an option to hide the window while still rendering it
- Web: New
ceramic_web_update_in_backgrounddefine to keep updating at least every 100ms in background (useful to keep network operations alive) - Runtime/Tools:
Equal.equal()now supports deep array/object equality via an additional argument - Runtime: Add utility macro to help detect infinite loops
Improvements
- Clay: Generational and concurrent GC enabled by default on native targets
- Clay: Desktop GL now requests CORE 3.3+ contexts, and the GLSL version is patched from the actual context version instead of hardcoded defines (also improves Raspberry Pi support)
- Unity: Compatibility with Unity 6.5, including RenderGraph support with unsafe render passes, and a new burst kernel for the renderer to improve performance
- iOS: App code is now packaged as an xcframework with device and arm64 simulator support, and the dead CocoaPods machinery was removed
- Mac: Deployment target moved to macOS 12.0
- Runtime: Window title defaults to the app display name
- Runtime:
msaasetting is clamped to what the device actually supports, when possible - Runtime:
Line/Graphicsclipper2 internals use object pooling, andFloatinstead ofInt64on the js target for better performance - Tools: C++ objects are automatically cleaned when haxe defines change
- Tools: Shaders are no longer transpiled over and over when they did not change (clay and unity)
- Tools:
ceramic plugin listoutput is sorted alphabetically, more robust glob patterns and image processing - Web: Better wasm buffer growing, and more eager focus handling to play better with itch.io and similar embedding contexts
- Android: Http support code is only bound when the
httpplugin is enabled - Loreline: Updated to
v0.10.0 (beat parameters, dynamic beat calls), which now ships its own self-contained interpreter: thehscriptdependency is gone - Updated Haxe to 4.3.7, and refreshed hxcpp, SDL3 and ANGLE
Bug Fixes
- Runtime: Fix
randomElement() - Runtime: Fix
SpinLocknot actually locking, and audio filter params locking - Runtime: Fix handling of closed paths and looping lines in
Graphics - Unity: Fix render passes being culled or reordered by RenderGraph when sampling ceramic render textures through a material
- Headless: Fix audio assets making headless builds fail when only mp3 or flac files are present
- Elements: Cope better with read-only
lockedfield - iOS: Fix wrong build settings in the generated iOS project
New Contributors
Full Changelog: v2.1.0...v2.2.0