OK, for cases like that the second option probably will work - basically manipulating how the "distance" is computed in the shader so you can overlay the views however you want.
If you want the additional views to take precedence no matter what, it gets a bit more complicated, but I'm thinking something like this:
- Add additional uniforms for "view size" parameters for all views (these could be vec2 if you want different aspect ratio horizontally or vertically or a single vec4 for them all if you want uniform size)
- Rather than checking all positions to see which one is nearest, the loop checks the popins only (view 1-3) and if it's closer to the focal point than "view size", it uses that texture.
- If it's NOT close enough to any focal point, it always uses the view 0 texture.
So basically you don't pick the nearest view, you check if you're in one of the popin views and just want a yes/no answer.
(Additionally, you can fade in/out the views by changing the view size that gets passed into the shader, and set it to 0 to disable the popin view entirely - and of course modifying the focal point moves the view around the screen as well, like before)