Aqua Engine
September 2022 - Ongoing
Source Code
Summary
- Language: C++, C#, GLSL
- Technology: OpenGL, Assimp, GLFW, GLM, ImGUI, STB, glad, CMake, Mono
Description
A custom game engine for exploring & testing different technologies such as scripting, virtual file systems, and rendering techniques.
Features
- Custom hybrid entity component system
- Centralised resource management, for passing integer handles instead of pointers
- Shader loading & reloading
- Scripting support for C#, with reloading
Why
It's a great learning experience, provides great insight for how the larger
engines may work internally, and can feel very rewarding (when it works).
This is my playground for experimentation and implementing various techniques,
such as different rendering pipelines or effects.
Aqua Engine is by far the largest codebase I have worked on, and definitely makes me
think harder when refactoring or implementing new features.
Difficulties
Scripting
The largest difficulty thus far was implementing Mono for C# scripting.
There isn't a lot of great documentation available, and for a long while I was unaware of how to track managed objects
when garbage collection moved them in memory.
Using my experiences from this project, I wrote my first Medium article!
Medium - How to embed C# scripting into your C++ application
Entity Component System
With 90% of experience being in Unity, my mindset is very much geared towards logic and data mixed inside components.
The approach I settled on was components that can have logic, but also implementing systems
similar to a more pure ECS implementation; this allows me to transition logic from components in to
systems, but also an opportunity to leave logic in components where it may make more sense.
Media
C# script reloadingGLSL shader reloading