         
         return asset
     }
+}
+
+public class SpectraXMLBufferAllocatorNode: SpectraXMLNode {
+    public typealias NodeType = MDLMeshBufferAllocator
+    
+    public func parse(container: Container, elem: XMLElement, options: [String: Any] =
+[:]) {
+        // TODO: add a MeshBufferAllocatorGenerator protocol
+        // - with a generate function (also take an args: [String: GeneratorArg] = [:])
+        // - instead of fetching from the container's MDLMeshBufferAllocator.self
+        //   - we fetch from the MeshBufferAllocatorGenerator.self registration
+        
+        let alloc8: MDLMeshBufferAllocator?
+        
+        if let type = elem.attributes["type"] {
+            alloc8 = container.resolve(MDLMeshBufferAllocator.self, name: type)
+        } else {
+            alloc8 = MTKMeshBufferAllocator()
+        }
+        
+        // TODO: how to assign other attributes of a buffer allocator?
+        // - especially when users can define their own properties
+        //   - mimic the mesh generation setup, so users can define args
+        
+        return alloc8!
+    }
+    
+    // TODO: copy?  honestly, can a memory management object like this be copied?
+    // - or at least efficiently copied in some meaningful way?  i think not
+    // - no copies for you!
+    //   - instead create a new registration and manage instances
+    // - registrations for MDLMeshBufferAllocator.self manage instances
+    // - and registration for MeshBufferAllocatorGenerators manage generator instances
+    //   - and pop out new buffer allocators
+    
 }
 
 public class SpectraXMLVertexAttributeNode: SpectraXMLNode {

                    container.register(MDLVertexDescriptor.self, name: key!)  { _ in
                        return MDLVertexDescriptor(vertexDescriptor: vertexDesc)
                        }.inObjectScope(.None)
                case .Object:
                    let obj = SpectraXMLObjectNode().parse(container, elem: child, options: options)
                    container.register(MDLObject.self, name: key!) { _ in

    case StereoscopicCamera = "stereoscopic-camera"
    case VertexAttribute = "vertex-attribute"
    case VertexDescriptor = "vertex-descriptor"
    case Material = "material"
    case MaterialProperty = "material-property"
    case ScatteringFunction = "scattering-function"
