This is the first post of what will hopefully become a comprehensive devlog detailing my work as I take a shot at creating my first “proper” 3D game engine. Needless to say I’m far, far from the first to do something like this—especially in C++—but if I can share a few of my own ideas and learn a lot along the way, it’ll be worthwhile!
I’ve already done a lot of the groundwork for this project. It started out as an effort to follow LearnOpenGL, but I found myself wanting to refactor the code and build more than just a renderer, so it inevitably evolved into the rough beginnings of an engine (at which point I renamed the project to “Iris”, after a cat I helped my parents adopt!). Through that process, I’ve decided on a rough set of goals to start with:
- OpenGL first, DirectX and/or Vulkan later (much, much later!)
- Desktop only (but with potential consideration towards controller support)
- ECS-based with scene graphs
- C++17-based
- Performance as a priority, but not #1 (I’ll worry more about this in future engine projects; it’s a huge area to cover)
I’ll expand on these as I go. For example, I’d like to build an editor when there’s enough of an engine to warrant having that. I also need to think about audio, but I want to focus on the graphics and input systems first.
To help keep myself on track and not produce an incorrigible mess, I’m using lots of resources and reference material, some of which are:
- Mastering C++ Game Development (2018)
- Game Engine Architecture (2015)
- Game Coding Complete, Fourth Edition (2013)
- The Cherno’s Game Engine series
- Modern open source C++ game engines (there are lots of examples!)
Lastly, the repo for this project is available at https://github.com/Riari/iris-engine and at the time of writing, my focus is on integrating an initial version of an entity component system, the work-in-progress of which is in the ecs
branch (so I can easily refer to the original, non-componentised code). In the next post, I’ll cover some of the work I’m doing on that.