We're excited to announce a new update to the Stride game engine, featuring numerous fixes and improvements across multiple areas. This release includes 55 commits and 244 file changes from 17 contributors since the last version, highlighting the amazing dedication and efforts of our community and contributors.
A huge thank you to all contributors, including the new contributors: @C0dingSteve, @MEEMexe, @ferafiks, @Kreblc3428, @Acissathar and @rmtttt.
Highlights
- Graphics: Vulkan compute shader support by @johang88
- Enabled compute shaders in the Vulkan backend. Shader compiler now generates GLSL compute shaders with compute intrinsics (e.g., gl_GlobalInvocationID, memory barriers), RWTexture/RWBuffer load/store, and std430 for non-constant buffers.
- Added descriptor types:
StorageImage,StorageTexelBuffer,StorageBuffer, with counts capped to device limits; added additional pixel formats.
- UI: Gap support in layout panels by @laske185
- Added gap spacing similar to CSS gap:
- Grid/UniformGrid: ColumnGap, RowGap, LayerGap.
- StackPanel: gap property.
- Added gap spacing similar to CSS gap:
- Graphics: New Mesh read API
- Adds a high-level API to efficiently read vertex and index buffers from meshes, handling varied vertex layouts and data types automatically.
- Improvements to Bepu Physics:
- Constraint impulse/force getters
- Adds the ability to query the impulse and force applied by a given constraint. Enables behaviors like detaching overstressed constraints, tuning strengths dynamically, or driving strain-based audio/FX.
- Raycast against a specific collider
- Which, as its name implies, adds a way to raycast directly against a chosen collidable, ignoring others that may be in the way.
- Contact handling refactor, child index lookup, impact force evaluation
- Easier contact iteration, exposes pre-collision linear/angular velocities, provides an impact force evaluation helper, and reports compound child indices.
- But introduces a breaking change, by replacing
IContactEventHandlerwithIContactHandlerto simplify and future-proof the contact API.
- Constraint impulse/force getters
- Major performance improvements:
- UI performance: Avoid GPU stalls in batching
- Ensures temporary buffers used by UI batching are only released on the next draw instead of directly after use, avoiding stalls caused by writing to those buffers while in flight. Reduces MapSubresource duration by ~98% per call, leading to a reduction of 1.96ms per frame in a UI-heavy scene.
- Engine performance: Revert slow memcpy path
- Restores
MemoryCopybased fast path instead ofUnsafe.CopyBlockUnalignedwhere safe, keeping unaligned copies for platforms that require it. Reducing CPU frame prep time by ~40% in a draw-call heavy scenes.
- Restores
- UI performance: Avoid GPU stalls in batching
What's Changed
💥 Breaking Changes
- fix: Bepu and InputSystem update order by @Eideren in #2848
- fix: Refactor bepu contact management, support compound shape child index lookup and provide Impact Force evaluation to users by @Eideren in #2901
🧠 Core
- feat: Load Services only on first call by @Doprez in #2808
- refactor: Discard internal use of FastList by @Arc-huangjingtong in #2798
🔧 Engineering
- Add 'behavioral-change' label to breaking changes by @VaclavElias in #2870
📦 Assets
- fix: incorrect absolute trigger on FBX model import by @Doprez in #2875
- fix: skinning matrix not getting applied on mesh normals of imported FBX by @rmtttt in #2925
🔨 Build
- feat: Copilot Instructions by @VaclavElias in #2857
- fix: Update .vsconfig by @Doprez in #2874
- ci: .NET 10 - Update GitHub Actions and .NET version in workflows by @VaclavElias in #2894
- Revert "ci: .NET 10 - Update GitHub Actions and .NET version in workflows" by @Eideren in #2911
📄 Docs
- docs: Update xml comments in BodyComponent and IServo by @VaclavElias in #2876
- docs: add laske185 as a contributor for code by @allcontributors[bot] in #2877
- docs: add MikhailArsentevTheSecond as a contributor for code by @allcontributors[bot] in #2878
- docs: add kutal10 as a contributor for code by @allcontributors[bot] in #2880
- feat: Add CONTRIBUTING.md - A "Contributing" tab will surface in the repository overview by @VaclavElias in #2881
🛠️ GameStudio
- fix: Adjust target frameworks to only include available targets when creating new code library by @Acissathar in #2902
- fix: Refactor IDEInfo to make Version optional #2900 by @Jklawreszuk in #2912
- fix: No longer check IsPrimitiveType when nodePresenter.value is null to prevent crash when selecting multiple entities in GameStudio by @Acissathar in #2915
🎨 Graphics
- fix: crash when resizing render window and at the same time creating textures in a background thread by @azeno in #2842
- feat: Added compute shader support for vulkan by @johang88 in #2685
- fix: OpenGL window resizing and GraphicsAdapter.Outputs not being properly populated by @ferafiks in #2845
- perf: soft revert of the performance regressions introduced in #1469 by @Eideren in #2885
- feat: Mesh API for index and vertex buffer reading by @Eideren in #2858
➗ Math
- feat: new LinePlaneIntersection method by @Kreblc3428 in #2873
- fix: Use standard equality comparison for Int2/Int3 by @Eideren in #2934
⚙️ Physics
- feat: Bepu, raycast against collidable by @Eideren in #2861
- chore: Rename _nativeIntertia to _nativeInertia by @C0dingSteve in #2847
- fix: Bepu, normalize default servo settings across servo constraints by @Eideren in #2838
- fix: removed double brackets in error log string by @MEEMexe in #2871
- feat: Bepu, getter to retrieve the impulse and force applied by a given constraint by @Eideren in #2930
📚 Samples
- feat: Update Stride dev version for the game samples by @Jklawreszuk in #2836
- fix: Remove usage of FastList from samples following PR #2798 by @Eideren in #2893
🔄 Serialization
🖥️ UI
- feat: [UI] ToggleButton with mouse over images by @laske185 in #2867
- feat: UI button color by @Eideren in #2815
- feat: [UI] Add gap support to layout panels by @laske185 in #2855
- perf: Improve UI batch performance by @Eideren in #2887
💪 Other Changes
- docs: add hoelzl as a contributor for code by @allcontributors[bot] in #2879
New Contributors
- @C0dingSteve made their first contribution in #2847
- @MEEMexe made their first contribution in #2871
- @ferafiks made their first contribution in #2845
- @Kreblc3428 made their first contribution in #2873
- @Acissathar made their first contribution in #2902
- @rmtttt made their first contribution in #2925
Full Changelog: releases/4.2.1.2442...releases/4.2.1.2485