Did you consider this throughout?  I'm pretty confident about it.

> Instead of doing this save/restore framebuffer would it be cleaner to pass in a framebuffer override like we do elsewhere for shader program and render states?