MetalShaderShowcase/AAPLViewController.h

/*
 Copyright (C) 2016 Apple Inc. All Rights Reserved.
 See LICENSE.txt for this sample’s licensing information
 
 Abstract:
 View Controller for Metal Sample Code. Maintains a CADisplayLink timer that runs on the main thread and triggers rendering in AAPLView. Provides update callbacks to its delegate on the timer, prior to triggering rendering.
 */
 
#import <UIKit/UIKit.h>
 
@protocol AAPLViewControllerDelegate;
 
@interface AAPLViewController : UIViewController
@property (nonatomic, weak) IBOutlet id <AAPLViewControllerDelegate> delegate;
 
// the time interval from the last draw
@property (nonatomic, readonly) NSTimeInterval timeSinceLastDraw;
 
// What vsync refresh interval to fire at. (Sets CADisplayLink frameinterval property)
// set to 1 by default, which is the CADisplayLink default setting (60 FPS).
// Setting to 2, will cause gameloop to trigger every other vsync (throttling to 30 FPS)
@property (nonatomic) NSUInteger interval;
 
// Used to pause and resume the controller.
@property (nonatomic, getter=isPaused) BOOL paused;
 
// used to fire off the main game loop
- (void)dispatchGameLoop;
 
// use invalidates the main game loop. when the app is set to terminate
- (void)stopGameLoop;
 
@end
 
// required view controller delegate functions.
@protocol AAPLViewControllerDelegate <NSObject>
@required
 
// Note this method is called from the thread the main game loop is run
- (void)update:(AAPLViewController *)controller;
 
// called whenever the main game loop is paused, such as when the app is backgrounded
- (void)viewController:(AAPLViewController *)controller willPause:(BOOL)pause;
@end