7.3 KiB
Core libraries
The following libraries cover abstractions and base implementations of various low level Stride systems.
Stride.Core.AssemblyProcessor
The assembly processor is a legacy job that runs after any project is built and delivers IL patching for the following:
- Serialization system (migration to roslyn in progress)
- AssemblyScan system - packing selected types into a dictionary for quick access instead of using reflection
- Adding references to the assembly (used only within Stride build - see
Stride.Core.targets - StrideAddReference) - Modyfing static constructor for static instances of
Stride.Rendering.ParameterKey<T>(TODO: why?) - Renaming assembly
- Provind IL intrinsics for things that were not available in previous C# versions (deprecated,
Stride.Core.Interophas been marked obsolete) - Fix for mono for mobile platforms where an incorrect IL operation was performed on pointers (no longer necessary, see issue)
- Modifying assembly version using attribute to include build timestamp
- Generating field/property docs in a simplified format for the editor
- Module initializer generator (no longer necessary, built into .NET)
- Removing locals initialization (no longer necessary, built into .NET)
- Managing custom pooling of delegates for the dispatcher
Most of the AssemblyProcessor is poorly documented and deals with a lot of IL weaving using Mono.Cecil. This makes it hard to debug and modify. AssemblyProcessor should be slowly deprecated in favor of native .NET/Roslyn solutions.
Stride.Core
The assembly that's referenced by all other Stride projects. Contains a lot of base abstractions used in the engine. Also includes transitive build targets that are executed upon build for projects that reference Stride.Core.
- Serialization attributes (e.g.
[DataContract]) - Data annotation attributes
- Strongly typed property collections (see
PropertyKey,PropertyContainer) - A lightweight service registry for pull-based dependency injection (see
IServiceRegistry) ThreadThrottlerfor delaying thread execution in time- Custom ThreadPool and Dispatcher for running short tasks
- Custom hashing mechanism for serialization for object/type identification (see
ObjectId) - AppSettings abstraction (likely to be removed once we get rid of a lot of static stuff - added here)
AssemblyRegistry- system for registering actions that happen upong loading an assembly into the process (e.g. extracting specific types from it that hold an attribute)ObjectFactoryRegistry- factory of objects if they need something else thanActivator.CreateInstance()- Reference counting system (see
IReferencable,ReferenceBase,DisposeBase) - Native code compilation system and
NativeLibraryHelper - Helpers for collections, custom collections, tracking collections
- Custom logging system
- Profiler for measuring engine performance
Serialization
The serialization subsystem is designed for an efficient binary serialization.
DataSerializerand its subclasses define how to serialize a type[DataSerializer]and[DataSerializerGlobal]are used to map a serializer to the object typeMemberSerializeris used for serialization of fields and properties and has a lot of templated logic around detecting the type from an ObjectIdSerializerSelectormanages picking the correct serializer based on serialization profile
Stride.Core.IO
File related abstractions and platform specific nuances.
DirectoryWatcher- a wrapper overSystem.IO.FileSystem.Watcher- Temporty directory/file helper
- Virtual file system
- Based in OS file system (
FileSystemProvider,DriveFileProvider) - Based in Android system (
AndroidAssetProvider,ZipFileSystemProvider) - Virtual directories (App data, temp, etc.)
VirtualFileStream- a multithreaded wrapper over a Stream, used by theVirtualFileSystem
- Based in OS file system (
Stride.Core.Mathematics
Math primitives and vector types. Key note is that the matrix implementation differs from System.Numerics in order to simplify rendering processes.
Stride.Core.MicroThreading
The Stride.Core.MicroThreading namespace provides classes that supports multi-threaded tasks scheduling and execution.
It provides a Scheduler class and the MicroThread object that can encapsulate a task.
Channel<T> provides communication between micro threads.
Stride.Core.Serialization
Extends the serialization system defined in Stride.Core to support cross-object references, streaming and more.
- Chunking content to allow streaming (used in
Stride.Rendering/Stride.Streaming) - Object database used to create content bundles on top of any virtual file system
ObjectDatabaseContentIndexMapmaps unique ids to URLsFileOdbBackendallows accessing files directly where each file is named by the unique idBundleOdbBackendallows encapsulating mappings between files and unique ids into a*.bundlefile- Additional capabilities include bundle dependencies and incremental bundles
- Bundles are compressed using LZ4
DatabaseFileProvider- a virtual file system on top of the object database
- Thread safe
ListStoreandDictionaryStorefor incrementally persisting data onto the hard drive - Serialization of object references by URL/AssetId (
ReferenceSerializer,ContentReferenceDataSerializer) - Runtime reference management (
AttachedReferenceManager) ContentManagerused in the engine to load/unload content - handles deserialization and reference counting
Stride.Core.Reflection
This project contains wrappers on top of System.Reflection that provide additional abstraction (e.g. MemberDesciptor)
or additional shape (e.g. CollectionDescriptor, DictionaryDescriptor).
Stride.Core.Yaml
Fork of https://github.com/xoofx/SharpYaml - a Yet Another Markup Language (YAML) serializer.
Stride.Core.Translation
A simple translation helper which allows getting translated strings from text files using GNU Gettext or from assembly embedded resources (.resx).
Stride.Core.Design
Various subsystems underlying the design time systems.
- Settings - It supports multiple settings profiles, profile inheritance, profile saving and loading, and it is thread-safe. It uses YAML serialization to write settings files.
- Visitor pattern over any serializable data
AsyncLockandAwaitableDisposable(alsoMicroThreadLock)- Serializable file paths
- Transaction system with rollback/rollforward operations
- Type converters (for primitives from
Stride.Core.MathematicsandStride.Core.Serialization) - VisualStudio helpers for managing a project/solution and their properties
- Windows OS specific helpers
- Custom YAML serializers
- Versioning helper (
PackageVersion) - Naming helper around identifiers/namespaces
Stride.Core.Tasks
Helper executable for tasks executed during build.
Copyright (c) .NET Foundation and Contributors (https://dotnetfoundation.org/ & https://stride3d.net) and Silicon Studio Corp. (https://www.siliconstudio.co.jp) All Rights Reserved
Stride Router Server - Version: 4.1.0
Usage: Stride.Core.Tasks.dll command [options]*
=== Commands ===
locate-devenv <MSBuildPath>: returns devenv path
pack-assets <csprojFile> <intermediatePackagePath>: copy and adjust assets for nupkg packaging