One important aspect of FBOs is that the framebuffer and texture is easy to accidentally loop if you have any `glBindTexture(...,tex)` calls without `glBindTexture(...,0)` after rendering is done. Basically OpenGL state is leaking from one use to another and it breaks the FBOs. Took like hours and hours of work to figure out why FBOs fail, but leaking the `glBindTexture()` is good candidate for failing FBOs. Happily WebGL in Emscripten is gives good error messages about "framebuffer and active texture looping".