     }
 }
 
-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"]!

import Foundation
import Metal
import Fuzi

public class S3DXML {
    public var xml: XMLDocument?

    }
}

public class S3DXMLMTLRenderPassDescriptorNode {
    public func parse(container: Container, elem: XMLElement, options: [String : AnyObject] = [:]) -> MTLRenderPassDescriptor {
        let desc = MTLRenderPassDescriptor()
        
        let attachSelector = "render-pass-color-attachment-descriptors > render-pass-color-attachment-descriptor"
        for (idx, el) in elem.css(attachSelector).enumerate() {
