29 #include "../../SDL_internal.h"
31 #if SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_VULKAN || SDL_VIDEO_METAL)
33 #import "../SDL_sysvideo.h"
39 @implementation SDL_uikitmetalview
44 return [CAMetalLayer class];
47 - (instancetype)initWithFrame:(CGRect)frame
50 if ((
self = [super initWithFrame:
frame])) {
51 self.tag = METALVIEW_TAG;
52 self.layer.contentsScale =
scale;
53 [
self updateDrawableSize];
60 - (
void)layoutSubviews
62 [
super layoutSubviews];
63 [
self updateDrawableSize];
66 - (
void)updateDrawableSize
68 CGSize
size =
self.bounds.size;
69 size.width *=
self.layer.contentsScale;
70 size.height *=
self.layer.contentsScale;
71 ((CAMetalLayer *)
self.
layer).drawableSize =
size;
81 SDL_uikitmetalview *metalview;
89 if ([
data.uiwindow.screen respondsToSelector:
@selector(nativeScale)]) {
96 metalview = [[SDL_uikitmetalview alloc] initWithFrame:data.uiwindow.bounds
98 [metalview setSDLWindow:window];
100 return (
void*)CFBridgingRetain(metalview);
106 SDL_uikitmetalview *metalview = CFBridgingRelease(view);
108 if ([metalview isKindOfClass:[SDL_uikitmetalview
class]]) {
109 [metalview setSDLWindow:NULL];
119 SDL_uikitmetalview* metalview = [view viewWithTag:METALVIEW_TAG];
121 CAMetalLayer *
layer = (CAMetalLayer*)metalview.layer;
124 *
w =
layer.drawableSize.width;
127 *
h =
layer.drawableSize.height;