diff --git a/OSBindings/Mac/Clock Signal/Atari2600Document.swift b/OSBindings/Mac/Clock Signal/Atari2600Document.swift
index 5136211ba..b42b2bfea 100644
--- a/OSBindings/Mac/Clock Signal/Atari2600Document.swift
+++ b/OSBindings/Mac/Clock Signal/Atari2600Document.swift
@@ -8,15 +8,17 @@
import Cocoa
-class Atari2600Document: NSDocument {
+class Atari2600Document: NSDocument, CSOpenGLViewDelegate {
override init() {
super.init()
// Add your subclass-specific initialization here.
}
+ @IBOutlet weak var openGLView: CSOpenGLView?
override func windowControllerDidLoadNib(aController: NSWindowController) {
super.windowControllerDidLoadNib(aController)
+ openGLView!.delegate = self
// Add any code here that needs to be executed once the windowController has loaded the document's window.
}
@@ -45,5 +47,14 @@ class Atari2600Document: NSDocument {
atari2600?.setROM(data)
}
+ private var lastCycleCount: Int64?
+ func openGLView(view: CSOpenGLView!, didUpdateToTime time: CVTimeStamp) {
+ let cycleCount = (1194720 * time.videoTime) / Int64(time.videoTimeScale)
+ if let lastCycleCount = lastCycleCount {
+ let elapsedTime = cycleCount - lastCycleCount
+ atari2600!.runForNumberOfCycles(Int32(elapsedTime))
+ }
+ lastCycleCount = cycleCount
+ }
}
\ No newline at end of file
diff --git a/OSBindings/Mac/Clock Signal/Base.lproj/Atari2600Document.xib b/OSBindings/Mac/Clock Signal/Base.lproj/Atari2600Document.xib
index 8effec6d7..c74f9d9f5 100644
--- a/OSBindings/Mac/Clock Signal/Base.lproj/Atari2600Document.xib
+++ b/OSBindings/Mac/Clock Signal/Base.lproj/Atari2600Document.xib
@@ -4,8 +4,9 @@
-
+
+
diff --git a/OSBindings/Mac/Clock Signal/ClockSignal-Bridging-Header.h b/OSBindings/Mac/Clock Signal/ClockSignal-Bridging-Header.h
index 80150678b..fde46822d 100644
--- a/OSBindings/Mac/Clock Signal/ClockSignal-Bridging-Header.h
+++ b/OSBindings/Mac/Clock Signal/ClockSignal-Bridging-Header.h
@@ -3,3 +3,4 @@
//
#import "Atari2600.h"
+#import "OpenGLView.h"
diff --git a/OSBindings/Mac/Clock Signal/OpenGLView.h b/OSBindings/Mac/Clock Signal/OpenGLView.h
index f7b2ea9ab..1c91803df 100644
--- a/OSBindings/Mac/Clock Signal/OpenGLView.h
+++ b/OSBindings/Mac/Clock Signal/OpenGLView.h
@@ -9,6 +9,14 @@
#import
@import AppKit;
+@class CSOpenGLView;
+
+@protocol CSOpenGLViewDelegate
+- (void)openGLView:(CSOpenGLView *)view didUpdateToTime:(CVTimeStamp)time;
+@end
+
@interface CSOpenGLView : NSOpenGLView
+@property (nonatomic, weak) id delegate;
+
@end
diff --git a/OSBindings/Mac/Clock Signal/OpenGLView.m b/OSBindings/Mac/Clock Signal/OpenGLView.m
index 023353c6f..428032ac8 100644
--- a/OSBindings/Mac/Clock Signal/OpenGLView.m
+++ b/OSBindings/Mac/Clock Signal/OpenGLView.m
@@ -34,10 +34,10 @@
CVDisplayLinkStart(displayLink);
}
-// This is the renderer output callback function
static CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime, CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext)
{
- [(__bridge CSOpenGLView *)displayLinkContext setNeedsDisplay:YES];
+ CSOpenGLView *view = (__bridge CSOpenGLView *)displayLinkContext;
+ [view.delegate openGLView:view didUpdateToTime:*now];
return kCVReturnSuccess;
}