Browse Source

Use CGDataProvider instead of CGBitmapContext

Nikita Tsukanov 7 years ago
parent
commit
83f5a72782
1 changed files with 7 additions and 4 deletions
  1. 7 4
      src/Avalonia.Native.OSX/window.mm

+ 7 - 4
src/Avalonia.Native.OSX/window.mm

@@ -243,10 +243,11 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
 - (void) drawFb: (AvnFramebuffer*) fb
 {
     auto colorSpace = CGColorSpaceCreateDeviceRGB();
-    auto bctx = CGBitmapContextCreate(fb->Data, fb->Width, fb->Height, 8, fb->Stride, colorSpace, kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast);
-    auto image = CGBitmapContextCreateImage(bctx);
-    CGContextRelease(bctx);
-    CGColorSpaceRelease(colorSpace);
+    auto dataProvider = CGDataProviderCreateWithData(NULL, fb->Data, fb->Height*fb->Stride, NULL);
+
+    
+    auto image = CGImageCreate(fb->Width, fb->Height, 8, 32, fb->Stride, colorSpace, kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast,
+                               dataProvider, nullptr, false, kCGRenderingIntentDefault);
     
     auto ctx = [NSGraphicsContext currentContext];
     
@@ -255,6 +256,8 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
     
     CGContextDrawImage(cgc, CGRect{0,0, fb->Width/(fb->Dpi.X/96), fb->Height/(fb->Dpi.Y/96)}, image);
     CGImageRelease(image);
+    CGColorSpaceRelease(colorSpace);
+    CGDataProviderRelease(dataProvider);
     
     [ctx restoreGraphicsState];