Visera Engine¶

Visera is a cross-platform engine for modern games and real-time applications. It uses a C++20 modular design and provides a full runtime stack from platform abstraction to rendering, audio, input, and asset pipelines.
Introduction¶
Visera uses a layered architecture:
- Core — Foundation: math, containers, type system, concurrency, OS abstraction (file, memory, thread, time), logging, compression, and more.
- Platform — Platform layer: window, path, file system, and dynamic library loading; supports Windows, macOS, and GLFW-based cross-platform or Null stub implementations.
- Runtime — Runtime: RHI (Vulkan), graphics (scene, material, render graph), AssetHub, audio, input, task system, UI (ImGui), and 2D physics.
The Engine section in the sidebar follows the same structure as the source: Core, Platform, and Runtime, with one page per module for easy lookup of APIs and concepts.
Quick links¶
| Section | Description |
|---|---|
| Engine → Core | Core library: algorithm, compression, concurrency, containers, delegate, font, image, log, math, meta, OS, traits, types |
| Engine → Platform | Platform: interface, GLFW, Null, Windows, MacOS |
| Engine → Runtime | Runtime: AssetHub, Audio, Global, Graphics, Input, Physics2D, RHI, Tasks, UI, Window |
Recent changes¶
Summary of recent modifications (engine, game, and tooling):
- Runtime.Graphics — Immediate-mode draw API:
FSceneremoved. Game submits per-frame viaSetCamera(FCamera),SubmitLight(FLight),Draw(const IRenderable&)orDraw(const FRenderableMeta&). Data is captured at submit time (FRenderableMeta: InstanceData + Material + Mesh); noTSharedPtr<IRenderable>crosses the thread boundary. Engine callsRender(FWindow*)afterOnPreRenderto buildFRenderTaskfrom accumulated draws/camera/lights and send to the Graphics thread. Engine loop order:OnTick→OnPreRender→Graphics->Render(Window)→OnPostRender. FRenderData holdsDrawCommands(TArray<FRenderableMeta>) andLights; BatchAndSort iterates draw commands. Channel, RegisterPass, PipelineCache, RenderGraph unchanged. See Framework, RenderGraph, Scene.Renderable. - Runtime.Graphics.Scene.Camera — Docs:
FCameraAPI, left-handed, lazy matrices, Euler Yaw–Pitch–Roll. See Camera. - Core.Types.Path —
FPath::NormalizeStringnow preserves a leading slash for absolute paths (fixes shader/material loading from app bundle on macOS). - Runtime.Input — Mouse cursor position is in framebuffer (pixel) space: on macOS/Retina the GLFW window multiplies cursor coordinates by content scale before notifying Input. Keyboard key storage uses a dense array
Keys[FirstKey..LastKey]with offset inGetKey, avoiding unused slots for low key codes. - Platform.GLFW.Window — Cursor position callback scales by
GetScaleX()/GetScaleY();SetContentScaleupdates scale when the window content-scale callback fires (e.g. moving to another monitor). - Game / Scripting — Scripting bindings keep a list of created applications (
State->Apps);CreateApplicationreturnsTSharedPtr<FViseraApp>. Mouse position exposed to scripts viaGetCursor().Position. Engine terminate clearsAppsbefore resetting the engine. - Game (Verdandi) — Demo uses background material and sky texture, R8G8B8A8_UNorm scene color, black clear; sprite push constants include
GlowRadius(from left-button hold duration); hit test uses cursor AABB and glow radius; window size read each frame for resize.
Links¶
- Site: visera.io
- Repository: Visera-io/Visera-II