Browse Source

Implemented CADisplayLink on IOS, still need to change renderer to display only latest frame

Ivan Safrin 10 years ago
parent
commit
bdb8603501

+ 1 - 1
build/ios/TemplateApp/TemplateApp/PolycodeTemplateApp.mm

@@ -42,7 +42,7 @@ PolycodeTemplateApp::~PolycodeTemplateApp() {
 bool PolycodeTemplateApp::Update() {
 bool PolycodeTemplateApp::Update() {
     Number elapsed = core->getElapsed();
     Number elapsed = core->getElapsed();
     
     
-    test->Roll(elapsed * 45.0);
+    test->Roll(elapsed * 20.0);
     
     
     return core->updateAndRender();
     return core->updateAndRender();
 }
 }

+ 2 - 0
include/polycode/core/PolyIOSCore.h

@@ -86,6 +86,8 @@ namespace Polycode {
 
 
 	private:
 	private:
         
         
+        CADisplayLink *displayLink;
+        
         GLuint colorRenderbuffer;
         GLuint colorRenderbuffer;
         GLuint depthRenderbuffer;
         GLuint depthRenderbuffer;
         GLuint defaultFBOName;
         GLuint defaultFBOName;

+ 5 - 0
include/polycode/view/ios/PolycodeView.h

@@ -3,5 +3,10 @@
 
 
 @interface PolycodeView : UIView
 @interface PolycodeView : UIView
 
 
+@property (nonatomic) BOOL needsUpdate;
+
+- (void) drawView:(id)sender;
+
+
 
 
 @end
 @end

+ 3 - 1
src/core/PolyIOSCore.mm

@@ -194,7 +194,7 @@ void IOSCore::handleVideoModeChange(VideoModeChangeInfo *modeInfo) {
     {
     {
         printf("ERROR CREATING RENDERBUFFER\n");
         printf("ERROR CREATING RENDERBUFFER\n");
     }
     }
-
+    
 }
 }
 
 
 String IOSCore::getResourcePathForFile(const String &fileName) {
 String IOSCore::getResourcePathForFile(const String &fileName) {
@@ -206,6 +206,8 @@ String IOSCore::getResourcePathForFile(const String &fileName) {
 }
 }
 
 
 void IOSCore::prepareRenderContext() {
 void IOSCore::prepareRenderContext() {
+    while(![glView needsUpdate]) {} // wait for frame sync
+    
     glBindFramebuffer(GL_FRAMEBUFFER, defaultFBOName);
     glBindFramebuffer(GL_FRAMEBUFFER, defaultFBOName);
 }
 }
 
 

+ 23 - 1
src/view/ios/PolycodeView.m

@@ -3,7 +3,7 @@
 
 
 @interface PolycodeView ()
 @interface PolycodeView ()
 {
 {
-
+    BOOL _needsUpdate;
 }
 }
 @end
 @end
 
 
@@ -15,4 +15,26 @@
     return [CAEAGLLayer class];
     return [CAEAGLLayer class];
 }
 }
 
 
+- (instancetype) initWithCoder:(NSCoder*)coder
+{
+    if ((self = [super initWithCoder:coder]))
+    {
+        _needsUpdate = NO;
+        CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(drawView:)];
+        [displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
+    }
+    
+    return self;
+}
+
+- (BOOL) needsUpdate
+{
+    return _needsUpdate;
+}
+
+- (void) drawView:(id)sender {
+    _needsUpdate = YES;
+
+}
+
 @end
 @end