private int RecursivelyPersistLayer(XbimSqliteDB db, XbimMeshLayer<XbimMeshGeometry3D, XbimRenderMaterial> layer, int layerid, int parentLayerId) { try { // bytes contain 6 floats and 1 int // pointX, pointY, pointZ, normalX, normalY, normalZ, entityLabel // this is the vbo. XbimTexture texture = layer.Style; XbimColour c = layer.Style.ColourMap[0]; //take the first one, not perhaps correct or best practice byte[] colour = new byte[4 * sizeof(float)]; MemoryStream ms = new MemoryStream(colour); BinaryWriter bw = new BinaryWriter(ms); bw.Write(c.Red); bw.Write(c.Green); bw.Write(c.Blue); bw.Write(c.Alpha); byte[] vbo = ((XbimMeshGeometry3D)layer.Hidden).ToByteArray(); MemoryStream memoryStream = new MemoryStream(); using (ICSharpCode.SharpZipLib.GZip.GZipOutputStream zis = new ICSharpCode.SharpZipLib.GZip.GZipOutputStream(memoryStream)) { zis.Write(vbo, 0, vbo.Length); memoryStream.Flush(); } vbo = memoryStream.ToArray(); // bounding box XbimRect3D bb = layer.BoundingBoxHidden(); byte[] bbArray = bb.ToFloatArray(); db.AddLayer(layer.Name, layerid, parentLayerId, colour, vbo, bbArray); int myParent = layerid; foreach (var subLayer in layer.SubLayers) { layerid++; layerid = RecursivelyPersistLayer(db, subLayer, layerid, myParent); } return layerid; } catch (Exception ex) { throw new XbimException("Error building scene layer", ex); } }