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 <UIKit/UIKit.h>
#import <MetalKit/MTKView.h>
#pragma mark - #pragma mark -
#pragma mark OpenVulkanoViewController #pragma mark OpenVulkanoViewController
/** The main view controller for the demo storyboard. */
@interface OpenVulkanoViewController : UIViewController @interface OpenVulkanoViewController : UIViewController
-(void*) makeGraphicsApp; -(void*) makeGraphicsApp;
@end @end
#pragma mark - #pragma mark -
#pragma mark DemoView #pragma mark OpenVulkanoView
/** The Metal-compatibile view for the demo Storyboard. */ @interface OpenVulkanoView : MTKView
@interface DemoView : UIView
@end @end

View File

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