Browse Source
Merge pull request #5082 from AvaloniaUI/fixes/osx-resize-flickering
Fixes/osx resize flickering
pull/5094/head
Nikita Tsukanov
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
9 additions and
1 deletions
-
native/Avalonia.Native/src/OSX/rendertarget.mm
|
|
|
@ -2,6 +2,7 @@ |
|
|
|
#include "rendertarget.h" |
|
|
|
#import <IOSurface/IOSurface.h> |
|
|
|
#import <IOSurface/IOSurfaceObjC.h> |
|
|
|
#import <QuartzCore/QuartzCore.h> |
|
|
|
|
|
|
|
#include <OpenGL/CGLIOSurface.h> |
|
|
|
#include <OpenGL/OpenGL.h> |
|
|
|
@ -143,13 +144,17 @@ static IAvnGlSurfaceRenderTarget* CreateGlRenderTarget(IOSurfaceRenderTarget* ta |
|
|
|
return _layer; |
|
|
|
} |
|
|
|
|
|
|
|
- (void)resize:(AvnPixelSize)size withScale: (float) scale;{ |
|
|
|
- (void)resize:(AvnPixelSize)size withScale: (float) scale{ |
|
|
|
@synchronized (lock) { |
|
|
|
if(surface == nil |
|
|
|
|| surface->size.Width != size.Width |
|
|
|
|| surface->size.Height != size.Height |
|
|
|
|| surface->scale != scale) |
|
|
|
{ |
|
|
|
surface = [[IOSurfaceHolder alloc] initWithSize:size withScale:scale withOpenGlContext:_glContext.getRaw()]; |
|
|
|
|
|
|
|
[self updateLayer]; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -159,12 +164,15 @@ static IAvnGlSurfaceRenderTarget* CreateGlRenderTarget(IOSurfaceRenderTarget* ta |
|
|
|
@synchronized (lock) { |
|
|
|
if(_layer == nil) |
|
|
|
return; |
|
|
|
[CATransaction begin]; |
|
|
|
[_layer setContents: nil]; |
|
|
|
if(surface != nil) |
|
|
|
{ |
|
|
|
[_layer setContentsScale: surface->scale]; |
|
|
|
[_layer setContents: (__bridge IOSurface*) surface->surface]; |
|
|
|
} |
|
|
|
[CATransaction commit]; |
|
|
|
[CATransaction flush]; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
|