diff --git a/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm b/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm index 7896fb4..b4305ad 100644 --- a/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm +++ b/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm @@ -153,10 +153,38 @@ public: manager = new GraphicsAppManager(app.get(), &window); manager->StartUp(); - OpenVulkanoView* mtkView = (OpenVulkanoView*)(self.view); - mtdelegate = [[MetalViewDelegate alloc] initWithGAM:manager win:&window]; - [mtkView setDelegate:mtdelegate]; - mtkView.preferredFramesPerSecond = 60; + if ([self.view isKindOfClass:[MTKView class]]) { + MTKView* mtkView = (MTKView*)(self.view); + mtdelegate = [[MetalViewDelegate alloc] initWithGAM:manager win:&window]; + [mtkView setDelegate:mtdelegate]; + mtkView.preferredFramesPerSecond = 60; + } else { + _displayLink = [CADisplayLink displayLinkWithTarget: self selector: @selector(renderLoop)]; + [_displayLink setPreferredFramesPerSecond: 60]; + [_displayLink addToRunLoop: NSRunLoop.currentRunLoop forMode: NSDefaultRunLoopMode]; + } +} + +-(void) viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + self.view.contentScaleFactor = UIScreen.mainScreen.nativeScale / 1.5f; + + auto size = self.view.bounds.size; + auto sizeX = size.width * self.view.contentScaleFactor; + auto sizeY = size.height * self.view.contentScaleFactor; + manager->OnWindowResize(&window, sizeX, sizeY); +} + +-(void) viewDidDisappear:(BOOL)animated { + [_displayLink release]; + _displayLink = nil; + [super viewDidDisappear:animated]; +} + +-(void) viewDidUnload { + [_displayLink release]; + _displayLink = nil; + [super viewDidUnload]; } -(void) renderLoop {