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