State of the Engine
There are still quite a few bugs in the lighting model and renderer in general. Most of them in the ambient occlusion and bounce-light related code, hence I have disabled it for this release.
Other than that it feels good not having to think about new features, but fix and improve what is already in the game.
Something I have learned from a recent update-post from Tavern Tycoon is that I have to up my PR-speech. They have added, what seems to be SSDO (same thing I use for my AO and bounce-lights), but did not just add one screenshot and a short note, like I did, but crafted a full block of text, mentioning how even most AAA games lack this feature. This makes the whole features look really impressive.
Since I am only going to release that feature myself in the next release, maybe I will try my hand at such a marketing blurb myself?
Vulkan & Metal
On a more technical note: Apple’s Metal and Vulkan are both modern graphics APIs. But while Vulkan exposes every detail of the underlying hardware to the developer, Metal only has to concern itself with a very limited set of silicon; thus Metal can lift some of the burden of handling Vulkan’s details off of the developer’s shoulders.
When Metal was released for macOS lots of features were missing to really make use of the underlying hardware. But it has come a long way since then and now exposes nearly all of the things that I need/want in a graphics API.
[Hey Apple, how about an indirect [drawIndexedPrimitives:] that takes the number of tightly packed IndirectArguments to read from indirectBuffer: instead of only reading a single one?!]
To illustrate the difference in details/grunt-work Vulkan demands over Metal, here are the lines of code for the rendering back-ends in Margin Magnate:
The old and deprecated OpenGL back-end had about the same functionality and came in at around 4500 lines of actual code.
When it comes to the lines of code in the shaders they are about equal (~1500 lines of code). But as a C programmer I enjoy Vulkan’s GLSL much more than the C++-heavy abomination that is the Metal Shading Language.
However, I mentioned in another post some time back that I really enjoy both APIs: Metal for its prototyping capabilities because of its ease of use without much boiler plate code and Vulkan, on the other hand, for its no-fuss access to the underlying hardware. But most of all: for not being OpenGL.
For the next release I plan to fix the SSDO related code and do lots of internal clean-ups in the renderer code now that it is feature complete. Other than that, do not expect too much in the next release.