Quick aside: I've been doing a bit of work on the side project this week - mainly on the train to and from my teaching classes - and I noticed something a bit worrying. For a while I've been wondering why my 2D framework for Neutrino appears to be pixel-fill limited on my laptop. Much more so than I expected. Jumping to 1080p in a window is enough to really hit the performance, so after integrating ImGUI I dug a little deeper and added some profilng.
It turns out that the engine isn't as slow as I thought. Internally it was vsync'd to 60, but unbound could potentially hit ~1400fps. Visually, however, it was blatantly dropping frames. If anything, it looked sub Dirty Hz (30fps). Not good. So I tried glmark2 and it was showing the same problem, it'd report fps in the hundreds, but visually appear dog slow.
My laptop runs Ubuntu 16.04, and for the desktop environment I've been using the latest version of Cinnamon. I like it, it's incredibly clean, good looking and does what I need. The other big plus is Nemo - the file manager - which is by far my favourite thing about it. Default split-pane views ftw! But, for whatever reason, I didn't consider that my performance problems could be related to this.
On a whim I tested the game under Unity, and lo. A silky smooth, 60fps.
So yeah, even though Cinnamon claimed that it wasn't running in SW rendering mode, for whatever reason, the window update wasn't actually matching what I was outputting. Quite a big "Whoah" moment, and something I thought was worth sharing. Not all desktop environments are equal, and some aren't good for games.
Real shame, as I can't use Cinnamon while it's exhibiting this kinda problem. Also doesn't bode well for when I release something, but I'll cross that bridge when I come to it.