diff options
| author | Jake Turner <jake@evansturner.co.uk> | 2021-05-18 05:55:51 +0100 |
|---|---|---|
| committer | jeremyk-lunarg <jeremyk@lunarg.com> | 2021-05-31 09:17:55 -0600 |
| commit | 6149e30699b36901715d46a5cef8959625ef399b (patch) | |
| tree | 1f541c02df513c14c3a69efd7fd30b789a622d77 /cube/macOS/cubepp | |
| parent | daa3490ea48a3f4a84f8e281c6e45bc7b06498c2 (diff) | |
| download | usermoji-6149e30699b36901715d46a5cef8959625ef399b.tar.xz | |
Trigger demo quit from applicationWillTerminate
Allows for a clean shutdown of the rendering thread (CVDisplayLink) whilst the main thread is exiting
Diffstat (limited to 'cube/macOS/cubepp')
| -rw-r--r-- | cube/macOS/cubepp/AppDelegate.mm | 11 | ||||
| -rw-r--r-- | cube/macOS/cubepp/DemoViewController.h | 3 | ||||
| -rw-r--r-- | cube/macOS/cubepp/DemoViewController.mm | 8 |
3 files changed, 19 insertions, 3 deletions
diff --git a/cube/macOS/cubepp/AppDelegate.mm b/cube/macOS/cubepp/AppDelegate.mm index 2a7bcaff..c1ee96b4 100644 --- a/cube/macOS/cubepp/AppDelegate.mm +++ b/cube/macOS/cubepp/AppDelegate.mm @@ -17,6 +17,7 @@ */ #import "AppDelegate.h" +#import "DemoViewController.h" @interface AppDelegate () @@ -29,7 +30,15 @@ } - (void)applicationWillTerminate:(NSNotification *)aNotification { - // Insert code here to tear down your application + NSApplication *app = aNotification.object; + NSArray<NSWindow *> *windows = app.windows; + for (NSUInteger i = 0; i < windows.count; ++i) { + NSViewController *viewController = windows[i].contentViewController; + if ([viewController isKindOfClass:[DemoViewController class]]) { + [(DemoViewController *)viewController quit]; + break; + } + } } - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender { diff --git a/cube/macOS/cubepp/DemoViewController.h b/cube/macOS/cubepp/DemoViewController.h index 7f90cc7e..6d7ca215 100644 --- a/cube/macOS/cubepp/DemoViewController.h +++ b/cube/macOS/cubepp/DemoViewController.h @@ -23,6 +23,9 @@ /** The main view controller for the demo storyboard. */ @interface DemoViewController : NSViewController + +- (void)quit; + @end #pragma mark - diff --git a/cube/macOS/cubepp/DemoViewController.mm b/cube/macOS/cubepp/DemoViewController.mm index 9e003b9b..7bc4681f 100644 --- a/cube/macOS/cubepp/DemoViewController.mm +++ b/cube/macOS/cubepp/DemoViewController.mm @@ -33,11 +33,15 @@ } - (void)dealloc { - demo.cleanup(); - CVDisplayLinkRelease(_displayLink); + [self quit]; [super dealloc]; } +- (void)quit { + CVDisplayLinkRelease(_displayLink); + demo.cleanup(); +} + /** Since this is a single-view app, initialize Vulkan during view loading. */ - (void)viewDidLoad { [super viewDidLoad]; |
