diff options
author | punto- <ariel@okamstudio.com> | 2015-10-22 22:07:32 -0300 |
---|---|---|
committer | punto- <ariel@okamstudio.com> | 2015-10-22 22:07:32 -0300 |
commit | 4baf65dab78b6e8062de760010338c316c628394 (patch) | |
tree | 23f68b4a108279955915cc00ae3db59c2cce50ac /platform/iphone/gl_view.mm | |
parent | d123c89c5802777e02402108d9271ed2f29368fe (diff) | |
parent | 15a826571c8f4809023c2f3ca014705feb5492bf (diff) |
Merge pull request #2663 from romulox-x/cadisplaylink
Added CADisplayLink setting for iOS
Diffstat (limited to 'platform/iphone/gl_view.mm')
-rwxr-xr-x | platform/iphone/gl_view.mm | 75 |
1 files changed, 38 insertions, 37 deletions
diff --git a/platform/iphone/gl_view.mm b/platform/iphone/gl_view.mm index 4d5d1b81e3..279fbdafa8 100755 --- a/platform/iphone/gl_view.mm +++ b/platform/iphone/gl_view.mm @@ -334,13 +334,15 @@ static void clear_touches() { delegateSetup = ![delegate respondsToSelector:@selector(setupView:)]; } +@synthesize useCADisplayLink; + // If our view is resized, we'll be asked to layout subviews. // This is the perfect opportunity to also update the framebuffer so that it is // the same size as our display area. -(void)layoutSubviews { - printf("HERE\n"); + //printf("HERE\n"); [EAGLContext setCurrentContext:context]; [self destroyFramebuffer]; [self createFramebuffer]; @@ -418,19 +420,21 @@ static void clear_touches() { return; active = TRUE; printf("start animation!\n"); -#if USE_CADISPLAYLINK - // Approximate frame rate - // assumes device refreshes at 60 fps - int frameInterval = (int) floor(animationInterval * 60.0f); - - displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(drawView)]; - [displayLink setFrameInterval:frameInterval]; - - // Setup DisplayLink in main thread - [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; -#else - animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawView) userInfo:nil repeats:YES]; -#endif + if (useCADisplayLink) { + + // Approximate frame rate + // assumes device refreshes at 60 fps + int frameInterval = (int) floor(animationInterval * 60.0f); + + displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(drawView)]; + [displayLink setFrameInterval:frameInterval]; + + // Setup DisplayLink in main thread + [displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; + } + else { + animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawView) userInfo:nil repeats:YES]; + } if (video_playing) { @@ -444,13 +448,16 @@ static void clear_touches() { return; active = FALSE; printf("******** stop animation!\n"); -#if USE_CADISPLAYLINK - [displayLink invalidate]; - displayLink = nil; -#else - [animationTimer invalidate]; - animationTimer = nil; -#endif + + if (useCADisplayLink) { + [displayLink invalidate]; + displayLink = nil; + } + else { + [animationTimer invalidate]; + animationTimer = nil; + } + clear_touches(); if (video_playing) @@ -462,13 +469,7 @@ static void clear_touches() { - (void)setAnimationInterval:(NSTimeInterval)interval { animationInterval = interval; - -#if USE_CADISPLAYLINK - if(displayLink) -#else - if(animationTimer) -#endif - { + if ( (useCADisplayLink && displayLink) || ( !useCADisplayLink && animationTimer ) ) { [self stopAnimation]; [self startAnimation]; } @@ -477,16 +478,16 @@ static void clear_touches() { // Updates the OpenGL view when the timer fires - (void)drawView { -#if USE_CADISPLAYLINK - // Pause the CADisplayLink to avoid recursion - [displayLink setPaused: YES]; + if (useCADisplayLink) { + // Pause the CADisplayLink to avoid recursion + [displayLink setPaused: YES]; - // Process all input events - while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE) == kCFRunLoopRunHandledSource); + // Process all input events + while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, TRUE) == kCFRunLoopRunHandledSource); - // We are good to go, resume the CADisplayLink - [displayLink setPaused: NO]; -#endif + // We are good to go, resume the CADisplayLink + [displayLink setPaused: NO]; + } if (!active) { printf("draw view not active!\n"); @@ -632,7 +633,7 @@ static void clear_touches() { case AVAudioSessionRouteChangeReasonOldDeviceUnavailable: NSLog(@"AVAudioSessionRouteChangeReasonOldDeviceUnavailable"); NSLog(@"Headphone/Line was pulled. Resuming video play...."); - if (_is_video_playing) { + if (_is_video_playing()) { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ [_instance.avPlayer play]; // NOTE: change this line according your current player implementation |