diff options
author | rachytski <siarhei.rachytski@gmail.com> | 2011-10-24 20:15:40 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:26:38 +0300 |
commit | 943d893105e3e76839be98529994414c4b0b01a0 (patch) | |
tree | c9a0dd11971b9bd300323d8b01b6fd11f03ed473 /iphone/Maps/Classes/EAGLView.mm | |
parent | 9906d541f6b2279b550d05ec6e5a6422c5e7ccf6 (diff) |
using VideoTimer in Desktop and iOS version. stopping it, when the pause is longer than 60 cycles. refactored WindowHandle. implemented QtVideoTimer. closes #356
Diffstat (limited to 'iphone/Maps/Classes/EAGLView.mm')
-rw-r--r-- | iphone/Maps/Classes/EAGLView.mm | 37 |
1 files changed, 14 insertions, 23 deletions
diff --git a/iphone/Maps/Classes/EAGLView.mm b/iphone/Maps/Classes/EAGLView.mm index 842ec24bef..44c4566d3c 100644 --- a/iphone/Maps/Classes/EAGLView.mm +++ b/iphone/Maps/Classes/EAGLView.mm @@ -2,7 +2,6 @@ #import <OpenGLES/EAGLDrawable.h> #import "EAGLView.h" -#import "WindowHandle.h" #include "../../yg/screen.hpp" #include "../../yg/texture.hpp" @@ -13,18 +12,15 @@ #include "RenderBuffer.hpp" #include "RenderContext.hpp" -bool _doRepaint = true; -bool _inRepaint = false; - @implementation EAGLView @synthesize framework; @synthesize windowHandle; +@synthesize videoTimer; @synthesize drawer; @synthesize renderContext; @synthesize renderBuffer; @synthesize resourceManager; -@synthesize displayLink; // You must implement this method + (Class)layerClass @@ -143,13 +139,19 @@ bool _inRepaint = false; drawer = shared_ptr<DrawerYG>(new DrawerYG(p)); - windowHandle = shared_ptr<iphone::WindowHandle>(new iphone::WindowHandle(_doRepaint)); + windowHandle.reset(new WindowHandle()); - windowHandle->setRenderContext(renderContext); + windowHandle->setUpdatesEnabled(false); + + typedef void (*drawFrameFn)(id, SEL); + SEL drawFrameSel = @selector(drawFrame); + drawFrameFn drawFrameImpl = (drawFrameFn)[self methodForSelector:drawFrameSel]; + + videoTimer.reset(CreateIOSVideoTimer(bind(drawFrameImpl, self, drawFrameSel))); - displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(drawView)]; - displayLink.frameInterval = 1; - [displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; + windowHandle->setVideoTimer(videoTimer); + + windowHandle->setRenderContext(renderContext); } return self; @@ -174,7 +176,7 @@ bool _inRepaint = false; drawer->screen()->endFrame(); } -- (void)drawView +- (void)drawFrame { shared_ptr<PaintEvent> pe(new PaintEvent(drawer.get())); if (windowHandle->needRedraw()) @@ -187,16 +189,6 @@ bool _inRepaint = false; } } -- (void)drawViewThunk:(id)obj -{ - [self drawView]; -} - -- (void)drawViewOnMainThread -{ - [self performSelectorOnMainThread:@selector(drawViewThunk:) withObject:nil waitUntilDone:NO]; -} - - (void)layoutSubviews { CGFloat const scale = self.contentScaleFactor; @@ -206,8 +198,7 @@ bool _inRepaint = false; - (void)dealloc { - [displayLink invalidate]; - [displayLink release]; + videoTimer.reset(); [EAGLContext setCurrentContext:nil]; [super dealloc]; } |