A custom 3D game engine in C++23 with a separate C#/WPF editor. The editor communicates with the engine over a local socket, allowing the engine to be restarted independently if it crashes without taking down the editor.
A standalone runtime that owns the window, the renderer, and the world.
- Rendering
- ECS
- Components & modules
- Reflection & serialization
- Resources
- Editor bridge
A native WPF desktop application built on a clean, layered architecture.
- Domain / Application / UI
- MVVM
- Panels
- Services
- Engine connection
When the workspace opens, the editor:
- Launches the engine process headless (
-hide) on a chosen port. - Sends a
get_viewportrequest and receives the engine window's native handle (HWND). - Reparents that window into a WPF
HwndHost, restyles it as a child window, and keeps it sized to the panel.
The result is a single editor window with the real, live C++ OpenGL viewport rendering inside it.
| Area | Choice |
|---|---|
| Engine language | C++23 |
| Graphics | OpenGL 4.6 core, GLAD, GLFW, GLM |
| Serialization | nlohmann/json |
| Engine build | CMake + Ninja, MSVC 2022 |
| Editor language | C# / .NET 10 |
| Editor UI | WPF, MVVM (CommunityToolkit.Mvvm) |
| DI / hosting | Microsoft.Extensions.Hosting |
| Engine ↔ editor | TCP, length-prefixed JSON (RPC + events) |
| Task runner | just |
Windows-only - the editor uses WPF and native HWND reparenting, and the engine builds with MSVC.
- Visual Studio 2022 Build Tools (MSVC toolchain) -
winget install Microsoft.VisualStudio.2022.BuildTools - Ninja -
winget install Ninja-build.Ninja - just -
winget install Casey.Just - .NET 10 SDK (for the editor) -
winget install Microsoft.DotNet.SDK.10 - Python 3 with
libclang(for the reflection code generator) -pip install libclang
CMake fetches other packages automatically on first configure.
Set the path to your VsDevCmd.bat in justconfig.json.
Build engine:
Create new project:
just new-project {parent_directory} {project_name}Build project and run editor:
just build-and-run {parent_directory}/{project_name}Open {parent_directory}/{project_name} in VS Code.
There are buttons in the top right corner of the editor that allow rebuilding codebase and packaging project into usable output directory.
