-
Notifications
You must be signed in to change notification settings - Fork 2
Home
Gondwana is a cross-platform 2.5D game and rendering engine written in C#/.NET 8.
It targets desktop (Windows, Linux, macOS), with experimental mobile and web support.
It is a code-first engine — no editor or scene GUI required — developers own the game loop and rendering pipeline directly.
| Technology | Role |
|---|---|
| .NET 8 / C# | Primary language and runtime |
| SkiaSharp | Cross-platform 2D rendering (GPU + bitmap backbuffers) |
| NAudio | Audio playback and mixing |
| LibVLCSharp | Experimental video playback |
| SDL2 | Optional gamepad input (via Gondwana.Input.SDL2) |
| WinForms | Desktop host adapter (Windows/Linux via Mono) |
| Nerdbank.GitVersioning | Deterministic versioning from version.json
|
The solution (Gondwana.sln) is composed of multiple focused projects.
The main engine library. Contains:
- Engine.cs — Central game loop (timing, input polling, scene updates, rendering)
- EngineManagers.cs, EngineDispatcher.cs — Lifecycle and dispatch
- Backbuffers (
BitmapBackbuffer,GpuBackbuffer) RefreshQueueRenderSurfaceHost- Views / Camera / Viewport
SceneSceneLayerSceneLayerTile- Hierarchical scene graph
- Sprites
- Tilesheets
- Animations
- Collision shapes
- Direct drawables:
DirectImageDirectRectangleTextBlockDirectParticles
- Coordinates, overhang, tiles
- Keyboard, mouse, and gamepad polling abstractions
-
MovementController- Follow
- Integrated
- Scripted modes
- Easing functions
AudioResourceManagerPlatformAudioFactory- Stereo panning
- High-resolution timing
- Scheduled callbacks
- Bounding-volume detection
- Kinematic physics
- Configuration
- Extensibility
- Logging
- SkiaSharp integration
-
Gondwana.Hosting/
-
GameHostBase— base class for platform hosts
-
-
Gondwana.WinForms/
- WinForms-specific rendering surface
- Input wiring
- Audio integration
-
Gondwana.WinForms.Hosting/
- WinForms hosting glue
-
Gondwana.Audio.Midi/
- MIDI file reading and synthesis (bundled
.sf2soundfont)
- MIDI file reading and synthesis (bundled
-
Gondwana.Input.SDL2/
- SDL2-based gamepad input provider
-
Gondwana.Video/
- Video playback via LibVLCSharp (
VlcVideoPlayer)
- Video playback via LibVLCSharp (
-
Demos/Gondwana.CoordinateTest— Coordinate system test demo -
Demos/Gondwana.ParticleTest— Particle system demo -
Demos/Slider,Demos/Spot— Additional sample games/demos
Each engine cycle:
-
Dirty-region tracking
State changes enqueue world-space dirty rectangles into the affectedSceneLayer'sRefreshQueue
(no full-frame redraws) -
View rendering
ViewRendereriterates activeViewinstances in Z-order
Each applies its Camera/Viewport transform and redraws only changed regions into a backbuffer -
Composition & presentation
- Sprites and tiles drawn from cached tilesheets
- Animations advance
- Final backbuffer presented by the platform host
-
Timers & input
- High-resolution timers advance simulation time
- Input adapters poll keyboard, mouse, and gamepad
- Scene state is updated accordingly
-
World-space first
All logic uses world coordinates; camera/viewport transforms occur only at render time -
Dirty-region rendering
Only changed regions are redrawn, not the full screen -
Layered scenes with parallax
AScenecontains multipleSceneLayers, each with independent refresh tracking and parallax settings -
View-centric rendering
Multiple cameras/viewports are first-class (split-screen, HUD layers) -
Platform adapters at the edges
Core engine is platform-agnostic; adapters live in separate projects -
Deterministic ordering
Stable sorting for Z-order, layers, and drawables ensures predictable rendering
The project uses Nerdbank.GitVersioning.
- Canonical version is defined in
version.json - Automatically applied via
Directory.Build.props - Do not hard-code
<Version>or<FileVersion>in.csprojfiles
- New here? → Make Your First Game in 15 Minutes
- Want the mental model? → Engine Architecture Overview