If you speak about implementation of RenderingPeer in Xith3D, then RenderPeerImpl itself is quite simple.
More complicated part is CanvasPeerImpl, but it contains some code that I think should be factored out from it to higher-level abstract class (for ex., canvas identification, cached resources management, some accessor methods) or to helper class/separate atom (drawing floor, shadows, etc.).
Another big part is ShapeAtomPeer, but it is almost nothing to throw out except of some unused methods, and maybe introducing internal helper methods.
If we speak about all OpenGL bindings, then really A LOT of code can be reused if one condition is met: if all of them provide assignment-compatible implementation of GL (i.e. implement the same GL interface), otherwise we will end up different class names anyway. If Java allow plain preprocessor-level includes, then it is easy to solve. I don’t think that it makes sense to introduce own abstraction layer to OpenGL bindings.
What is possible to make more or less abstract is some generic rendering, but, again, it depends on binding.
If atoms/shaders are changed or fixed (which happens really rarely because of they are just containers for information from scenegraph), native implementations have to be fixed anyway, because of they can not guarantee that they render new structures properly.
Majority (really majority) of rendering process is already on the higher abstraction layer - check classes from com.xith3d.render package and you will find there completely binding-independent state management and caching, geometry sorting, atom creation, etc. - everything needed to isolate Scenegraph from OpenGL binding, and I would be happy if we will factor out some common parts of code to share them between different bindings.
We can not say that right now Xith3D has frozen functionality set, so there will be A LOT of changes before we will reach more or less functonally stable version.
Yuri