A Vulkan-based C++ game engine in active development. Built with a modular 3D pipeline supporting modern mesh formats, real-time lighting, interactive asset workflows, and companion-process IPC. The editor (GameEngineSDL) ships alongside IlmeeeHub (project launcher) and HandlerIlmeeeEngine (companion thread-safe engine process).
The build is pinned to a Nix shell that brings in SDL2/3, GLFW, Vulkan, GTK3, FFmpeg, shaderc, etc.
# Enter the Nix development environment
nix-shell
# Run CMake and build within the environment
cmake -B build
make -C build -j$(nproc)Shader compilation uses glslc which is available within the shell context:
glslc assets/shaders/vulkan/scene_mesh.vert -o assets/shaders/vulkan/scene_mesh.vert.spvTwo normal entry points:
# Through the Hub (recommended — wires up the project handshake):
./build/IlmeeeHub
# Standalone with an explicit project:
./build/GameEngineSDL --project /path/to/MyProjectWhen no --project is supplied, the editor boots a hardcoded debug scene so the renderer always has something to display:
./build/GameEngineSDL # 3D: loads OBJ/PMX fallbacks
./build/GameEngineSDL --2d=true # 2D: loads assets/testimage.png as a sprite
./build/GameEngineSDL --2d # same as --2d=trueThe 2D fallback drops a single sprite at world origin (300x300 px) and shows a dynamic editor grid + colored XY axes overlay that follow pan/zoom.
- 3D Viewport Navigation:
RMB drag— mouselook (FPS fly-camera)WASD— fly camera forward, left, backward, rightQ/E— fly downward / upwardShift— fast movement multiplier
- Object Interaction & Layout:
LMB click— Ray-Triangle Picking: Casts a ray through the viewport to select the specific 3D model and individual mesh surface under the cursor.LMB drag— Move the currently selected mesh in the screen plane.- Drag-and-Drop Spawning: Drag
.obj,.pmx, or.fbxmodels from the File Explorer and drop them directly onto the viewport to instantiate them at that spatial point. - Drag-and-Drop Texturing: Drag any texture image (
.png,.jpg, etc.) onto a specific 3D mesh surface to bind it dynamically.
- Inspector Panel (Surfaces):
- Exposes all auto-detected submesh surfaces and material slots.
- Allows selecting individual surfaces to inspect properties or Bind/Clear Custom Textures on the fly.
- 2D Mode Navigation (no 3D mesh loaded):
RMB drag— pan cameraWheel— zoom (0.1×–5×)- Toolbar
Reset Viewresets camera
src/cpp/
main.cpp # editor entry, CLI parsing
ApplicationManager.cpp # lifecycle, thread-safe network synchronization, companion startup
Hub.cpp # IlmeeeHub launcher
core_engine/
SceneRenderer.cpp # Vulkan mesh/viewport renderer, OBJ/PMX/FBX loaders, ray picking
TextureManager.cpp # Vulkan dynamic texture & descriptor pool manager
ui/
MainWindow.cpp # main shell, docking, and theme controller
HandlerChildWindow.cpp # scene viewport, hierarchy, and surface inspector panels
HandlerProject.cpp # project file explorer & drag-drop asset import
assets/
3dmodels/ # fallback test meshes
shaders/vulkan/ # vertex, fragment, and grid shader sources
Scenes are serialized to a custom high-performance binary .ilmeeescene format.
- v1.0: Stores entity counts, primitive/mesh kinds, transform fields, and path nodes.
- v1.1: Appends per-entity light properties (range, spot angle, intensity, type, color, gamma).
- v1.2 (Current): Appends per-entity camera properties (near/far plane, projection, FOV) and per-surface texture bindings (resolves relative to project root or loads absolute paths).
User preferences and recents live in the cross-platform ~/.ilmeeeengine/ location via ilmeee::UserDataRoot().
The editor (GameEngineSDL) communicates with the engine runner (HandlerIlmeeeEngine) via a localized TCP loopback protocol over ports 27015 and 27016.
- All blocking modal GUI actions (such as
Load Scenenative file dialogs) are safely offloaded to the main thread's main loop context using GLib'sg_idle_adddispatching. - This ensures complete thread-safety across background network readers and the main rendering thread.
- Vulkan renderer with offscreen target + ImGui presentation: ✅
- 2D sprite pipeline + dynamic grid overlay: ✅
- 3D Primitives (Cube, Sphere, Plane) & Camera entities: ✅
- 3D OBJ, PMX, and FBX loaders (normals, UVs, FNV-1a vertex dedup): ✅
- Surfaces & Per-surface Texture Overrides (v1.2 Scene Graph): ✅
- Ray-Triangle Picking & Viewport Drag-and-Drop: ✅
- Audio engine integration: ⏳ planned
- Android target: ⏳ planned