 //
 
 extension MTLTextureDescriptor {
-    static func texture2DDescriptor(size: CGSize, mipmapped: Bool = false, usage: MTLTextureUsage = []) -> MTLTextureDescriptor {
+    static func texture2DDescriptor(size: CGSize, mipmapped: Bool, usage: MTLTextureUsage = []) -> MTLTextureDescriptor {
         let desc = texture2DDescriptor(pixelFormat: .`default`,
                                        width: Int(size.width),
                                        height: Int(size.height),

    }
}

class Canvas: Scene {

    // master texture of canvas
    lazy var canvasTexture: MTLTexture = {
        let descriptor : MTLTextureDescriptor = .texture2DDescriptor(size: self.contentSize,
                                                                     mipmapped: self.mipmapped,
                                                                     usage: [.shaderRead, .shaderWrite, .renderTarget])
        return self.device.makeTexture(descriptor: descriptor)
    }()

    lazy var canvasRenderer: ImageRenderer = {

    }

    lazy var sublayerTexture: MTLTexture = {
        return self.device.makeTexture2D(size: self.contentSize,
                                         mipmapped: self.mipmapped,
                                         usage: [.shaderRead, .renderTarget])
    }()

    lazy var subcomandQueue: MTLCommandQueue = {
