Kryne Engine
Quick overview
Kryne Engine is a personal game engine project, implemented in C++, using OpenGL with GLFW.
The main objective of this project was to get some actual experience on using C++ for a big project, and to experience for myself the problematics when designing even a basic game engine.
I have very little hope that this engine will ever be used to run an actual game, but since this is not the objective with this project, I don’t really mind.
Original project
While the project itself started way back in 2019, at the time the objective was simply to set up 3D graphics demos, before I actually got to work in 3D graphics on a professional level.
While I was able to implement a few more “advanced” features like cascaded shadow maps, ultimately the
project was put on ice as I started to work on a professional level.
The project code and features were implemented as I went and as a consequence it became messier and
messier, pushing me to leave it.
One of the demos that I implemented back then, featuring cascaded shadow maps.
Evolution
When I decided to work on it again, in November 2020, my first task was migrating it to a better 3D
pipeline, inspired by three.js pipeline at first.
This allowed me to set up better tools and classes that I could reuse and extend more readily, making
the project a bit more viable.
As I was working on it though, I decided to go all in and implement something closer to a full-on game engine. The objective was to get some actual experience with building one, as it was one of my fields of interest.
Implementation
The engine uses an Entity-Component-System (ECS) architecture, which is articulated around a main Process class instance.
The engine uses a dynamic shader process, which allows the shader to dynamically change some of its
values (in the form of #define preprocessors) and automatically recompile if needs be.
It also supports #include directives, allowing for the reuse of shader code between very different
shaders.
The feature I’m the proudest of so far is its multi-threading feature. The engine uses a dispatcher
class to allow for the execution of multiple instructions in parallel threads.
The engine uses it in its game loop for updating entities and running systems in parallel.
The engine uses Dear ImGui for rendering its UI, and has an integrated basic scene editor UI, which allows real-time changes to the scene.
Going forward
While I had a few more features I wanted to work on, I ended up abandoning this project.
After working for several months on a professional game engine at Wild Sheep Studio, I realised that the project was lacking in many areas. Many of the features I wanted were still lacking and I ended up finding the current project structure to be lacking.
So instead, I went ahead and decided to can all the existing work and build a new sleek engine with performance as the central concern.