Nightbird Engine
Nightbird is my cross-platform C++ game engine with Vulkan rendering on Windows and Linux, alongside Wii U and 3DS support.
Available on
Nightbird started as an OpenGL renderer to develop my understanding of graphics programming, the project became my own game engine.
I migrated to Vulkan, and later abtracted platform-specifics behind backend interfaces allowing for Wii U and 3DS support. I chose the Wii U and 3DS as they were my childhood game consoles, and they have good homebrew support through devkitPro.
Platforms
A backend system allows platform and rendering functionality to be implemented for different platforms.
Architecture
Nightbird features a custom type reflection system which does not require RTTI, and functions across all platforms. This allows for core and custom object types to be added to scenes, their fields to be set, and then cooked to platform-specific binary scene formats.
On the desktop, the user's project can be compiled in two main ways: As a shared library loaded by the editor at runtime, or as a standalone executable. On Wii U and 3DS the project is always compiled statically.
App
The app is the executable deployed to the target platform, loading cooked assets generated by the editor.
The input provider interface is implemented for all platforms, with audio provider implementations currently in progress.
Editor
The Nightbird Editor provides utility functions for importing assets from source formats (e.g., .glb, .flac) and cooking them into containers (e.g., .nbtexture, .nbaudio). When cooking for the Nintendo 3DS, this uses the platform-specific formats t3x for textures and DSP-ADPCM for audio.
The previous version of the editor used Dear ImGui for the UI, and this will soon be implemented for the new editor and its new functionality.
The previous version of the editor features various windows:
- Scene Outliner - Displays the objects in the scene in a reparentable hierarchy
- Inspector - Displays serialised properties of the selected object
- Asset Browser - Browse folders and files contained within the Assets folder. Double-click on a scene to open it.
- Scene - Render and traverse the 3D scene from the perspective of the Editor Camera.
When editor UI is reimplemented for the new version of the engine, a Game window is planned where the scene will be rendered from the main camera.