I just committed fixes for glSelect picking. Two new samples - GLSelectPickingRenderPassTest.java and GLSelectPickingViewTest.java - also committed to xith-tk. These two samples differ by the way how projection policy is switched (in View or RenderPassConfig). Now glSelect picking (both Parallel and Perspective projected) should be working fine in all configurations.
To use glSelect picking, use Canvas3D.pick*(..) methods, because of default View's picking goes to PickingLibrary.
Another fix is a change to Shader State Updates. This solves "strange" appearance glitches that you might have in your apps after dynamic scene changes via by-reference access. At least one of the tests affected - Q3FlightBenchmark.java does not show up "flashing" textures anymore (it was the case before).
Thanks. I adapted your changes in CanvasPeerImpl also for LWJGL.
There're two things that disturb me a little bit. You changed BranchGroup to extend Group. Why did you do that? BranchGroup isn't supposed to be used as a regular group. And the traverse method is important to be override the one from GroupNode or Group, since only by doing it this way, the correct method of DetailedTraversalCallback is called.
And you put an updateShaders() call to FrustumCuller, which should be unnecessary, since it is called in ShapeAtomPeer.renderAtom().
Is it ok, when I revert