     public enum RenderDestination {
         /// A type representing the GPU-Based rendering.
         public enum GPU {
-            /// Indicates the rendering is based on a `MTLDevice`.
+            /// Indicates the rendering is based on a `MTLDevice`. The GPU-Based contex for this value
+            /// will automatic fallthrough to the OpenGL ES-Based if the Metal device is not available.
             case metal
             /// Indicates the rendering is based on the api of `OpenGL ES`.
             case openGLES

    }
}

private var _autoCIContext    = UIImage._AutomaticCIContext()
private var _metalCIContext   = UIImage._MetalBasedCIContext()
private var _openGLESCIContex = UIImage._OpenGLESBasedCIContext()

/// Get the context of core image with the given render destination.
private func _ciContext(of dest: UIImage.RenderDestination) -> CIContext! {

    /// A type representing a core image context using the real-time rendering with Metal.
    fileprivate struct _MetalBasedCIContext {
        lazy var context: CIContext! = { () -> CIContext! in
            guard let device = MTLCreateSystemDefaultDevice() else { return _openGLESCIContext.context }
            return CIContext(mtlDevice: device)
        }()
    }
