Currently the QOpenGLProgram was static. This works when you only have
one OpenGL context that is never invalidated.
Instead we should have a new program created for each context. There is
no benefit of being static when we can use the cached shader loading.
As we need a program per context, we would need to handle windowChanged
and sceneGraphInvalidated manually. Instead we can scope the program to
the QSGNode which will be deleted and recreated on the render thread
automatically by the scene graph backend.
We can also drop ManagedTextureNode and use
QSGSimpleTextureNode::setOwnsTexture which does the same thing.
BUG: 403453