One of the big headaches I'm having right now is how to (or whether I should even) make the game suitable for mobile devices. My daughter loves the Squishies, but her main device is an Android tablet. The big issue I have is my engine has me somewhat boxed in.
Learning OpenGL was quite difficult for me, and the framework I have moulds around it. Yes, there is plenty of separation which makes the job a little more approachable, but there are concepts that are baked in that are a little trickier to unpick - enough that makes me then consider the future, because I don't want to be rebuilding things each time I get a new set of issues to resolve. I end up most of the time mulling over these options:
- SDL is often the one that seems the best fit in terms of being able to keep things mostly as they are, in place of glfw, as this does have a good cross-platform setup. I think I've always been put off by its sheer size, though. I feel this would be the one that leaves me with the most control, but still comes with a very long road ahead to get full cross-platform support. However, it's not a "renderer" as such, so much of the main work needs doing yourself.
- Diligent comes up a bit, too because of its support for all the platforms I could need. It also has modules for things like shadows, PBR, bloom, etc - all things I either have or would like. But this is also the biggest architectural shift, as it touches a HUGE surface of my engine - and because it's an opinionated (albeit unifying) framework, means I lose the most control. As my engine is a "learning" framework just as much as a game one, I wonder what the value is of learning low-level concepts by-proxy. I've always tended to prefer learning from the bottom up as it translates better to other things.
- BGFX is, like Diligent, another huge shift, but also supports many platforms. It's somewhat more "raw" than Diligent but comes with what appears to be more simplicity. Common complaints though seem to imply that it's somewhat dated, and I'm not a fan of the idea of using its shader language. I've also found it awkward to get set up when I've played with it before.
- Vulkan is the one that often gets touted as complex, verbose, etc and certainly it's put me off in the past. There are things like NRI / NVRHI that appear to exist to help take some of the pain out of things, but I'm under no illusion that these things would hold my hand much. But...it does allow me to somewhat maintain complete control, and serves as a valuable learning curve.
There are more, but they often fall into the same level of complexity as the above. But ultimately the decision boils down to this: do I choose a "raw, low-level" replacement for OpenGL (via SDL, perhaps) that keeps me in control, but is a hugely complex learning curve? Or a higher-level engine of sorts that is more opinionated, more disruptive and less "standard" but offers a good degree of features-done-properly?
Or do I just stick it out with what I have, accept that what I have so far is Windows/Linux only, and that a next iteration of the engine should cover this?
Of course, some people might think "Why not use an engine? Unity, Godot, etc are all free!" but I guess the answer still comes down to freedom and learning. I've always been more of a fan of learning concepts than tools, plus using engines often leaves you at the mercy of the engine itself and whatever licence restrictions they impose.
I guess the best approach might be to just stick it out for a while, make a few more simple games, and just gather a better overall picture of what I actually need. There's a fair bit that can be done in the meantime to protect games from future chaos, like keeping them adequately abstracted from the engine itself. For Squishies and Skiddies, both are probably in a good state as far as this is concerned, and both are unfinished anyway, so there's an acceptable degree of risk when finally porting.
Or maybe the itch I need to scratch is to build my own engine, keeping everything sufficiently modular/abstracted so I can swap in building blocks.