Fix crash on background on iOS
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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]; }
|
||||||
|
|||||||
Reference in New Issue
Block a user