currently index data is kept by xith3d in main memory, instead of integer VBO. AFAIK, for indexed geometry, VBOs are not really accelerated until BOTH coordinate data and index list are kept in VBO. This is a sure place for improvement, especially given the fact that index data is going to be static in almost all cases (even for real time skin deformation, only coordinates change).
Sure, this is a place for enhancement. I spent a lot of time playing with VBOs trying to resolve VBO problems with NVidia driver on Linux. Anyway, I have similar problems with VBOs on WinXP, too, when use Detonator drivers (45xx are still making problems).
Now coming back to the topic. Maybe I am wrong, but after checking shapeAtomPeer.drawGeometry(...) I do not see support for IndexedTriangleStripArray... OK, we should add this I believe.
As of composing single geometry with multiple glDraw*** calls, I think we can create something like MixedGeometryArray/MixedIndexedGeometryArray/MixedStripGeopetryArray/MixedIndexedStripGeometryArray with the following functionality:
stripCounts should be exactly the same as in ***StripArray
stripModes [new!] should contain the modes for every strip (currently strip mode defined implicitly by geometry class, but here I want to specify this explicitly, on per-strip basis). stripModes can be one of LINE_STRIP, TRIANGLE_STRIP, TRIANGLE_FAN, LINE_ARRAY, POINT_ARRAY, TRIANGLE_ARRAY, QUAD_ARRAY, so we can make complicated mixed geometry inside one Shape3D.
This is just an idea and should be discussed in more details.