Bloom solved
As is often the case, the actual problem turned out to be pretty silly; one of my offscreen buffers was set to GL_NEAREST instead of GL_LINEAR during an important copy. Someone remind me again why I enjoy programming? :) This still isn’t ready to go live yet; there are too many computers out there which…