Nah, but my strategy was simple:
Render the entire scene to a texture larger than the viewport (or rerender the entire scene to a 256^2 texture, whichever is faster, which depends on the complexity of your scene). Then render that texture to a texture 256*256 with a fragment shader, that calculates the brightness (you might want to compensate for the human eye sensitivity for R,G,B).
Then render that texture to 128^2, 64^2, 32^2, 16^2 textures, don’t go (much) further.
Now you additive-blend all those textures to a 256^2 texture, ofcourse you half the multiplication-factor with every smaller mipmap.
brightness = brightness*[depends_on_framerate] + (bloom256*0.250 + bloom128*0.125 * etc,etc)
Now simply draw that brightness texture on your scene. It gives the impression of being (slowly?) blinded by bright objects. You can fake a lot of effects by not hardcoding everything, but building feedback into it (from the tiny bloom maps, like 16^2. The brighter that tiny texture, the brighter your scene, and the less the bloom effect should be. This simulates your eyes very slowly (like >10s) adjusting to the brightness.