29 #include "../../SDL_internal.h"
31 #if SDL_VIDEO_DRIVER_UIKIT && (SDL_VIDEO_RENDER_METAL || SDL_VIDEO_VULKAN)
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;
83 if ([view isKindOfClass:[SDL_uikitmetalview
class]]) {
84 return (SDL_uikitmetalview *)view;
94 if ([
data.uiwindow.screen respondsToSelector:
@selector(nativeScale)]) {
102 SDL_uikitmetalview *metalview
103 = [[SDL_uikitmetalview alloc] initWithFrame:view.frame
105 [metalview setSDLWindow:window];
116 SDL_uikitmetalview* metalview = [view viewWithTag:METALVIEW_TAG];
118 CAMetalLayer *
layer = (CAMetalLayer*)metalview.layer;
121 *
w =
layer.drawableSize.width;
124 *
h =
layer.drawableSize.height;