Because it's somehow related and i have to write a little rant: Android's activity management still drives me nuts. It's impossible to understand why it does what and when and the behaviour changes in every damn version. I was used to it destroying the gl context when going into pause/stop. It then triggered an onCreate() when coming back...hence this solution with the static master field and the copy-method.
In Android 4.0, they have finally improved this. It actually survives stop/pause. Even the GLSurfaceView survives and reinitializes itself properly...so far, so good. But while doing so, it calls onSurfaceCreated() once (which is understandable) and onSurfaceChanged() twice with the same gl context. That makes no sense to me. So if you, like i did, rely on onSurfaceChanged() to create the new FrameBuffer, you are doing it twice. So i moved that to onDraw() instead. But it doesn't help either...it calls onSurfaceChanged(), then calls onDraw() forcing everything to be uploaded to the GPU again and then is calls onSurfaceChanged() again with the same context and the same dimensions...WTF? So i ended up detecting if the gl context between the two calls has changed and only create a new FrameBuffer if it has. And i bet that Android 4.x will change that again...