1*d86ed7fbStbbdev/* 2*d86ed7fbStbbdev Copyright (c) 2005-2020 Intel Corporation 3*d86ed7fbStbbdev 4*d86ed7fbStbbdev Licensed under the Apache License, Version 2.0 (the "License"); 5*d86ed7fbStbbdev you may not use this file except in compliance with the License. 6*d86ed7fbStbbdev You may obtain a copy of the License at 7*d86ed7fbStbbdev 8*d86ed7fbStbbdev http://www.apache.org/licenses/LICENSE-2.0 9*d86ed7fbStbbdev 10*d86ed7fbStbbdev Unless required by applicable law or agreed to in writing, software 11*d86ed7fbStbbdev distributed under the License is distributed on an "AS IS" BASIS, 12*d86ed7fbStbbdev WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*d86ed7fbStbbdev See the License for the specific language governing permissions and 14*d86ed7fbStbbdev limitations under the License. 15*d86ed7fbStbbdev*/ 16*d86ed7fbStbbdev 17*d86ed7fbStbbdev#import <Foundation/Foundation.h> 18*d86ed7fbStbbdev#import "OpenGLView.h" 19*d86ed7fbStbbdev 20*d86ed7fbStbbdev// defined in macvideo.cpp 21*d86ed7fbStbbdevextern char* window_title; 22*d86ed7fbStbbdevextern int cocoa_update; 23*d86ed7fbStbbdevextern int g_sizex, g_sizey; 24*d86ed7fbStbbdevextern unsigned int *g_pImg; 25*d86ed7fbStbbdevvoid on_mouse_func(int x, int y, int k); 26*d86ed7fbStbbdevvoid on_key_func(int x); 27*d86ed7fbStbbdev 28*d86ed7fbStbbdevbool initialized = false; 29*d86ed7fbStbbdev 30*d86ed7fbStbbdev#if TARGET_OS_IPHONE 31*d86ed7fbStbbdev 32*d86ed7fbStbbdev#import "OpenGLES/ES2/gl.h" 33*d86ed7fbStbbdev 34*d86ed7fbStbbdev@implementation OpenGLView 35*d86ed7fbStbbdev 36*d86ed7fbStbbdev@synthesize timer; 37*d86ed7fbStbbdev@synthesize imageRect; 38*d86ed7fbStbbdev 39*d86ed7fbStbbdev- (void)drawRect:(CGRect)start 40*d86ed7fbStbbdev{ 41*d86ed7fbStbbdev if (initialized == false) { 42*d86ed7fbStbbdev NSLog(@"INITIALIZE"); 43*d86ed7fbStbbdev timer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(update_window) userInfo:nil repeats:YES]; 44*d86ed7fbStbbdev imageRect = [[UIScreen mainScreen] bounds]; 45*d86ed7fbStbbdev CGFloat full_height = imageRect.size.height; 46*d86ed7fbStbbdev const float ratio=(float)g_sizex/g_sizey; 47*d86ed7fbStbbdev imageRect.size.height=imageRect.size.width/ratio; 48*d86ed7fbStbbdev imageRect.origin.y=(full_height-imageRect.size.height)/2; 49*d86ed7fbStbbdev initialized = true; 50*d86ed7fbStbbdev } 51*d86ed7fbStbbdev 52*d86ed7fbStbbdev CGColorSpaceRef colourSpace = CGColorSpaceCreateDeviceRGB(); 53*d86ed7fbStbbdev CGDataProviderRef dataProvider = CGDataProviderCreateWithData(NULL, g_pImg, 4*g_sizex*g_sizey, NULL); 54*d86ed7fbStbbdev 55*d86ed7fbStbbdev CGImageRef inputImage = CGImageCreate(g_sizex, g_sizey, 8, 32, g_sizex * 4, colourSpace,(CGBitmapInfo)kCGImageAlphaNoneSkipLast, dataProvider, NULL, NO, kCGRenderingIntentDefault); 56*d86ed7fbStbbdev UIImage *image = [UIImage imageWithCGImage:inputImage]; 57*d86ed7fbStbbdev 58*d86ed7fbStbbdev CGDataProviderRelease(dataProvider); 59*d86ed7fbStbbdev CGColorSpaceRelease(colourSpace); 60*d86ed7fbStbbdev CGImageRelease(inputImage); 61*d86ed7fbStbbdev 62*d86ed7fbStbbdev [image drawInRect:imageRect]; 63*d86ed7fbStbbdev 64*d86ed7fbStbbdev} 65*d86ed7fbStbbdev 66*d86ed7fbStbbdev- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 67*d86ed7fbStbbdev{ 68*d86ed7fbStbbdev CGPoint point = [[touches anyObject] locationInView:self]; 69*d86ed7fbStbbdev const int x = point.x; 70*d86ed7fbStbbdev const int y = point.y; 71*d86ed7fbStbbdev if ( (y-imageRect.origin.y) > 0 && y < (imageRect.origin.y + imageRect.size.height )) 72*d86ed7fbStbbdev on_mouse_func( x*g_sizex/(imageRect.size.width), (y-imageRect.origin.y)*g_sizey/imageRect.size.height,1); 73*d86ed7fbStbbdev [self setNeedsDisplay]; 74*d86ed7fbStbbdev} 75*d86ed7fbStbbdev 76*d86ed7fbStbbdev-(void) update_window{ 77*d86ed7fbStbbdev if( cocoa_update ) [self setNeedsDisplay]; 78*d86ed7fbStbbdev} 79*d86ed7fbStbbdev 80*d86ed7fbStbbdev@end 81*d86ed7fbStbbdev 82*d86ed7fbStbbdev#elif TARGET_OS_MAC 83*d86ed7fbStbbdev 84*d86ed7fbStbbdev#import <OpenGL/gl.h> 85*d86ed7fbStbbdev 86*d86ed7fbStbbdev@implementation OpenGLView 87*d86ed7fbStbbdev 88*d86ed7fbStbbdev@synthesize timer; 89*d86ed7fbStbbdev 90*d86ed7fbStbbdev- (void) drawRect:(NSRect)start 91*d86ed7fbStbbdev{ 92*d86ed7fbStbbdev if (initialized == false) { 93*d86ed7fbStbbdev NSLog(@"INITIALIZE"); 94*d86ed7fbStbbdev timer = [NSTimer scheduledTimerWithTimeInterval:0.03 target:self selector:@selector(update_window) userInfo:nil repeats:YES]; 95*d86ed7fbStbbdev initialized = true; 96*d86ed7fbStbbdev } 97*d86ed7fbStbbdev glWindowPos2i(0, (int)self.visibleRect.size.height); 98*d86ed7fbStbbdev glPixelZoom( (float)self.visibleRect.size.width /(float)g_sizex, 99*d86ed7fbStbbdev -(float)self.visibleRect.size.height/(float)g_sizey); 100*d86ed7fbStbbdev glDrawPixels(g_sizex, g_sizey, GL_BGRA_EXT, GL_UNSIGNED_INT_8_8_8_8_REV, g_pImg); 101*d86ed7fbStbbdev glFlush(); 102*d86ed7fbStbbdev} 103*d86ed7fbStbbdev 104*d86ed7fbStbbdev-(void) update_window{ 105*d86ed7fbStbbdev if( cocoa_update ) [self setNeedsDisplay:YES]; 106*d86ed7fbStbbdev if( window_title ) [self.window setTitle:[NSString stringWithFormat:@"%s", window_title]]; 107*d86ed7fbStbbdev} 108*d86ed7fbStbbdev 109*d86ed7fbStbbdev-(void) keyDown:(NSEvent *)theEvent{ 110*d86ed7fbStbbdev on_key_func([theEvent.characters characterAtIndex:0]); 111*d86ed7fbStbbdev} 112*d86ed7fbStbbdev 113*d86ed7fbStbbdev-(void) mouseDown:(NSEvent *)theEvent{ 114*d86ed7fbStbbdev // mouse event for seismic and fractal 115*d86ed7fbStbbdev NSPoint point= theEvent.locationInWindow; 116*d86ed7fbStbbdev const int x = (int)point.x; 117*d86ed7fbStbbdev const int y = (int)point.y; 118*d86ed7fbStbbdev NSRect rect = self.visibleRect; 119*d86ed7fbStbbdev on_mouse_func(x*g_sizex/(int)rect.size.width,((int)rect.size.height-y)*g_sizey/(int)rect.size.height,1); 120*d86ed7fbStbbdev [self setNeedsDisplay:YES]; 121*d86ed7fbStbbdev} 122*d86ed7fbStbbdev 123*d86ed7fbStbbdev- (BOOL) acceptsFirstResponder 124*d86ed7fbStbbdev{ 125*d86ed7fbStbbdev return YES; 126*d86ed7fbStbbdev} 127*d86ed7fbStbbdev 128*d86ed7fbStbbdev- (void) rightMouseDown:(NSEvent *)theEvent 129*d86ed7fbStbbdev{ 130*d86ed7fbStbbdev return; 131*d86ed7fbStbbdev} 132*d86ed7fbStbbdev 133*d86ed7fbStbbdev-(void) viewDidEndLiveResize 134*d86ed7fbStbbdev{ 135*d86ed7fbStbbdev NSRect rect = self.visibleRect; 136*d86ed7fbStbbdev const int x=(int)rect.size.width; 137*d86ed7fbStbbdev const int y=(int)rect.size.height; 138*d86ed7fbStbbdev [self.window setTitle:[NSString stringWithFormat:@"X=%d Y=%d", x,y]]; 139*d86ed7fbStbbdev} 140*d86ed7fbStbbdev 141*d86ed7fbStbbdev@end 142*d86ed7fbStbbdev 143*d86ed7fbStbbdev#endif 144