3 years into development of my custom game engine

5.7.2024

Technically at the time of release, this is a bit beyond 3 years of development, but I digress. Before we jump into a lot of backstory and talk about where we've come, let's address the elephant in the room.

The repo was officially created on 2.28.2021.

That's right - my game engine has been in development for over 3 years, and we haven't yet released a game on it. Sounds bad, right?

It sure does. But, there are several important things to bear in mind when talking about the timetable:

If I were to take all the collective time I have spent over the course of this project, it's probably somewhere close to around 8 months of full-time development. If I were to factor out the experimental bits of code, we're probably looking at more like 6 months. The progress we have made in that time, in my opinion, is quite substantial.

Since the last article on this subject, we have accomplished quite a lot. Here's a small highlight sampling of some of the commits that have been made:

This is by no means an exhaustive list. You can see a list of filtered commits here, including the lastest in-progress version branch here. Note that the TODO.md file in the repo also lists a lot of this.

Where we are now

At the time of writing, Kohi is undergoing a pretty substantial refactor effort to pay off some of the aformentioned debt. We've spent about 10 streams on it, and I believe there will be a few more to get through it the rest of the way. It's a collection of all the work that's piled up and has been largely ignored over the past 2-3 years, and needs doing before we progress any futher. We've added a lot of features, and the more features that we add, the harder this refactor effort becomes. Therefore I have decided to break now and complete this.

The refactor centers around changes required to make the rendergraph more flexible and configurable (complete with automatic dependency resolution between noes). It also is an effort to refactor our 3 current plugins (Vulkan renderer, audio plugin, and standard ui) to fit into a new standard plugin interface/system versus the current ad-hoc way of doing it. Additionally, this will enhance the application config to utilize KSON to configure systems, plugins and even the rendergraph itself.

Some links: