If TileCanvas and TileSelector are types you defined, I’m assuming that they extend GLCanvas or GLJPanel. You need to make sure that the TileSelector constructor that takes a GLContext is properly passing it to its super constructor.
If you’re using GLJPanel, strange things might be going on and I’m not sure if context sharing is actually supported. This is because the GLJPanel uses a PBuffer underneath the hood and the PBuffer is recreated every time the GLJPanel changes size. Since GLCanvas is a heavy weight component it does not have this problem since its context stays the same.
In your case, if you’re using the GLJPanel as the super type for TileCanvas and TileSelector, when the split pane is first show, everything resizes and the pbuffers are probably recreated, so the GLContext initially used is different.
To fix that, you can explicitly create a 1x1 GLPBuffer and use it as the shared context to both your canvas and selector panels. That way, even if they internally recreate their own contexts, both will be sharing with the global 1x1 pbuffer you set up first. Using a pbuffer in this case is also nice because it always has a context, unlike with a GLCanvas which doesn’t always get one until it’s visible.
As a final note, I don’t think it’s the best practice to subclass GLCanvas. Instead you should use GLEventListeners to draw when necessary.