diff --git a/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm b/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm index f10b2d81e..ff5e25265 100644 --- a/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm +++ b/OSBindings/Mac/Clock Signal/Machine/CSMachine.mm @@ -364,27 +364,7 @@ struct ActivityObserver: public Activity::Observer { } - (NSBitmapImageRep *)imageRepresentation { - // Grab a screenshot. -/* Outputs::Display::OpenGL::Screenshot screenshot(4, 3); - - // Generate an NSBitmapImageRep containing the screenshot's data. - NSBitmapImageRep *const result = - [[NSBitmapImageRep alloc] - initWithBitmapDataPlanes:NULL - pixelsWide:screenshot.width - pixelsHigh:screenshot.height - bitsPerSample:8 - samplesPerPixel:4 - hasAlpha:YES - isPlanar:NO - colorSpaceName:NSDeviceRGBColorSpace - bytesPerRow:4 * screenshot.width - bitsPerPixel:0]; - - memcpy(result.bitmapData, screenshot.pixel_data.data(), size_t(screenshot.width*screenshot.height*4)); - - return result;*/ - return nil; + return self.view.imageRepresentation; } - (void)applyMedia:(const Analyser::Static::Media &)media { diff --git a/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.h b/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.h index e3f021ea3..993e1fd04 100644 --- a/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.h +++ b/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.h @@ -20,4 +20,6 @@ // ready for output when next requested. - (void)updateFrameBuffer; +- (nonnull NSBitmapImageRep *)imageRepresentation; + @end diff --git a/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm b/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm index e914aaf57..a87624415 100644 --- a/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm +++ b/OSBindings/Mac/Clock Signal/ScanTarget/CSScanTarget.mm @@ -1120,4 +1120,29 @@ using BufferingScanTarget = Outputs::Display::BufferingScanTarget; return &_scanTarget; } +- (NSBitmapImageRep *)imageRepresentation { + // TODO: create a temporary texture, copy, and do as below but not re: _frameBuffer. + + NSBitmapImageRep *const result = + [[NSBitmapImageRep alloc] + initWithBitmapDataPlanes:NULL + pixelsWide:(NSInteger)_frameBuffer.width + pixelsHigh:(NSInteger)_frameBuffer.height + bitsPerSample:8 + samplesPerPixel:4 + hasAlpha:YES + isPlanar:NO + colorSpaceName:NSDeviceRGBColorSpace + bytesPerRow:4 * (NSInteger)_frameBuffer.width + bitsPerPixel:0]; + +// [_frameBuffer +// getBytes:result.bitmapData +// bytesPerRow:_frameBuffer.width*4 +// fromRegion:MTLRegionMake2D(0, 0, _frameBuffer.width, _frameBuffer.height) +// mipmapLevel:0]; + + return result; +} + @end diff --git a/OSBindings/Mac/Clock Signal/Views/CSScanTargetView.h b/OSBindings/Mac/Clock Signal/Views/CSScanTargetView.h index 4b1a1c14e..58917f785 100644 --- a/OSBindings/Mac/Clock Signal/Views/CSScanTargetView.h +++ b/OSBindings/Mac/Clock Signal/Views/CSScanTargetView.h @@ -152,6 +152,11 @@ */ - (void)releaseMouse; +/*! + @returns An image of the view's current contents. +*/ +- (nonnull NSBitmapImageRep *)imageRepresentation; + /*! @returns The CSScanTarget being used for this display. */ diff --git a/OSBindings/Mac/Clock Signal/Views/CSScanTargetView.m b/OSBindings/Mac/Clock Signal/Views/CSScanTargetView.m index 4b69fda90..65ed41fb1 100644 --- a/OSBindings/Mac/Clock Signal/Views/CSScanTargetView.m +++ b/OSBindings/Mac/Clock Signal/Views/CSScanTargetView.m @@ -194,6 +194,10 @@ static CVReturn DisplayLinkCallback(__unused CVDisplayLinkRef displayLink, const [self.responderDelegate paste:sender]; } +- (NSBitmapImageRep *)imageRepresentation { + return self.scanTarget.imageRepresentation; +} + #pragma mark - NSDraggingDestination - (BOOL)performDragOperation:(id )sender {