Skip to content

FLwolfy/InnoEngine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

241 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

InnoEngine (WIP)

A work-in-progress cross-platform game engine written in C#.


Overview

InnoEngine is a personal learning project focused on building a clean, modular, and practical engine architecture from the ground up. The long-term goal is not just to render things on screen, but to explore how an engine should be structured: runtime, asset pipeline, rendering abstraction, editor tooling, scene/prefab workflow, and cross-platform support. If you think the engine interesting and want to support this repo, please ⭐️ star this project, thank you!

preview.png

This project is still evolving quickly, and many parts are being redesigned as the engine grows. That is:

I am NOT trying to ship a finished engine overnight.
I do NOT guarantee any backward compatibility between versions.


Design goals

A few principles I want to keep pushing toward:

  • modular β€” systems should have clear responsibilities and boundaries
  • practical β€” architecture should support real workflows, not just toy demos
  • inspectable β€” editor and tooling matter as much as runtime code
  • cross-platform β€” no platform should be treated as an afterthought
  • extensible β€” adding new backends, tools, or content types should feel natural
  • clean β€” readable code and maintainable project structure over clever shortcuts

Repository layout

The repository is split into several major areas such as engine/runtime code, editor code, tools, samples, tests, native interop, and documentation. The following is an example of an IDEAL repo structure. This will NOT be exactly the same as the real one.

Inno/
β”œβ”€ global.json
β”œβ”€ Directory.Build.props
β”œβ”€ Directory.Packages.props
β”œβ”€ NuGet.config
β”œβ”€ .editorconfig
β”œβ”€ .gitignore
β”œβ”€ README.md
β”œβ”€ LICENSE
β”‚
β”œβ”€ build/
β”‚  β”œβ”€ Build.cs
β”‚  β”œβ”€ build.ps1
β”‚  β”œβ”€ build.sh
β”‚  β”œβ”€ clean.ps1
β”‚  β”œβ”€ clean.sh
β”‚  β”œβ”€ pack.ps1
β”‚  β”œβ”€ pack.sh
β”‚  └─ targets/
β”‚     β”œβ”€ common.props
β”‚     β”œβ”€ managed.props
β”‚     β”œβ”€ native.props
β”‚     β”œβ”€ tests.props
β”‚     β”œβ”€ editor.props
β”‚     β”œβ”€ packaging.props
β”‚     └─ publish.props
β”‚
β”œβ”€ docs/
β”‚  β”œβ”€ architecture/
β”‚  β”‚  β”œβ”€ overview.md
β”‚  β”‚  β”œβ”€ dependency-rules.md
β”‚  β”‚  β”œβ”€ runtime-loop.md
β”‚  β”‚  β”œβ”€ asset-pipeline.md
β”‚  β”‚  β”œβ”€ graphics-abstraction.md
β”‚  β”‚  β”œβ”€ editor-architecture.md
β”‚  β”‚  β”œβ”€ scene-and-prefab.md
β”‚  β”‚  └─ serialization.md
β”‚  β”œβ”€ guides/
β”‚  β”‚  β”œβ”€ getting-started.md
β”‚  β”‚  β”œβ”€ create-a-game-project.md
β”‚  β”‚  β”œβ”€ build-editor.md
β”‚  β”‚  β”œβ”€ build-runtime.md
β”‚  β”‚  β”œβ”€ add-a-render-backend.md
β”‚  β”‚  β”œβ”€ import-assets.md
β”‚  β”‚  β”œβ”€ packaging-a-game.md
β”‚  β”‚  └─ writing-editor-extensions.md
β”‚  β”œβ”€ api/
β”‚  └─ diagrams/
β”‚
β”œβ”€ extern/
β”‚  β”œβ”€ SDL3/
β”‚  β”‚  β”œβ”€ include/
β”‚  β”‚  β”œβ”€ lib/
β”‚  β”‚  β”œβ”€ runtimes/
β”‚  β”‚  β”œβ”€ tools/
β”‚  β”‚  └─ licenses/
β”‚  β”œβ”€ bgfx/
β”‚  β”‚  β”œβ”€ include/
β”‚  β”‚  β”œβ”€ lib/
β”‚  β”‚  β”œβ”€ tools/
β”‚  β”‚  β”œβ”€ runtimes/
β”‚  β”‚  └─ licenses/
β”‚  β”œβ”€ imgui/
β”‚  β”‚  β”œβ”€ include/
β”‚  β”‚  β”œβ”€ src/
β”‚  β”‚  └─ licenses/
β”‚  β”œβ”€ stb/
β”‚  β”‚  β”œβ”€ include/
β”‚  β”‚  └─ licenses/
β”‚  β”œβ”€ yaml/
β”‚  β”‚  β”œβ”€ include/
β”‚  β”‚  └─ licenses/
β”‚  └─ other/
β”‚
β”œβ”€ native/
β”‚  β”œβ”€ Inno.Native.Common/
β”‚  β”‚  β”œβ”€ include/
β”‚  β”‚  β”‚  β”œβ”€ inno_common.h
β”‚  β”‚  β”‚  β”œβ”€ inno_export.h
β”‚  β”‚  β”‚  └─ inno_platform.h
β”‚  β”‚  β”œβ”€ src/
β”‚  β”‚  β”‚  β”œβ”€ inno_common.cpp
β”‚  β”‚  β”‚  └─ inno_platform.cpp
β”‚  β”‚  β”œβ”€ CMakeLists.txt
β”‚  β”‚  └─ README.md
β”‚  β”‚
β”‚  β”œβ”€ Inno.Native.Windowing/
β”‚  β”‚  β”œβ”€ include/
β”‚  β”‚  β”‚  β”œβ”€ inno_windowing.h
β”‚  β”‚  β”‚  β”œβ”€ inno_input.h
β”‚  β”‚  β”‚  └─ inno_clipboard.h
β”‚  β”‚  β”œβ”€ src/
β”‚  β”‚  β”‚  β”œβ”€ inno_windowing.cpp
β”‚  β”‚  β”‚  β”œβ”€ inno_input.cpp
β”‚  β”‚  β”‚  └─ inno_clipboard.cpp
β”‚  β”‚  β”œβ”€ CMakeLists.txt
β”‚  β”‚  └─ README.md
β”‚  β”‚
β”‚  β”œβ”€ Inno.Native.Graphics/
β”‚  β”‚  β”œβ”€ include/
β”‚  β”‚  β”‚  β”œβ”€ inno_graphics.h
β”‚  β”‚  β”‚  β”œβ”€ inno_graphics_device.h
β”‚  β”‚  β”‚  β”œβ”€ inno_graphics_buffer.h
β”‚  β”‚  β”‚  β”œβ”€ inno_graphics_texture.h
β”‚  β”‚  β”‚  β”œβ”€ inno_graphics_shader.h
β”‚  β”‚  β”‚  └─ inno_graphics_swapchain.h
β”‚  β”‚  β”œβ”€ src/
β”‚  β”‚  β”‚  β”œβ”€ inno_graphics.cpp
β”‚  β”‚  β”‚  β”œβ”€ inno_graphics_device.cpp
β”‚  β”‚  β”‚  β”œβ”€ inno_graphics_buffer.cpp
β”‚  β”‚  β”‚  β”œβ”€ inno_graphics_texture.cpp
β”‚  β”‚  β”‚  β”œβ”€ inno_graphics_shader.cpp
β”‚  β”‚  β”‚  └─ inno_graphics_swapchain.cpp
β”‚  β”‚  β”œβ”€ CMakeLists.txt
β”‚  β”‚  └─ README.md
β”‚  β”‚
β”‚  β”œβ”€ Inno.Native.Editor/
β”‚  β”‚  β”œβ”€ include/
β”‚  β”‚  β”‚  β”œβ”€ inno_imgui_bridge.h
β”‚  β”‚  β”‚  └─ inno_editor_bridge.h
β”‚  β”‚  β”œβ”€ src/
β”‚  β”‚  β”‚  β”œβ”€ inno_imgui_bridge.cpp
β”‚  β”‚  β”‚  └─ inno_editor_bridge.cpp
β”‚  β”‚  β”œβ”€ CMakeLists.txt
β”‚  β”‚  └─ README.md
β”‚  β”‚
β”‚  └─ Inno.Native.Generated/
β”‚     β”œβ”€ headers/
β”‚     β”œβ”€ bindings/
β”‚     └─ scripts/
β”‚
β”œβ”€ tools/
β”‚  β”œβ”€ Inno.Tools.Build/
β”‚  β”‚  β”œβ”€ Inno.Tools.Build.csproj
β”‚  β”‚  β”œβ”€ Program.cs
β”‚  β”‚  β”œβ”€ Commands/
β”‚  β”‚  └─ Services/
β”‚  β”‚
β”‚  β”œβ”€ Inno.Tools.ShaderCompiler/
β”‚  β”‚  β”œβ”€ Inno.Tools.ShaderCompiler.csproj
β”‚  β”‚  β”œβ”€ Program.cs
β”‚  β”‚  β”œβ”€ Compiler/
β”‚  β”‚  β”œβ”€ Reflection/
β”‚  β”‚  └─ Profiles/
β”‚  β”‚
β”‚  β”œβ”€ Inno.Tools.AssetImporter/
β”‚  β”‚  β”œβ”€ Inno.Tools.AssetImporter.csproj
β”‚  β”‚  β”œβ”€ Program.cs
β”‚  β”‚  β”œβ”€ Importers/
β”‚  β”‚  β”œβ”€ Pipeline/
β”‚  β”‚  └─ Metadata/
β”‚  β”‚
β”‚  β”œβ”€ Inno.Tools.ProjectGen/
β”‚  β”‚  β”œβ”€ Inno.Tools.ProjectGen.csproj
β”‚  β”‚  β”œβ”€ Program.cs
β”‚  β”‚  β”œβ”€ Templates/
β”‚  β”‚  └─ Commands/
β”‚  β”‚
β”‚  β”œβ”€ Inno.Tools.HeaderGen/
β”‚  β”‚  β”œβ”€ Inno.Tools.HeaderGen.csproj
β”‚  β”‚  β”œβ”€ Program.cs
β”‚  β”‚  β”œβ”€ Parsing/
β”‚  β”‚  └─ Emitters/
β”‚  β”‚
β”‚  └─ Inno.Tools.Packager/
β”‚     β”œβ”€ Inno.Tools.Packager.csproj
β”‚     β”œβ”€ Program.cs
β”‚     β”œβ”€ Packaging/
β”‚     β”œβ”€ Manifests/
β”‚     └─ Commands/
β”‚
β”œβ”€ templates/
β”‚  β”œβ”€ project/
β”‚  β”‚  β”œβ”€ Inno.Game.Template/
β”‚  β”‚  β”‚  β”œβ”€ Game/
β”‚  β”‚  β”‚  β”œβ”€ Game.Content/
β”‚  β”‚  β”‚  β”œβ”€ Game.Editor/
β”‚  β”‚  β”‚  β”œβ”€ Assets/
β”‚  β”‚  β”‚  └─ Config/
β”‚  β”‚  └─ Inno.Plugin.Template/
β”‚  β”‚     β”œβ”€ Plugin/
β”‚  β”‚     └─ Plugin.Editor/
β”‚  β”œβ”€ assets/
β”‚  β”‚  β”œβ”€ default-materials/
β”‚  β”‚  β”œβ”€ default-shaders/
β”‚  β”‚  β”œβ”€ icons/
β”‚  β”‚  └─ fonts/
β”‚  └─ scripts/
β”‚
β”œβ”€ src/
β”‚  β”œβ”€ Core/
β”‚  β”‚  β”œβ”€ Inno.Core/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Core.csproj
β”‚  β”‚  β”‚  β”œβ”€ GlobalUsings.cs
β”‚  β”‚  β”‚  β”œβ”€ Diagnostics/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ Guard.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ ThrowHelper.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ Assertion.cs
β”‚  β”‚  β”‚  β”‚  └─ DiagnosticsScope.cs
β”‚  β”‚  β”‚  β”œβ”€ Exceptions/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ InnoException.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ AssetException.cs
β”‚  β”‚  β”‚  β”‚  └─ GraphicsException.cs
β”‚  β”‚  β”‚  β”œβ”€ Interfaces/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IInitializable.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IDisposableEx.cs
β”‚  β”‚  β”‚  β”‚  └─ IDeepCloneable.cs
β”‚  β”‚  β”‚  β”œβ”€ Results/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ Result.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ ResultT.cs
β”‚  β”‚  β”‚  β”‚  └─ ErrorInfo.cs
β”‚  β”‚  β”‚  β”œβ”€ Utilities/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ HashUtility.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ EnumUtility.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ StringUtility.cs
β”‚  β”‚  β”‚  β”‚  └─ PathUtility.cs
β”‚  β”‚  β”‚  └─ Internals/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Core.Logging/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Core.Logging.csproj
β”‚  β”‚  β”‚  β”œβ”€ Abstractions/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ ILogger.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ ILoggerFactory.cs
β”‚  β”‚  β”‚  β”‚  └─ LogLevel.cs
β”‚  β”‚  β”‚  β”œβ”€ Default/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ ConsoleLogger.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ FileLogger.cs
β”‚  β”‚  β”‚  β”‚  └─ CompositeLogger.cs
β”‚  β”‚  β”‚  β”œβ”€ Formatting/
β”‚  β”‚  β”‚  └─ Sinks/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Core.Collections/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Core.Collections.csproj
β”‚  β”‚  β”‚  β”œβ”€ Pools/
β”‚  β”‚  β”‚  β”œβ”€ SparseSets/
β”‚  β”‚  β”‚  β”œβ”€ NativeLike/
β”‚  β”‚  β”‚  └─ Utilities/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Core.Math/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Core.Math.csproj
β”‚  β”‚  β”‚  β”œβ”€ Scalars/
β”‚  β”‚  β”‚  β”œβ”€ Vectors/
β”‚  β”‚  β”‚  β”œβ”€ Matrices/
β”‚  β”‚  β”‚  β”œβ”€ Geometry/
β”‚  β”‚  β”‚  β”œβ”€ Colors/
β”‚  β”‚  β”‚  └─ Transforms/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Core.Memory/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Core.Memory.csproj
β”‚  β”‚  β”‚  β”œβ”€ Buffers/
β”‚  β”‚  β”‚  β”œβ”€ Allocators/
β”‚  β”‚  β”‚  β”œβ”€ Handles/
β”‚  β”‚  β”‚  └─ Unsafe/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Core.IO/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Core.IO.csproj
β”‚  β”‚  β”‚  β”œβ”€ Paths/
β”‚  β”‚  β”‚  β”œβ”€ Streams/
β”‚  β”‚  β”‚  β”œβ”€ FileSystem/
β”‚  β”‚  β”‚  └─ Watchers/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Core.Serialization/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Core.Serialization.csproj
β”‚  β”‚  β”‚  β”œβ”€ Abstractions/
β”‚  β”‚  β”‚  β”œβ”€ Binary/
β”‚  β”‚  β”‚  β”œβ”€ Yaml/
β”‚  β”‚  β”‚  β”œβ”€ Json/
β”‚  β”‚  β”‚  β”œβ”€ Codecs/
β”‚  β”‚  β”‚  └─ Metadata/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Core.Reflection/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Core.Reflection.csproj
β”‚  β”‚  β”‚  β”œβ”€ Types/
β”‚  β”‚  β”‚  β”œβ”€ Attributes/
β”‚  β”‚  β”‚  β”œβ”€ Accessors/
β”‚  β”‚  β”‚  β”œβ”€ Metadata/
β”‚  β”‚  β”‚  └─ Caching/
β”‚  β”‚  β”‚
β”‚  β”‚  └─ Inno.Core.Threading/
β”‚  β”‚     β”œβ”€ Inno.Core.Threading.csproj
β”‚  β”‚     β”œβ”€ Jobs/
β”‚  β”‚     β”œβ”€ Scheduling/
β”‚  β”‚     β”œβ”€ Synchronization/
β”‚  β”‚     └─ Collections/
β”‚  β”‚
β”‚  β”œβ”€ Platform/
β”‚  β”‚  β”œβ”€ Inno.Platform/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Platform.csproj
β”‚  β”‚  β”‚  β”œβ”€ Abstractions/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IPlatform.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IApplicationPlatform.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IWindowPlatform.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IInputPlatform.cs
β”‚  β”‚  β”‚  β”‚  └─ IClipboardPlatform.cs
β”‚  β”‚  β”‚  β”œβ”€ Application/
β”‚  β”‚  β”‚  β”œβ”€ Windowing/
β”‚  β”‚  β”‚  β”œβ”€ Input/
β”‚  β”‚  β”‚  β”œβ”€ Timing/
β”‚  β”‚  β”‚  β”œβ”€ Clipboard/
β”‚  β”‚  β”‚  β”œβ”€ Monitors/
β”‚  β”‚  β”‚  └─ FileDialogs/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Platform.Interop/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Platform.Interop.csproj
β”‚  β”‚  β”‚  β”œβ”€ Native/
β”‚  β”‚  β”‚  β”œβ”€ Marshalling/
β”‚  β”‚  β”‚  β”œβ”€ Handles/
β”‚  β”‚  β”‚  └─ Generated/
β”‚  β”‚  β”‚
β”‚  β”‚  └─ Inno.Platform.SDL3/
β”‚  β”‚     β”œβ”€ Inno.Platform.SDL3.csproj
β”‚  β”‚     β”œβ”€ Application/
β”‚  β”‚     β”œβ”€ Windowing/
β”‚  β”‚     β”œβ”€ Input/
β”‚  β”‚     β”œβ”€ Clipboard/
β”‚  β”‚     └─ Internal/
β”‚  β”‚
β”‚  β”œβ”€ Graphics/
β”‚  β”‚  β”œβ”€ Inno.Graphics/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Graphics.csproj
β”‚  β”‚  β”‚  β”œβ”€ Abstractions/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IGraphicsDevice.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IGraphicsAdapter.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IGraphicsContext.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ ISwapchain.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IBuffer.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ ITexture.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ ISampler.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IShader.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IPipeline.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IRenderPass.cs
β”‚  β”‚  β”‚  β”‚  └─ ICommandList.cs
β”‚  β”‚  β”‚  β”œβ”€ Descriptors/
β”‚  β”‚  β”‚  β”œβ”€ Resources/
β”‚  β”‚  β”‚  β”œβ”€ Pipeline/
β”‚  β”‚  β”‚  β”œβ”€ Commands/
β”‚  β”‚  β”‚  β”œβ”€ Shaders/
β”‚  β”‚  β”‚  β”œβ”€ Formats/
β”‚  β”‚  β”‚  └─ Utilities/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Graphics.Shaders/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Graphics.Shaders.csproj
β”‚  β”‚  β”‚  β”œβ”€ Source/
β”‚  β”‚  β”‚  β”œβ”€ Reflection/
β”‚  β”‚  β”‚  β”œβ”€ Variants/
β”‚  β”‚  β”‚  └─ Metadata/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Graphics.Interop/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Graphics.Interop.csproj
β”‚  β”‚  β”‚  β”œβ”€ Native/
β”‚  β”‚  β”‚  β”œβ”€ Marshalling/
β”‚  β”‚  β”‚  β”œβ”€ Handles/
β”‚  β”‚  β”‚  └─ Generated/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Graphics.Bgfx/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Graphics.Bgfx.csproj
β”‚  β”‚  β”‚  β”œβ”€ Device/
β”‚  β”‚  β”‚  β”œβ”€ Resources/
β”‚  β”‚  β”‚  β”œβ”€ Pipeline/
β”‚  β”‚  β”‚  β”œβ”€ Commands/
β”‚  β”‚  β”‚  β”œβ”€ Swapchain/
β”‚  β”‚  β”‚  β”œβ”€ Shaders/
β”‚  β”‚  β”‚  β”œβ”€ Capabilities/
β”‚  β”‚  β”‚  └─ Internal/
β”‚  β”‚  β”‚
β”‚  β”‚  └─ Inno.Graphics.Null/
β”‚  β”‚     β”œβ”€ Inno.Graphics.Null.csproj
β”‚  β”‚     β”œβ”€ Device/
β”‚  β”‚     β”œβ”€ Resources/
β”‚  β”‚     β”œβ”€ Commands/
β”‚  β”‚     └─ Internal/
β”‚  β”‚
β”‚  β”œβ”€ Assets/
β”‚  β”‚  β”œβ”€ Inno.Assets/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Assets.csproj
β”‚  β”‚  β”‚  β”œβ”€ Database/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ AssetDatabase.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ AssetRegistry.cs
β”‚  β”‚  β”‚  β”‚  └─ AssetLookup.cs
β”‚  β”‚  β”‚  β”œβ”€ Files/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ AssetFileSystem.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ AssetPath.cs
β”‚  β”‚  β”‚  β”‚  └─ AssetWatcher.cs
β”‚  β”‚  β”‚  β”œβ”€ Metadata/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ AssetMeta.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ AssetGuid.cs
β”‚  β”‚  β”‚  β”‚  └─ ImportSettings.cs
β”‚  β”‚  β”‚  β”œβ”€ Handles/
β”‚  β”‚  β”‚  β”œβ”€ Importing/
β”‚  β”‚  β”‚  β”œβ”€ Artifacts/
β”‚  β”‚  β”‚  β”œβ”€ Dependencies/
β”‚  β”‚  β”‚  └─ Runtime/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Assets.Importers/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Assets.Importers.csproj
β”‚  β”‚  β”‚  β”œβ”€ Textures/
β”‚  β”‚  β”‚  β”œβ”€ Meshes/
β”‚  β”‚  β”‚  β”œβ”€ Materials/
β”‚  β”‚  β”‚  β”œβ”€ Scenes/
β”‚  β”‚  β”‚  β”œβ”€ Shaders/
β”‚  β”‚  β”‚  └─ Audio/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Assets.Pipeline/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Assets.Pipeline.csproj
β”‚  β”‚  β”‚  β”œβ”€ Pipeline/
β”‚  β”‚  β”‚  β”œβ”€ Builders/
β”‚  β”‚  β”‚  β”œβ”€ Caching/
β”‚  β”‚  β”‚  β”œβ”€ Hashing/
β”‚  β”‚  β”‚  └─ Tasks/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Assets.Serialization/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Assets.Serialization.csproj
β”‚  β”‚  β”‚  β”œβ”€ Metadata/
β”‚  β”‚  β”‚  β”œβ”€ Binary/
β”‚  β”‚  β”‚  β”œβ”€ Yaml/
β”‚  β”‚  β”‚  └─ State/
β”‚  β”‚  β”‚
β”‚  β”‚  └─ Inno.Assets.Runtime/
β”‚  β”‚     β”œβ”€ Inno.Assets.Runtime.csproj
β”‚  β”‚     β”œβ”€ Loading/
β”‚  β”‚     β”œβ”€ Residency/
β”‚  β”‚     β”œβ”€ GpuUpload/
β”‚  β”‚     └─ Caches/
β”‚  β”‚
β”‚  β”œβ”€ Content/
β”‚  β”‚  β”œβ”€ Inno.Content/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Content.csproj
β”‚  β”‚  β”‚  β”œβ”€ Common/
β”‚  β”‚  β”‚  β”œβ”€ Identifiers/
β”‚  β”‚  β”‚  β”œβ”€ Assets/
β”‚  β”‚  β”‚  └─ References/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Content.Textures/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Content.Textures.csproj
β”‚  β”‚  β”‚  β”œβ”€ Assets/
β”‚  β”‚  β”‚  β”œβ”€ Runtime/
β”‚  β”‚  β”‚  └─ Serialization/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Content.Meshes/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Content.Meshes.csproj
β”‚  β”‚  β”‚  β”œβ”€ Assets/
β”‚  β”‚  β”‚  β”œβ”€ Runtime/
β”‚  β”‚  β”‚  └─ Serialization/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Content.Materials/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Content.Materials.csproj
β”‚  β”‚  β”‚  β”œβ”€ Assets/
β”‚  β”‚  β”‚  β”œβ”€ Graph/
β”‚  β”‚  β”‚  β”œβ”€ Runtime/
β”‚  β”‚  β”‚  └─ Serialization/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Content.Shaders/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Content.Shaders.csproj
β”‚  β”‚  β”‚  β”œβ”€ Assets/
β”‚  β”‚  β”‚  β”œβ”€ Variants/
β”‚  β”‚  β”‚  β”œβ”€ Reflection/
β”‚  β”‚  β”‚  └─ Serialization/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Content.Audio/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Content.Audio.csproj
β”‚  β”‚  β”‚  β”œβ”€ Assets/
β”‚  β”‚  β”‚  β”œβ”€ Runtime/
β”‚  β”‚  β”‚  └─ Serialization/
β”‚  β”‚  β”‚
β”‚  β”‚  └─ Inno.Content.Scenes/
β”‚  β”‚     β”œβ”€ Inno.Content.Scenes.csproj
β”‚  β”‚     β”œβ”€ Assets/
β”‚  β”‚     β”œβ”€ Runtime/
β”‚  β”‚     └─ Serialization/
β”‚  β”‚
β”‚  β”œβ”€ ECS/
β”‚  β”‚  β”œβ”€ Inno.ECS/
β”‚  β”‚  β”‚  β”œβ”€ Inno.ECS.csproj
β”‚  β”‚  β”‚  β”œβ”€ Entities/
β”‚  β”‚  β”‚  β”œβ”€ Components/
β”‚  β”‚  β”‚  β”œβ”€ Queries/
β”‚  β”‚  β”‚  β”œβ”€ Storage/
β”‚  β”‚  β”‚  β”œβ”€ World/
β”‚  β”‚  β”‚  └─ Utilities/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.ECS.Systems/
β”‚  β”‚  β”‚  β”œβ”€ Inno.ECS.Systems.csproj
β”‚  β”‚  β”‚  β”œβ”€ Abstractions/
β”‚  β”‚  β”‚  β”œβ”€ Scheduling/
β”‚  β”‚  β”‚  β”œβ”€ Phases/
β”‚  β”‚  β”‚  └─ Execution/
β”‚  β”‚  β”‚
β”‚  β”‚  └─ Inno.ECS.Transforms/
β”‚  β”‚     β”œβ”€ Inno.ECS.Transforms.csproj
β”‚  β”‚     β”œβ”€ Components/
β”‚  β”‚     β”œβ”€ Systems/
β”‚  β”‚     └─ Utilities/
β”‚  β”‚
β”‚  β”œβ”€ Scene/
β”‚  β”‚  β”œβ”€ Inno.Scene/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Scene.csproj
β”‚  β”‚  β”‚  β”œβ”€ Nodes/
β”‚  β”‚  β”‚  β”œβ”€ Hierarchy/
β”‚  β”‚  β”‚  β”œβ”€ Prefabs/
β”‚  β”‚  β”‚  β”œβ”€ Templates/
β”‚  β”‚  β”‚  └─ Runtime/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Scene.Serialization/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Scene.Serialization.csproj
β”‚  β”‚  β”‚  β”œβ”€ SceneFiles/
β”‚  β”‚  β”‚  β”œβ”€ PrefabFiles/
β”‚  β”‚  β”‚  β”œβ”€ Codecs/
β”‚  β”‚  β”‚  └─ State/
β”‚  β”‚  β”‚
β”‚  β”‚  └─ Inno.Scene.Authoring/
β”‚  β”‚     β”œβ”€ Inno.Scene.Authoring.csproj
β”‚  β”‚     β”œβ”€ Builders/
β”‚  β”‚     β”œβ”€ Authoring/
β”‚  β”‚     └─ Validation/
β”‚  β”‚
β”‚  β”œβ”€ Rendering/
β”‚  β”‚  β”œβ”€ Inno.Rendering/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Rendering.csproj
β”‚  β”‚  β”‚  β”œβ”€ Cameras/
β”‚  β”‚  β”‚  β”œβ”€ Visibility/
β”‚  β”‚  β”‚  β”œβ”€ Lighting/
β”‚  β”‚  β”‚  β”œβ”€ Materials/
β”‚  β”‚  β”‚  β”œβ”€ Meshes/
β”‚  β”‚  β”‚  β”œβ”€ Queues/
β”‚  β”‚  β”‚  β”œβ”€ Draw/
β”‚  β”‚  β”‚  └─ Runtime/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Rendering.RenderGraph/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Rendering.RenderGraph.csproj
β”‚  β”‚  β”‚  β”œβ”€ Graph/
β”‚  β”‚  β”‚  β”œβ”€ Resources/
β”‚  β”‚  β”‚  β”œβ”€ Compilation/
β”‚  β”‚  β”‚  └─ Execution/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Rendering.Passes/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Rendering.Passes.csproj
β”‚  β”‚  β”‚  β”œβ”€ Shadow/
β”‚  β”‚  β”‚  β”œβ”€ Opaque/
β”‚  β”‚  β”‚  β”œβ”€ Transparent/
β”‚  β”‚  β”‚  β”œβ”€ Gizmo/
β”‚  β”‚  β”‚  β”œβ”€ PostProcess/
β”‚  β”‚  β”‚  └─ Debug/
β”‚  β”‚  β”‚
β”‚  β”‚  └─ Inno.Rendering.DebugDraw/
β”‚  β”‚     β”œβ”€ Inno.Rendering.DebugDraw.csproj
β”‚  β”‚     β”œβ”€ Lines/
β”‚  β”‚     β”œβ”€ Shapes/
β”‚  β”‚     └─ Overlay/
β”‚  β”‚
β”‚  β”œβ”€ Engine/
β”‚  β”‚  β”œβ”€ Inno.Engine/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Engine.csproj
β”‚  β”‚  β”‚  β”œβ”€ Host/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ EngineHost.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ EngineBuilder.cs
β”‚  β”‚  β”‚  β”‚  └─ EngineConfiguration.cs
β”‚  β”‚  β”‚  β”œβ”€ Loop/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ EngineLoop.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ FrameScheduler.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ EnginePhases.cs
β”‚  β”‚  β”‚  β”‚  └─ GameTime.cs
β”‚  β”‚  β”‚  β”œβ”€ Services/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ ServiceRegistry.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ EngineServices.cs
β”‚  β”‚  β”‚  β”‚  └─ Lifetime.cs
β”‚  β”‚  β”‚  β”œβ”€ Bootstrap/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ EngineBootstrap.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ DefaultModules.cs
β”‚  β”‚  β”‚  β”‚  └─ ModuleRegistration.cs
β”‚  β”‚  β”‚  β”œβ”€ Game/
β”‚  β”‚  β”‚  β”‚  β”œβ”€ IGame.cs
β”‚  β”‚  β”‚  β”‚  β”œβ”€ GameBase.cs
β”‚  β”‚  β”‚  β”‚  └─ GameStartup.cs
β”‚  β”‚  β”‚  └─ Runtime/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Engine.GameFramework/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Engine.GameFramework.csproj
β”‚  β”‚  β”‚  β”œβ”€ Components/
β”‚  β”‚  β”‚  β”œβ”€ Gameplay/
β”‚  β”‚  β”‚  β”œβ”€ Animation/
β”‚  β”‚  β”‚  β”œβ”€ UI/
β”‚  β”‚  β”‚  └─ Common/
β”‚  β”‚  β”‚
β”‚  β”‚  └─ Inno.Engine.Scripting/
β”‚  β”‚     β”œβ”€ Inno.Engine.Scripting.csproj
β”‚  β”‚     β”œβ”€ Runtime/
β”‚  β”‚     β”œβ”€ Host/
β”‚  β”‚     └─ Binding/
β”‚  β”‚
β”‚  β”œβ”€ Editor/
β”‚  β”‚  β”œβ”€ Inno.Editor.Framework/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Editor.Framework.csproj
β”‚  β”‚  β”‚  β”œβ”€ Docking/
β”‚  β”‚  β”‚  β”œβ”€ Panels/
β”‚  β”‚  β”‚  β”œβ”€ Commands/
β”‚  β”‚  β”‚  β”œβ”€ UndoRedo/
β”‚  β”‚  β”‚  β”œβ”€ Selection/
β”‚  β”‚  β”‚  β”œβ”€ Inspectors/
β”‚  β”‚  β”‚  β”œβ”€ Services/
β”‚  β”‚  β”‚  β”œβ”€ Menus/
β”‚  β”‚  β”‚  └─ Theming/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Editor/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Editor.csproj
β”‚  β”‚  β”‚  β”œβ”€ App/
β”‚  β”‚  β”‚  β”œβ”€ Workspace/
β”‚  β”‚  β”‚  β”œβ”€ Panels/
β”‚  β”‚  β”‚  β”œβ”€ SceneView/
β”‚  β”‚  β”‚  β”œβ”€ AssetBrowser/
β”‚  β”‚  β”‚  β”œβ”€ Hierarchy/
β”‚  β”‚  β”‚  β”œβ”€ Inspector/
β”‚  β”‚  β”‚  β”œβ”€ Console/
β”‚  β”‚  β”‚  β”œβ”€ GameView/
β”‚  β”‚  β”‚  β”œβ”€ Gizmos/
β”‚  β”‚  β”‚  β”œβ”€ ProjectSystem/
β”‚  β”‚  β”‚  └─ PlayMode/
β”‚  β”‚  β”‚
β”‚  β”‚  β”œβ”€ Inno.Editor.ImGui/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Editor.ImGui.csproj
β”‚  β”‚  β”‚  β”œβ”€ Backend/
β”‚  β”‚  β”‚  β”œβ”€ Input/
β”‚  β”‚  β”‚  β”œβ”€ Rendering/
β”‚  β”‚  β”‚  └─ Widgets/
β”‚  β”‚  β”‚
β”‚  β”‚  └─ Inno.Editor.Content/
β”‚  β”‚     β”œβ”€ Inno.Editor.Content.csproj
β”‚  β”‚     β”œβ”€ Icons/
β”‚  β”‚     β”œβ”€ Fonts/
β”‚  β”‚     β”œβ”€ Themes/
β”‚  β”‚     └─ BuiltinAssets/
β”‚  β”‚
β”‚  └─ Launcher/
β”‚     β”œβ”€ Inno.Launcher/
β”‚     β”‚  β”œβ”€ Inno.Launcher.csproj
β”‚     β”‚  β”œβ”€ Program.cs
β”‚     β”‚  β”œβ”€ EditorHost/
β”‚     β”‚  β”œβ”€ GameHost/
β”‚     β”‚  β”œβ”€ Shared/
β”‚     β”‚  └─ Bootstrap/
β”‚     β”‚
β”‚     β”œβ”€ Inno.Launcher.Editor/
β”‚     β”‚  β”œβ”€ Inno.Launcher.Editor.csproj
β”‚     β”‚  β”œβ”€ Program.cs
β”‚     β”‚  └─ Bootstrap/
β”‚     β”‚
β”‚     └─ Inno.Launcher.Game/
β”‚        β”œβ”€ Inno.Launcher.Game.csproj
β”‚        β”œβ”€ Program.cs
β”‚        └─ Bootstrap/
β”‚
β”œβ”€ tests/
β”‚  β”œβ”€ Core/
β”‚  β”‚  β”œβ”€ Inno.Core.Tests/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Core.Tests.csproj
β”‚  β”‚  β”‚  β”œβ”€ Diagnostics/
β”‚  β”‚  β”‚  β”œβ”€ Results/
β”‚  β”‚  β”‚  └─ Utilities/
β”‚  β”‚  β”œβ”€ Inno.Core.Math.Tests/
β”‚  β”‚  β”‚  β”œβ”€ Inno.Core.Math.Tests.csproj
β”‚  β”‚  β”‚  β”œβ”€ Vectors/
β”‚  β”‚  β”‚  β”œβ”€ Matrices/
β”‚  β”‚  β”‚  └─ Geometry/
β”‚  β”‚  └─ Inno.Core.Serialization.Tests/
β”‚  β”‚     β”œβ”€ Inno.Core.Serialization.Tests.csproj
β”‚  β”‚     β”œβ”€ Binary/
β”‚  β”‚     β”œβ”€ Yaml/
β”‚  β”‚     └─ Json/
β”‚  β”‚
β”‚  β”œβ”€ Assets/
β”‚  β”‚  β”œβ”€ Inno.Assets.Tests/
β”‚  β”‚  β”œβ”€ Inno.Assets.Pipeline.Tests/
β”‚  β”‚  └─ Inno.Assets.Runtime.Tests/
β”‚  β”‚
β”‚  β”œβ”€ ECS/
β”‚  β”‚  β”œβ”€ Inno.ECS.Tests/
β”‚  β”‚  β”œβ”€ Inno.ECS.Systems.Tests/
β”‚  β”‚  └─ Inno.ECS.Transforms.Tests/
β”‚  β”‚
β”‚  β”œβ”€ Scene/
β”‚  β”‚  β”œβ”€ Inno.Scene.Tests/
β”‚  β”‚  └─ Inno.Scene.Serialization.Tests/
β”‚  β”‚
β”‚  β”œβ”€ Rendering/
β”‚  β”‚  β”œβ”€ Inno.Rendering.Tests/
β”‚  β”‚  β”œβ”€ Inno.Rendering.RenderGraph.Tests/
β”‚  β”‚  └─ Inno.Rendering.Passes.Tests/
β”‚  β”‚
β”‚  β”œβ”€ Editor/
β”‚  β”‚  β”œβ”€ Inno.Editor.Framework.Tests/
β”‚  β”‚  └─ Inno.Editor.Tests/
β”‚  β”‚
β”‚  β”œβ”€ Integration/
β”‚  β”‚  β”œβ”€ Inno.Integration.Tests/
β”‚  β”‚  β”œβ”€ Inno.PlayMode.Tests/
β”‚  β”‚  └─ Inno.AssetImport.Tests/
β”‚  β”‚
β”‚  └─ Golden/
β”‚     β”œβ”€ Inno.Golden.Serialization.Tests/
β”‚     β”œβ”€ Inno.Golden.Scene.Tests/
β”‚     └─ Inno.Golden.Shader.Tests/
β”‚
β”œβ”€ samples/
β”‚  β”œβ”€ HelloWindow/
β”‚  β”‚  β”œβ”€ HelloWindow.csproj
β”‚  β”‚  β”œβ”€ Program.cs
β”‚  β”‚  └─ Assets/
β”‚  β”œβ”€ HelloTriangle/
β”‚  β”‚  β”œβ”€ HelloTriangle.csproj
β”‚  β”‚  β”œβ”€ Program.cs
β”‚  β”‚  └─ Assets/
β”‚  β”œβ”€ ImGuiSandbox/
β”‚  β”‚  β”œβ”€ ImGuiSandbox.csproj
β”‚  β”‚  β”œβ”€ Program.cs
β”‚  β”‚  └─ Assets/
β”‚  β”œβ”€ ECSStressTest/
β”‚  β”‚  β”œβ”€ ECSStressTest.csproj
β”‚  β”‚  └─ Program.cs
β”‚  β”œβ”€ MaterialDemo/
β”‚  β”‚  β”œβ”€ MaterialDemo.csproj
β”‚  β”‚  β”œβ”€ Program.cs
β”‚  β”‚  └─ Assets/
β”‚  └─ EditorSandbox/
β”‚     β”œβ”€ EditorSandbox.csproj
β”‚     β”œβ”€ Program.cs
β”‚     └─ Assets/
β”‚
└─ games/
   β”œβ”€ Sandbox/
   β”‚  β”œβ”€ Sandbox/
   β”‚  β”‚  β”œβ”€ Sandbox.csproj
   β”‚  β”‚  β”œβ”€ Game/
   β”‚  β”‚  β”œβ”€ Gameplay/
   β”‚  β”‚  β”œβ”€ UI/
   β”‚  β”‚  └─ Startup/
   β”‚  β”œβ”€ Sandbox.Content/
   β”‚  β”‚  β”œβ”€ Sandbox.Content.csproj
   β”‚  β”‚  β”œβ”€ Assets/
   β”‚  β”‚  β”œβ”€ Materials/
   β”‚  β”‚  β”œβ”€ Shaders/
   β”‚  β”‚  └─ Scenes/
   β”‚  └─ Sandbox.Editor/
   β”‚     β”œβ”€ Sandbox.Editor.csproj
   β”‚     β”œβ”€ Inspectors/
   β”‚     β”œβ”€ Gizmos/
   β”‚     └─ Menus/
   β”‚
   └─ DemoGame/
      β”œβ”€ DemoGame/
      β”‚  β”œβ”€ DemoGame.csproj
      β”‚  β”œβ”€ Game/
      β”‚  β”œβ”€ Gameplay/
      β”‚  β”œβ”€ UI/
      β”‚  └─ Startup/
      β”œβ”€ DemoGame.Content/
      β”‚  β”œβ”€ DemoGame.Content.csproj
      β”‚  β”œβ”€ Assets/
      β”‚  β”œβ”€ Materials/
      β”‚  β”œβ”€ Shaders/
      β”‚  └─ Scenes/
      └─ DemoGame.Editor/
         β”œβ”€ DemoGame.Editor.csproj
         β”œβ”€ Inspectors/
         β”œβ”€ Gizmos/
         └─ Menus/

A more exact structure overview will live in the docs folder as the project stabilizes.


Contributing / following the project

This is primarily a personal learning project, if you like the direction of the project, a star ⭐️ already helps a lot. Still, I am very open to discussion, suggestions, and collaboration. I started InnoEngine because I wanted to understand engine architecture by actually building one.

If you are interested in:

  • engine architecture
  • C# game engine development
  • rendering backends
  • editor tooling
  • asset pipelines
  • serialization and scene workflows

feel free to open an issue, start a discussion, or reach out by my email.

About

A simple cross-platform game engine based on .NET framework.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Contributors