Fix crash on background on iOS

This commit is contained in:
2023-08-09 13:24:11 +02:00
parent e2dfd50a55
commit 7ba39f76d8
2 changed files with 37 additions and 11 deletions

View File

@@ -5,21 +5,19 @@
*/
#import <UIKit/UIKit.h>
#import <MetalKit/MTKView.h>
#pragma mark -
#pragma mark OpenVulkanoViewController
/** The main view controller for the demo storyboard. */
@interface OpenVulkanoViewController : UIViewController
-(void*) makeGraphicsApp;
@end
#pragma mark -
#pragma mark DemoView
#pragma mark OpenVulkanoView
/** The Metal-compatibile view for the demo Storyboard. */
@interface DemoView : UIView
@interface OpenVulkanoView : MTKView
@end

View File

@@ -83,11 +83,38 @@ public:
void Close() override {}
};
@interface MetalViewDelegate : NSObject<MTKViewDelegate>
- (id)initWithGAM:(GraphicsAppManager*)gam;
- (void) mtkView:(MTKView *) view drawableSizeWillChange:(CGSize) size;
- (void) drawInMTKView:(MTKView *) view;
@end
@implementation MetalViewDelegate
{
GraphicsAppManager* manager;
}
- (id)initWithGAM:(GraphicsAppManager*)gam
{
manager = gam;
return self;
}
- (void) mtkView:(MTKView *) view drawableSizeWillChange:(CGSize) size
{}
- (void) drawInMTKView:(MTKView *) view
{
manager->LoopTick();
}
@end
@implementation OpenVulkanoViewController {
CADisplayLink* _displayLink;
GraphicsAppManager* manager;
ViewWindow window;
std::unique_ptr<IGraphicsApp> app;
MetalViewDelegate* mtdelegate;
}
-(void*) makeGraphicsApp {
@@ -117,9 +144,10 @@ public:
manager = new GraphicsAppManager(app.get(), &window);
manager->StartUp();
_displayLink = [CADisplayLink displayLinkWithTarget: self selector: @selector(renderLoop)];
[_displayLink setPreferredFramesPerSecond: 60];
[_displayLink addToRunLoop: NSRunLoop.currentRunLoop forMode: NSDefaultRunLoopMode];
OpenVulkanoView* mtkView = (OpenVulkanoView*)(self.view);
mtdelegate = [[MetalViewDelegate alloc] initWithGAM:manager];
[mtkView setDelegate:mtdelegate];
mtkView.preferredFramesPerSecond = 60;
}
-(void) renderLoop {
@@ -139,9 +167,9 @@ public:
#pragma mark -
#pragma mark DemoView
#pragma mark OpenVulkanoView
@implementation DemoView
@implementation OpenVulkanoView
/** Returns a Metal-compatible layer. */
+(Class) layerClass { return [CAMetalLayer class]; }