flycast/shell/ios/emulator/EmulatorViewController.mm

139 lines
2.7 KiB
Plaintext

//
// EmulatorViewController.m
// emulator
//
// Created by Karen Tsai (angelXwind) on 2014/3/5.
// Copyright (c) 2014 Karen Tsai (angelXwind). All rights reserved.
//
#import "EmulatorViewController.h"
#import <OpenGLES/ES2/glext.h>
#include "types.h"
#include "profiler/profiler.h"
#include "cfg/cfg.h"
#include "rend/TexCache.h"
#include "hw/maple/maple_devs.h"
#include "hw/maple/maple_if.h"
@interface ViewController () {
}
@property (strong, nonatomic) EAGLContext *context;
@property (strong, nonatomic) GLKBaseEffect *effect;
- (void)setupGL;
- (void)tearDownGL;
- (void)emuThread;
@end
//who has time for headers
extern int screen_width,screen_height;
bool rend_single_frame();
bool gles_init();
extern "C" int reicast_main(int argc, char* argv[]);
@implementation ViewController
-(void)emuThread
{
install_prof_handler(1);
//This looks like the right place, rite?
char text[2]="";
char* prms[2];
prms[0]=text;
reicast_main(1, prms);
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!self.context) {
NSLog(@"Failed to create ES context");
}
GLKView *view = (GLKView *)self.view;
view.context = self.context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
[self setupGL];
if (!gles_init())
die("OPENGL FAILED");
NSThread* myThread = [[NSThread alloc] initWithTarget:self
selector:@selector(emuThread)
object:nil];
[myThread start]; // Actually create the thread
}
- (void)dealloc
{
[self tearDownGL];
if ([EAGLContext currentContext] == self.context) {
[EAGLContext setCurrentContext:nil];
}
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
if ([self isViewLoaded] && ([[self view] window] == nil)) {
self.view = nil;
[self tearDownGL];
if ([EAGLContext currentContext] == self.context) {
[EAGLContext setCurrentContext:nil];
}
self.context = nil;
}
// Dispose of any resources that can be recreated.
}
- (void)setupGL
{
[EAGLContext setCurrentContext:self.context];
}
- (void)tearDownGL
{
[EAGLContext setCurrentContext:self.context];
}
#pragma mark - GLKView and GLKViewController delegate methods
- (void)update
{
}
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
screen_width = view.drawableWidth;
screen_height = view.drawableHeight;
glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
while(!rend_single_frame()) ;
}
@end