diff --git a/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.h b/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.h index 1174682..fec17bf 100644 --- a/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.h +++ b/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.h @@ -5,21 +5,19 @@ */ #import - +#import #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 diff --git a/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm b/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm index 08e3fb3..458b24a 100644 --- a/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm +++ b/openVulkanoCpp/Host/iOS/OpenVulkanoViewController.mm @@ -83,11 +83,38 @@ public: void Close() override {} }; +@interface MetalViewDelegate : NSObject +- (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 app; + MetalViewDelegate* mtdelegate; } -(void*) makeGraphicsApp { @@ -116,10 +143,11 @@ public: app = std::unique_ptr(appPtr); 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]; }