A modern 2D game engine written in C++23, featuring custom solutions across the stack. Built as a solo hobby project with a focus on learning through implementation.
- Custom ECS Architecture built on sparse set data structures for optimal cache efficiency and iteration speed.
- Integrated Physics system designed to work seamlessly with the ECS architecture.
- Flexible Input System that routes keyboard and gamepad inputs to per-user controllers, allowing dynamic device assignment and customizable action mappings.
- Thread-Safe Logging class ensuring safe access from multiple threads with support for source-directory mapping.
- Smart References which are pointer-like class that automatically updates its address when the object it points to is moved or becomes
nullptrif the object is destroyed. - Event System with listener and dispatcher classes for decoupling systems through event handling.
This engine is developed with three core principles:
-
Learning by Building
Relies only on minimal foundational libraries for platform and tooling support; everything else is built from scratch. -
Abstraction First
The dependencies are wrapped behind clean, engine-specific interfaces to maintain flexibility and control over the API. -
Modern C++
Written in C++23 with a focus on clean design, safety, and performance through modern language features. Future updates will explore C++26 to leverage compile-time reflection for serialization of components, scenes, and other engine data.
- SDL3 - Core functionality (entry point, system events, input, windowing, etc.)
- SDL3_image - Image loading support
- SDL3_ttf - Font rendering and text support
- Dear ImGui - Editor UI
Those are managed through my custom vcpkg fork and will be automatically installed during the configuration process.
- C++23 compatible compiler
- CMake 3.15 or higher
Clone the repository with the --recursive flag. This will cause the vcpkg submodule to also be pulled:
git clone https://github.com/Froncu/Fronge --recursiveThe project includes CMake presets (CMakePresets.json) that configure vcpkg integration automatically. You can configure and build using your preferred IDE or command line.
Note: If creating custom configurations, ensure they inherit from the provided base, debug and/or release preset to maintain proper vcpkg integration.
The engine is distributed as a shared library and must be linked to an executable project. Sandbox serves as a reference implementation, demonstrating how to integrate and use the engine in your own applications. There, the engine is included as a Git submodule for ease of development. However, other users may prefer using CMake’s FetchContent for now as I would love to make this available on some package managers in the future.