     }
 }
 
-public class S3DXMLMTLVertexAttributeDescriptorNode: S3DXMLNodeParser {
-    public typealias NodeType = MTLVertexAttributeDescriptor
-    
-    public func parse(descriptorManager: SpectraDescriptorManager, elem: XMLElement, options: [String : AnyObject] = [:]) -> NodeType {
-        let vertexAttrDesc = NodeType()
+public class S3DXMLMTLVertexAttributeDescriptorNode {
+    public func parse(container: Container, elem: XMLElement, options: [String : AnyObject] = [:]) -> MTLVertexAttributeDescriptor {
+        let vertexAttrDesc = MTLVertexAttributeDescriptor()
         
         if let format = elem.attributes["format"] {
             let mtlEnum = descriptorManager.mtlEnums["mtlVertexFormat"]!

    }
}

public class S3DXMLMTLTextureDescriptorNode: S3DXMLNodeParser {
    public typealias NodeType = MTLTextureDescriptor
    
    public func parse(descriptorManager: SpectraDescriptorManager, elem: XMLElement, options: [String : AnyObject] = [:]) -> NodeType {
        
        let texDesc = NodeType()
        if let textureType = elem.attributes["texture-type"] {
            let mtlEnum = descriptorManager.mtlEnums["mtlTextureType"]!
            let enumVal = UInt(mtlEnum.getValue(textureType))

    }
}

public class S3DXMLMTLRenderPassDepthAttachmentDescriptorNode {
    public func parse(container: Container, elem: XMLElement, options: [String : AnyObject] = [:]) -> MTLRenderPassDepthAttachmentDescriptor {
        let desc = MTLRenderPassDepthAttachmentDescriptor()
        
        //TODO: texture & ref
        
