     }
 }
 
-public class S3DXMLMTLRenderPassStencilAttachmentDescriptorNode: S3DXMLNodeParser {
-    public typealias NodeType = MTLRenderPassStencilAttachmentDescriptor
-    public func parse(descriptorManager: SpectraDescriptorManager, elem: XMLElement, options: [String : AnyObject] = [:]) -> NodeType {
-        let desc = NodeType()
+public class S3DXMLMTLRenderPassStencilAttachmentDescriptorNode {
+    public func parse(container: Container, elem: XMLElement, options: [String : AnyObject] = [:]) -> MTLRenderPassStencilAttachmentDescriptor {
+        let desc = MTLRenderPassStencilAttachmentDescriptor()
         
         //TODO: texture & ref
         

import Foundation
import Metal
import Fuzi

public class S3DXML {
    public var xml: XMLDocument?

    }
}

public class S3DXMLMTLComputePipelineDescriptorNode {
    public func parse(container: Container, elem: XMLElement, options: [String : AnyObject] = [:]) -> MTLComputePipelineDescriptor {
        let desc = MTLComputePipelineDescriptor()
        
        if let computeFunctionTag = elem.firstChild(tag: "compute-function") {
            if let computeFunctionName = computeFunctionTag.attributes["ref"] {
