After a while of playing around with my old engine for a while it was a pain doing anything with the OpenGL drivers choking the process quite a bit. This was causing quite a pain as minor change to the engine would cause poor performance.
A lot of the people I spoke to suggested that I should switch over to Vulkan in order to solve the issue. Now I have nothing against Vulkan it is a good API and something I really should learn. However it seemed like I have not reached the end of the line with OpenGL and I could still do more. So I had the idea of doing what a lot of people considered insane threading OpenGL. Turns out it is very possible to thread OpenGL and can depend on the window library used by what I can tell. To offload OpenGL calls to another thread the graphics context on the window library has to be active on the thread that OpenGL is going to be doing it major calls on. Now a lot of people also state that the graphics context can cause errors being asynchronous from the message loop however I have had no such luck in my experience.
As a result of the draw calls being asynchronous of everything else I have mitigated the API bottleneck to an extent and now it is up to me to optimise the shader’s used in the rendering process as well as to do some rendering optimisations on the CPU. Now you may think “Is that all? Not much of an improvement over the other one.” Well I have a surprise. Yep this new version is now cross platform taking full advantage of the nature of OpenGL. Not bad for a c# engine eh? I am pleasantly pleased how far this has come from where it has started. Now back to work on the new engine.