public static IMTLDevice [] GetAllDevices(ref NSObject observer, MTLDeviceNotificationHandler handler) { if (observer == null) { throw new ArgumentNullException("observer"); } IntPtr handle = observer.Handle; unsafe { BlockLiteral *block_ptr_handler; BlockLiteral block_handler; block_handler = new BlockLiteral(); block_ptr_handler = &block_handler; block_handler.SetupBlockUnsafe(static_notificationHandler, handler); var rv = MTLCopyAllDevicesWithObserver(ref handle, (void *)block_ptr_handler); var obj = NSArray.ArrayFromHandle <IMTLDevice> (rv); if (handle != observer.Handle) { observer = Runtime.GetNSObject(handle); } return(obj); } }
public static IMTLDevice [] GetAllDevices(ref NSObject observer, MTLDeviceNotificationHandler handler) { var rv = GetAllDevices(handler, out var obs); observer = obs; return(rv); }
public static IMTLDevice [] GetAllDevices(MTLDeviceNotificationHandler handler, out NSObject observer) { var block_handler = new BlockLiteral(); block_handler.SetupBlockUnsafe(static_notificationHandler, handler); var rv = MTLCopyAllDevicesWithObserver(out var observer_handle, ref block_handler); var obj = NSArray.ArrayFromHandle <IMTLDevice> (rv); NSObject.DangerousRelease(rv); block_handler.CleanupBlock(); observer = Runtime.GetNSObject(observer_handle); NSObject.DangerousRelease(observer_handle); // Apple's documentation says "The observer out parameter is returned with a +1 retain count [...]." return(obj); }