SolDevelopment
← All projects
github2025

SolEngine

A C++20 game engine with a pure Vulkan renderer — volk, VMA, glslang SPIR-V, forward PBR, PCF shadows, HDR/bloom, Lua scripting, Jolt physics, EnTT.

C++20VulkanPBRGame EngineLua
Stars
0
Forks
0
Language
C++
Updated
9 May 2026

SolEngine

A C++20 game engine built on proven open-source libraries.

ConcernLibrary
Renderingbgfx (D3D11 / GL / Vulkan / Metal)
ECSEnTT
MathGLM
PhysicsJolt Physics
UIDear ImGui
Assetscgltf (GLB / GLTF)
WindowGLFW
Scenes / JSONnlohmann/json

Features

  • Forward PBR renderer — Cook-Torrance BRDF, metallic/roughness workflow
  • Lighting — directional + point + spot lights (up to 8), PCF shadow maps
  • HDR pipeline — RGBA16F framebuffer, ACES tonemap, Kawase bloom
  • Skybox — equirectangular HDR → cube map
  • Scene system — Godot-style node tree (.solscene JSON), runtime loading
  • Engine/Game split — engine compiles to sol.exe + sol_engine.dll; games are separate DLLs loaded at runtime
  • CLI — all tools via sol.exe sub-commands (run, build, new)

Quick Start (Windows)

First build — configure + compile everything from scratch:

build.bat

Run the model viewer demo:

runDemo.bat

Wipe build outputs:

wipe.bat

First configure clones bgfx, Jolt, EnTT, GLM, GLFW, ImGui, cgltf and nlohmann/json via FetchContent — expect several hundred MB and a slow first build (~10 min).

Bat Files

FileWhat it does
build.batCMake configure + full build (engine + demo)
runDemo.batIncremental build then launch the model viewer
wipe.batDelete build/ so next build starts clean

Demo Controls

Key / InputAction
WASDFly forward / left / back / right
Q / EFly down / up
Left-clickCapture mouse for look
Mouse moveLook around (while captured)
Arrow keysLook around (keyboard)
EscapeRelease mouse
N / PNext / previous model in demo/models/
TabToggle ImGui HUD

Drop any .glb / .gltf file into demo/models/ and cycle through them with N/P.

Architecture

sol.exe          — engine runtime / CLI launcher
sol_engine.dll   — all engine subsystems (renderer, physics, ECS, scene)
demo.dll         — demo game module (loaded by sol.exe at runtime)

Each game DLL exports one C entry point:

SOL_EXPORT const SolGameApi* sol_get_game_api();

The returned SolGameApi provides on_init / on_update / on_render / on_shutdown callbacks driven by the engine main loop.

Project Layout

engine/
  include/sol/          public engine + game-ABI headers
  src/
    render/             renderer, shaders, HDR/bloom/shadow passes
    scene/              scene manager, node hierarchy, GLTF loader
    physics/            Jolt wrapper
    ecs/                EnTT helpers
    asset/              texture + mesh upload
    ui/                 ImGui integration
    window/             GLFW window
    log/                logging macros
demo/
  src/demo.cpp          model viewer (fly cam, model cycling)
  models/               drop GLBs here — N/P cycles through them
  scenes/               .solscene files
cmake/
  Dependencies.cmake    FetchContent for all third-party libs
  SolGame.cmake         helper for game DLL projects

Roadmap

See review.md for the full roadmap from current state to a production engine with deferred rendering, SSAO, SSR, GI, in-engine editor, Lua scripting, audio, and proper tooling.