Since I am now slowly getting settled down again after moving to Dublin, I have recently been thinking about starting a new side project. Doing side projects is a very natural hobby for me that allows me to play freely with ideas and gives me that cosy feeling of steady progress.
First, I thought about continuing with global illumination research (which I did in my master’s thesis) or helping out my friends at the amazing ezEngine. However, I realized that it might be fun to experiment with general infrastructure myself – something that I haven’t done for a long time. While the past showed me that I tend not to reuse code directly, there are many pieces of code in my archive that get recycled and improved in other projects – so it could be also useful for spin-offs etc.
My job involves mainly C++ coding atm, so I would rather use something else: I was tempted to use the Rust language but I am just too much in love with IDEs to try a large project with a fancy new language (note to myself: Blog about experiences with Rust). Instead I decided to go with an old friend of mine: C#
Personally, the biggest pros are the great IDE support (ReSharper makes it even better) and the lush standard library. Practically all engines I have seen so far have a huge Core of basic functionality for containers, threads/tasks, SIMD math, file access and so on. In .net there is already a lot of this stuff; 4.6 has even basic SIMD support, a work stealing task scheduler and the async functionalities are just a amazing! Don’t take me wrong, writing all this by hand can be a joy on its own, but I am just not in the mood for it ;).
Also, I have to admit that I just love some of the syntactical sugar of C#, e.g. properties, lambdas, events, …
On the other hand the garbage collector can strike at any time and can make it difficult to manage resource & lifetimes by hand where it is necessary (textures, buffers, but also high-level game resource management). Another con from my point of view is that I already now quite a bit about C#/.Net stuff which makes the whole matter a bit less interesting. On the other hand, recent versions introduced some cool stuff. Cross-Platform support is getting with Microsoft’s more recent open source initiatives really good, but I am still sceptical.
Things to try
A loose list of a few interesting things to which I look especially forward to investigate and experiment with during this project:
- Modern multi-threaded renderer abstraction
- Support for DX12, Vulkan but also OpenGL 4.5 (to prove the concept and make it work on my laptop)
- might be necessary to keep the lowest abstraction level relatively high
- Molecule Matters has a great series about this topic with many super interesting ideas. Can’t wait to try all this in C# 🙂
- Resource system/manager
- Component Entity systems
- Especially interesting in the context of .net reflection stuff
- Unit-testing in .net
- Modern Scenegraph
- Run on Linux without Mono
- Make a WinRT application
Of course there will be also a lot of seemingly less exiting things that still might be fun, but to which I haven’t given much thought yet. For example logging, messaging, special data structures, etc.
Next, I will have a look at existing engines and start then experimenting & planning with the general project structure. While .net offers already a lot of stuff I will probably still need some kind of base library. As always, I will make everything public on GitHub.
To be continued! 🙂