nuclear@2: #include nuclear@2: #import nuclear@0: #import "viewctl.h" nuclear@2: #include "istereo.h" nuclear@0: nuclear@0: @interface ViewController () { nuclear@0: EAGLContext *ctx; nuclear@3: float pixel_scale; nuclear@1: nuclear@1: ADBannerView *ad; nuclear@1: BOOL ad_visible; nuclear@0: } nuclear@0: nuclear@1: nuclear@1: - (void)create_ad; nuclear@2: - (void)show_ad; nuclear@2: - (void)hide_ad; nuclear@1: nuclear@1: - (void)init_gl; nuclear@1: - (void)destroy_gl; nuclear@0: @end nuclear@0: nuclear@0: @implementation ViewController nuclear@0: nuclear@0: - (void)viewDidLoad nuclear@0: { nuclear@0: [super viewDidLoad]; nuclear@0: nuclear@3: nuclear@0: self->ctx = [[EAGLContext alloc] initWithAPI: kEAGLRenderingAPIOpenGLES2]; nuclear@0: if(!self->ctx) { nuclear@0: NSLog(@"Failed to create OpenGL ES 2.0 context"); nuclear@0: } nuclear@0: nuclear@0: GLKView *view = (GLKView*)self.view; nuclear@0: view.context = self->ctx; nuclear@0: view.drawableDepthFormat = GLKViewDrawableDepthFormat24; nuclear@0: nuclear@3: if([view respondsToSelector: NSSelectorFromString(@"contentScaleFactor")]) { nuclear@3: pixel_scale = [[UIScreen mainScreen] scale]; nuclear@3: view.contentScaleFactor = pixel_scale; nuclear@3: printf("pixel scale: %g\n", pixel_scale); nuclear@3: } else { nuclear@3: pixel_scale = 1.0f; nuclear@3: } nuclear@3: nuclear@1: [self create_ad]; nuclear@1: nuclear@1: [self init_gl]; nuclear@0: } nuclear@0: nuclear@0: - (void)dealloc nuclear@0: { nuclear@1: [self destroy_gl]; nuclear@0: nuclear@0: if([EAGLContext currentContext] == self->ctx) { nuclear@0: [EAGLContext setCurrentContext: nil]; nuclear@0: } nuclear@0: } nuclear@0: nuclear@0: - (void)didReceiveMemoryWarning nuclear@0: { nuclear@0: [super didReceiveMemoryWarning]; nuclear@0: nuclear@0: if([self isViewLoaded] && ([[self view] window] == nil)) { nuclear@0: self.view = nil; nuclear@0: nuclear@1: [self destroy_gl]; nuclear@0: nuclear@0: if([EAGLContext currentContext] == self->ctx) { nuclear@0: [EAGLContext setCurrentContext: nil]; nuclear@0: } nuclear@0: self->ctx = nil; nuclear@0: } nuclear@0: nuclear@0: // Dispose of any resources that can be recreated. nuclear@0: } nuclear@0: nuclear@0: - (BOOL)prefersStatusBarHidden nuclear@0: { nuclear@0: return YES; nuclear@0: } nuclear@0: nuclear@4: - (BOOL)shouldAutorotate nuclear@4: { nuclear@4: return YES; nuclear@4: } nuclear@4: nuclear@4: - (UIInterfaceOrientationMask)supportedInterfaceOrientations nuclear@4: { nuclear@4: return UIInterfaceOrientationMaskLandscape; nuclear@4: //return UIInterfaceOrientationMaskAll; nuclear@4: } nuclear@4: nuclear@1: - (void)create_ad nuclear@1: { nuclear@1: ad = [[ADBannerView alloc] initWithAdType: ADAdTypeBanner]; nuclear@1: [ad setAutoresizingMask: UIViewAutoresizingFlexibleWidth]; nuclear@2: ad_visible = YES; nuclear@2: [self hide_ad]; nuclear@1: [self.view addSubview: ad]; nuclear@1: ad.delegate = self; nuclear@1: } nuclear@1: nuclear@2: - (void)show_ad nuclear@1: { nuclear@1: if(!ad_visible) { nuclear@1: CGRect rect = ad.frame; nuclear@1: rect.origin.y = 0; nuclear@1: ad.frame = rect; nuclear@1: ad_visible = YES; nuclear@1: } nuclear@1: } nuclear@1: nuclear@2: - (void)hide_ad nuclear@2: { nuclear@2: if(ad_visible) { nuclear@2: ad.frame = CGRectOffset(ad.frame, 0, -ad.frame.size.height); nuclear@2: ad_visible = NO; nuclear@2: } nuclear@2: } nuclear@2: nuclear@2: - (void)init_gl nuclear@2: { nuclear@2: [EAGLContext setCurrentContext: self->ctx]; nuclear@2: nuclear@2: if(init() == -1) { nuclear@2: NSLog(@"app initialization failed"); nuclear@2: exit(0); nuclear@2: } nuclear@2: } nuclear@2: nuclear@2: - (void)destroy_gl nuclear@2: { nuclear@2: cleanup(); nuclear@2: [EAGLContext setCurrentContext: self->ctx]; nuclear@2: } nuclear@2: nuclear@2: nuclear@2: - (void)glkView: (GLKView*)view drawInRect: (CGRect)rect nuclear@2: { nuclear@2: redraw(); nuclear@2: } nuclear@2: nuclear@2: - (void)viewDidLayoutSubviews nuclear@2: { nuclear@2: CGRect rect = self.view.frame; nuclear@3: int xsz = rect.size.width * pixel_scale; nuclear@3: int ysz = rect.size.height * pixel_scale; nuclear@3: reshape(xsz, ysz); nuclear@3: printf("viewport %dx%d (scale: %g)\n", xsz, ysz, pixel_scale); nuclear@2: } nuclear@2: nuclear@2: // ADBannerDelegate functions nuclear@2: nuclear@2: - (void)bannerViewDidLoadAd: (ADBannerView*)banner nuclear@2: { nuclear@2: [self show_ad]; nuclear@2: } nuclear@2: nuclear@1: - (void)bannerView: (ADBannerView*)banner didFailToReceiveAdWithError: (NSError*)error nuclear@1: { nuclear@2: [self hide_ad]; nuclear@1: nuclear@1: NSLog(@"Failed to retrieve ad"); nuclear@1: } nuclear@1: nuclear@1: nuclear@0: @end /* implementation ViewController */