Ad Hoc Engine is a lightweight, "hypermodular" C++20 game engine focussed on extensibility, flexibility, and agility. It only directly includes a few core features:
- An extensible editor application, Ad Hoc Editor
- An extensible build system
- An extensible asset pipeline
- An extensible scene graph system
- A centralized package manager
All other major features (rendering, input, UI, etc.) are provided as first-party packages that are themselves built with Ad Hoc Engine. This lets you easily remove features you don’t use, fork and customize features you do use, and even replace features wholesale with third-party or in-house solutions.
At least, that's the design -- I just have to finish building it.
Follow development on Twitch:
The entirety of Ad Hoc Engine is built from a single Visual Studio solution (Windows) and Xcode workspace (macOS). Dependencies are automatically installed when you build.
Open AdHocEngine.sln.
- Use the
Debug,Dev, andReleaseconfigurations to build and run the editor in developer mode. - Use the
StaticDebug,StaticDev, andStaticReleaseconfigurations to build and run tests on the static engine library.
Open AdHocEngine.xcworkspace.
- Use the
Debug,Dev, andReleaseschemes to build and run the editor in developer mode. - Use the
StaticDebug,StaticDev, andStaticReleaseschemes to build and run tests on the static engine library. - Use the
Bundlescheme to build and archive the final editor app bundle.
The Visual Studio solution is organized as you’d expect, with a few exceptions:
- The
Debug,Dev, andReleaseconfigs also trigger theStaticDebug,StaticDev, andStaticReleasebuilds (respectively) as a post-build step. - A vcpkg install script runs as a custom build tool on each
vcpkg.jsonfile.
The Xcode workspace, on the other hand, is set up somewhat unconventionally, since Xcode doesn’t allow cross-configuration dependencies:
- The
Debug,Dev, andRelease"configurations" are implemented as separate build targets.Debugtargets have a "D" suffix,Devtargets have a "Dev" suffix, andReleasetargets have no suffix. - The Xcode config switch is repurposed as an
ONLY_ACTIVE_ARCHswitch. TheDebug,Dev, andReleaseschemes use theActiveArchconfig, while theBundlescheme (used for shipping) uses theUniversalconfig.
- mimalloc: https://github.com/microsoft/mimalloc
- {fmt}: https://github.com/fmtlib/fmt
- GLFW: https://github.com/glfw/glfw
- Dear ImGui: https://github.com/ocornut/imgui
- vcpkg: https://github.com/microsoft/vcpkg
- Google Test: https://github.com/google/googletest

