stride3d / stride3d/stride

Getting the stride dependencies under control

Open
#1,394 14 comments 18 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement Epic
Dominant language
C#
Stars
7.8k
Forks
1.2k
Avg merge
2d 17h
Merged PRs (30d)
49

Description

Building stride is somewhat a pain in itself. A lot of dependencies are pre-compiled. Others are build-in and hugely outdated. And again others have proper replacements. Sometimes you need to find obscure old natives, and find out how to build those for the particular platform and cpu architecture. It would be nice to get this a bit under control, by moving to nuget based dependencies where possible and ensuring stride itself comes without any native (besides the ones the nuget packages provide).

Benefits i see here:

  • Getting dependencies under control
  • No need to struggle with any msbuild / make / gcc / whatever stuff to get the engine build
  • Allow to build the engine (without gui ofcourse) on non-windows systems
  • Allow to build the whole stack without having visual studio installed
  • Easier upgrading of dependencies and implementation of features
  • Making stride itself pure c#

Stride core natives

libCore (Stride.Core)

This natives basicaly contains two things:

In my eyes this whole native can be replaced by c# stuff?

libStrideAudio (Stride.Audio)

This native basicaly wraps 4 different audio systems:

Technically OpenAL should be one-to-rule-them-all?
Alternatively having XAudio for the Windows world is a nice addition, but this means maintaining two audio systems.
Are Celt and OpenSL ES realy required and do they provide any benefit on supporting even more audio libraries?

libStride (Stride.Native)

This native wraps the following components:

  • XInput. Can be replaced with https://www.nuget.org/packages/Silk.NET.XInput/
  • FastTextRenderer. This one could be ported to c#
  • Lightprobes. This one is complex. Leaving out for the moment, need to check what parts are used.
  • SpriteBatchNative. This one could be ported to c#
  • StrideNative. This one can be replaced with the c# buildin intrinsics

Stride module natives

libStrideNavigation (Stride.Navigation)

This one is basicaly the navmesh builder and pathfinder.
While being dead, someone already started a managed version: https://www.nuget.org/packages/SharpNav/1.0.0-alpha2
But as this is quite complex, ill not go into detail here.

libStrideVR (Stride.VirtualReality)

This native basicaly wrapps VR systems. This is quite specific, but there is also https://www.nuget.org/packages/Silk.NET.OpenXR/
Silks OpenXR namespace contains several bindings to different (and more then stride current has) vr systems.

Dependencies

Basically stuff from the deps/ folder

Other stuff

I would suggest aiming for vulkan-first with Direct3D and OpenGL as fallback backends.
https://www.nuget.org/packages/Silk.NET.Vulkan/
https://www.nuget.org/packages/Silk.NET.Direct3D12/
https://www.nuget.org/packages/Silk.NET.Direct3D11/
https://www.nuget.org/packages/Silk.NET.Direct3D9/
https://www.nuget.org/packages/Silk.NET.OpenGL/

For windowing, currently SDL is used. We could keep that or add in GLFW as alternative:
https://www.nuget.org/packages/Silk.NET.SDL/
https://www.nuget.org/packages/Silk.NET.GLFW/

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by inventorying the deps/ folder and the native modules listed in the issue, including Stride.Core, Stride.Audio, Stride.Native, Stride.Navigation, and Stride.VirtualReality. Trace where each dependency is used before selecting a narrowly scoped migration. Done would require an agreed dependency plan and verified builds across the supported targets.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
build-system, game-dev
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
18/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.