I realized I had not posted in a while again so I figured I should post again to give an idea of what is happening with the engine. Most of the work has been under the hood but there are a few notable changes.
The lack of user interface was becoming apparent and needed to be fixed. The big thing that I find to be annoying in UI is font rendering but luckily I am able to borrow WinForms to handle that, sure it may not be the prettiest but it works. The main inspiration I took for importing the UI was from HTML, people are capable of layout the user interface in an XML document and importing it into the engine.
One of the many things that were starting to get out of hand was the number of assets(mostly shaders). This resulted in a slight hiccup when starting the engine from all the assets loading. To get around this I ended up I ended up using a package manager to import all the required assets from compressed archives, this drastically reduced loading times as the work was slightly offloaded from the drive to the CPU with the bonus of reducing file sizes.
I noticed that on Linux I would get hiccups whenever the threads where shuffled about on CPU(at least I assume this was the issue). This was largely fixed when I ended up breaking the voxel thread into a master thread and chunk worker threads. The master thread will control file io for chunks in addition to creating and destroying worker threads in charge of updating the chunks. What determines the creation of the threads is how much work the master thread is given, if the master thread determines the workers cant keep up with the workload it will create more threads until they can up to half the CPUs processor count. When the worker thread determines there is no more work to do they will merge themselves back into the master. Thanks to these changes I am able to have scenes with 2500+ chunks and still have them updated and drawn in real time and maintaining 60UPS(Updates per second) or in the case of Linux an unlocked UPS. The silver lining is it is able to run again on my dual-core laptop.
Seeing as people don’t seem to get a clue when I am working on my engine I ended up adding Discord integration to the engine(I know backwards logic and I should not be on Discord if I want to quiet environment). The major problem I found when integrating it was that the official SDK is in C++ and the wrappers that I tried either don’t play nice with Mono or use the registry for some bizarre reason. To get around this I ended up reinventing the wheel yet again and creating my own Discord SDK(What would I do without Wireshark I swear). Thanks to this I have an SDK that runs purely in the Mono. I finally get some peace and quiet(mostly) as people can now see when I am working on the engine and disappear.
Now I am probably going to have to update the engine download at some point but that comes at a later time when I get around to stress testing it again(Although now that I think about it the original public build has issues).