1- #import " BasicOpenGLView.h"
1+ #import < kore3/backend/ BasicOpenGLView.h>
22
33#include < kore3/input/keyboard.h>
44#include < kore3/input/mouse.h>
55#include < kore3/input/pen.h>
66#include < kore3/system.h>
77
88#ifdef KORE_METAL
9+ #import < AppKit/NSWindow.h>
10+ #import < AppKit/NSApplication.h>
11+ #import < AppKit/NSText.h>
12+
913// #include <kore3/graphics5/graphics.h>
1014#endif
1115
@@ -404,6 +408,8 @@ - (void)prepareOpenGL {
404408- (void )update { // window resizes, moves and display changes (resize, depth and display config change)
405409#ifdef KORE_OPENGL
406410 [super update ];
411+ #else
412+ [self updateDrawableSize ];
407413#endif
408414}
409415
@@ -418,24 +424,70 @@ - (id)initWithFrame:(NSRect)frameRect {
418424 return self;
419425}
420426#else
427+ - (void )updateDrawableSize { // This is the high DPI version of resize
428+ CAMetalLayer *metalLayer = (CAMetalLayer *)self.layer ;
429+ NSSize size = self.bounds .size ;
430+ NSSize backingSize = size;
421431
422- static CAMetalLayer *metalLayer = NULL ;
432+ backingSize = [self convertSizeToBacking: size];
433+
434+ metalLayer.contentsScale = backingSize.height / size.height ;
435+ metalLayer.drawableSize = NSSizeToCGSize (backingSize);
436+ }
423437
424438- (id )initWithFrame : (NSRect )frameRect {
425439 self = [super initWithFrame: frameRect];
426440
427- metalLayer = (CAMetalLayer *)self.layer ;
441+ if (self->device == nil ) {
442+ self->device = MTLCreateSystemDefaultDevice ();
443+ }
444+
445+ self.wantsLayer = YES ;
446+ self.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
428447
429- // metalLayer.device = device;
448+ CAMetalLayer * metalLayer = (CAMetalLayer *)self.layer ;
449+ metalLayer.device = self->device ;
430450 metalLayer.pixelFormat = MTLPixelFormatBGRA8Unorm ;
431451 metalLayer.framebufferOnly = NO ;
432452 // metalLayer.presentsWithTransaction = YES;
433453
434454 metalLayer.opaque = YES ;
435455 metalLayer.backgroundColor = nil ;
436456
457+ [self updateDrawableSize ];
437458 return self;
438459}
460+
461+ + (Class )layerClass {
462+ return [CAMetalLayer class ];
463+ }
464+
465+ - (void )setBounds : (NSRect )bounds {
466+ [super setBounds: bounds];
467+ [self updateDrawableSize ];
468+ }
469+
470+ - (BOOL )wantsUpdateLayer {
471+ return YES ;
472+ }
473+
474+ - (CALayer *)makeBackingLayer {
475+ return [CAMetalLayer layer ];
476+ }
477+
478+ - (void )viewDidChangeBackingProperties {
479+ [super viewDidChangeBackingProperties ];
480+ [self updateDrawableSize ];
481+ }
482+
483+ - (void )setFrame : (NSRect )frame {
484+ [super setFrame: frame];
485+ [self updateDrawableSize ];
486+ }
487+
488+ - (CAMetalLayer *)metalLayer {
489+ return (CAMetalLayer *)self.layer ;
490+ }
439491#endif
440492
441493- (BOOL )acceptsFirstResponder {
@@ -454,12 +506,6 @@ - (void)resize:(NSSize)size {
454506 [self setFrameSize: size];
455507}
456508
457- #ifdef KORE_METAL
458- - (CAMetalLayer *)metalLayer {
459- return (CAMetalLayer *)self.layer ;
460- }
461- #endif
462-
463509@end
464510
465511void kore_copy_to_clipboard (const char *text) {
0 commit comments