From b3465bcf448ff2e76c93d1a21fc9d07837a67bb5 Mon Sep 17 00:00:00 2001 From: Edouard DUPIN Date: Sun, 7 Apr 2013 23:42:23 +0200 Subject: [PATCH] [DEV] first open GL display on MACOSX ==> simple triangle... --- external/etk | 2 +- sources/MacOs.mk | 8 +- .../ewol/renderer/os/gui.MacOs.AppDelegate.mm | 32 ++--- .../ewol/renderer/os/gui.MacOs.Interface.mm | 114 ++++++++++++++++-- .../ewol/renderer/os/gui.MacOs.OpenglView.h | 19 ++- .../ewol/renderer/os/gui.MacOs.OpenglView.mm | 73 +++-------- 6 files changed, 144 insertions(+), 104 deletions(-) diff --git a/external/etk b/external/etk index 516f0df1..64812713 160000 --- a/external/etk +++ b/external/etk @@ -1 +1 @@ -Subproject commit 516f0df12fa172d39a7de30e2c4eb9ec5275634c +Subproject commit 64812713c7bfa87ab1f3368cf58cca7d6d996007 diff --git a/sources/MacOs.mk b/sources/MacOs.mk index 2fbf4507..7c17ea50 100644 --- a/sources/MacOs.mk +++ b/sources/MacOs.mk @@ -29,7 +29,7 @@ endif LOCAL_C_INCLUDES := LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) -LOCAL_EXPORT_LDLIBS := -framework Cocoa -framework OpenGL +LOCAL_EXPORT_LDLIBS := -framework Cocoa -framework OpenGL -framework QuartzCore -framework AppKit LOCAL_CFLAGS := -Wno-write-strings \ -DEWOL_VERSION_TAG_NAME="\"$(LOCAL_VERSION_TAG)-$(BUILD_DIRECTORY_MODE)\"" \ @@ -44,10 +44,8 @@ LOCAL_SRC_FILES := $(FILE_LIST) LOCAL_SRC_FILES += ewol/renderer/os/gui.MacOs.cpp \ ewol/renderer/os/gui.MacOs.Interface.mm \ - -#DFGSDFGSFDGDSFGSDFG := \ -# ewol/renderer/os/gui.MacOs.AppDelegate.mm \ -# ewol/renderer/os/gui.MacOs.OpenglView.mm + ewol/renderer/os/gui.MacOs.AppDelegate.mm \ + ewol/renderer/os/gui.MacOs.OpenglView.mm # xcode compilation exemple sources : ## basic truchage diff --git a/sources/ewol/renderer/os/gui.MacOs.AppDelegate.mm b/sources/ewol/renderer/os/gui.MacOs.AppDelegate.mm index 353a16c1..60738283 100644 --- a/sources/ewol/renderer/os/gui.MacOs.AppDelegate.mm +++ b/sources/ewol/renderer/os/gui.MacOs.AppDelegate.mm @@ -3,35 +3,21 @@ #import #import - -@implementation MacOsAppDelegate - -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification -{ - // Insert code here to initialize your application -} - -@end - - - -#if 0 - @implementation MacOsAppDelegate @synthesize window=_window; -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +- (BOOL)application:(MacOsAppDelegate *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - OpenglView *view=[[OpenglView alloc]initWithFrame:[[UIScreen mainScreen] bounds]]; + OpenGLView *view=[[OpenGLView alloc]initWithFrame:[[NSScreen mainScreen] bounds]]; // Override point for customization after application launch. [self.window addSubview:view]; [self.window makeKeyAndVisible]; return YES; } -- (void)applicationWillResignActive:(UIApplication *)application +- (void)applicationWillResignActive:(MacOsAppDelegate *)application { /* Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. @@ -39,7 +25,7 @@ */ } -- (void)applicationDidEnterBackground:(UIApplication *)application +- (void)applicationDidEnterBackground:(MacOsAppDelegate *)application { /* Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. @@ -47,21 +33,21 @@ */ } -- (void)applicationWillEnterForeground:(UIApplication *)application +- (void)applicationWillEnterForeground:(MacOsAppDelegate *)application { /* Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. */ } -- (void)applicationDidBecomeActive:(UIApplication *)application +- (void)applicationDidBecomeActive:(MacOsAppDelegate *)application { /* Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. */ } -- (void)applicationWillTerminate:(UIApplication *)application +- (void)applicationWillTerminate:(MacOsAppDelegate *)application { /* Called when the application is about to terminate. @@ -77,4 +63,6 @@ } @end -#endif + + + diff --git a/sources/ewol/renderer/os/gui.MacOs.Interface.mm b/sources/ewol/renderer/os/gui.MacOs.Interface.mm index d6854d2b..c05fcae6 100644 --- a/sources/ewol/renderer/os/gui.MacOs.Interface.mm +++ b/sources/ewol/renderer/os/gui.MacOs.Interface.mm @@ -1,37 +1,135 @@ +/* + +#import +#import +#include + +int mm_main(int argc, const char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} +*/ + + #import - #include "ewol/renderer/os/gui.MacOs.Interface.h" +#include "ewol/renderer/os/gui.MacOs.Interface.h" +#import int mm_main(int argc, const char *argv[]) -//int main(int argc, const char *argv[]) { [NSAutoreleasePool new]; + [NSApplication sharedApplication]; + // set the quit policy and all stadard for Mac [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular]; + + // --------------------------------------------------------------- + // -- basic menu bar creation : + // --------------------------------------------------------------- + // set the basic menu bar (stadard on Mac OSX) id menubar = [[NSMenu new] autorelease]; - id appMenuItem = [[NSMenuItem new] autorelease]; - [menubar addItem:appMenuItem]; + //add an item + id appMenuItem = [[NSMenuItem new] autorelease]; + // add the item to the menu bar: + [menubar addItem:appMenuItem]; + // set the main menu in the menu bar ... [NSApp setMainMenu:menubar]; + id appMenu = [[NSMenu new] autorelease]; id appName = [[NSProcessInfo processInfo] processName]; + // create the label to qui the application : id quitTitle = [@"Quit " stringByAppendingString:appName]; + // create the item to quit the appllication with META+q at shortCut id quitMenuItem = [ [ [NSMenuItem alloc] initWithTitle:quitTitle action:@selector(terminate:) keyEquivalent:@"q"] autorelease]; + // add the item to the menu: [appMenu addItem:quitMenuItem]; + // set the application menu to the main app menu ... [appMenuItem setSubmenu:appMenu]; - id window = [ [ [NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 340, 480) + + // --------------------------------------------------------------- + // -- basic windows creation : + // --------------------------------------------------------------- + // create a windows of size 800/600 + id window = [ [ [NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 800, 600) styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO] autorelease]; - [window cascadeTopLeftFromPoint:NSMakePoint(20,20)]; + // set the windows at a specific position : + [window cascadeTopLeftFromPoint:NSMakePoint(50,50)]; + // set the title [window setTitle:appName]; + // ??? [window makeKeyAndOrderFront:nil]; [NSApp activateIgnoringOtherApps:YES]; + + NSRect window_frame = [window frame]; + + OpenGLView* view=[[OpenGLView alloc]initWithFrame:window_frame]; //NSMakeRect(0, 0, 800, 600)]; + [window setContentView:view]; + [view setAutoresizesSubviews:YES]; + + // Override point for customization after application launch. + //[window addSubview:view]; + //[window addChildWindow:view]; + //[window makeKeyAndVisible]; + + + // start application : [NSApp run]; + // return no error return 0; } -// gcc -framework Cocoa -x objective-c -o testApplDirectMinimal sources/ewol/renderer/os/gui.MacOs.Interface.mm - \ No newline at end of file + + + /* + +NSView* view0 = ...; // a view made with IB +NSView* view1 = ... ;// another view made with IB +NSWindow* window = [self window]; + +NSRect window_frame = [window frame]; + +NSView* cv = [[[NSView alloc] initWithFrame:window_frame] autorelease]; +[window setContentView:cv]; +[cv setAutoresizesSubviews:YES]; + +// add subview so it fits within the contentview frame +{ + NSView* v = view0; + NSRect vframe = [v frame]; + [v setHidden:YES]; + [v setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + + NSView* tmp_superview = [[[NSView alloc] initWithFrame:vframe] autorelease]; + [tmp_superview addSubview:v]; + [tmp_superview setAutoresizesSubviews:YES]; + [tmp_superview setFrame:window_frame]; + + [v removeFromSuperview]; + [cv addSubview:v]; +} + +// add subview so it fits within the contentview frame +{ + NSView* v = view1; + NSRect vframe = [v frame]; + [v setHidden:YES]; + [v setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; + + NSView* tmp_superview = [[[NSView alloc] initWithFrame:vframe] autorelease]; + [tmp_superview addSubview:v]; + [tmp_superview setAutoresizesSubviews:YES]; + [tmp_superview setFrame:window_frame]; + + [v removeFromSuperview]; + [cv addSubview:v]; +} + +[view0 setHidden:NO]; + +*/ diff --git a/sources/ewol/renderer/os/gui.MacOs.OpenglView.h b/sources/ewol/renderer/os/gui.MacOs.OpenglView.h index f639846f..d4a2c586 100644 --- a/sources/ewol/renderer/os/gui.MacOs.OpenglView.h +++ b/sources/ewol/renderer/os/gui.MacOs.OpenglView.h @@ -1,17 +1,12 @@ + #import -#if 0 -#import -#import -@interface OpenglView : UIView { - - EAGLContext *mimContext; - -@private - GLuint framebuffer; - GLuint renderbuffer; + +@interface OpenGLView : NSOpenGLView +{ } -- (void)drawView; +- (void) drawRect: (NSRect) bounds; @end -#endif + + diff --git a/sources/ewol/renderer/os/gui.MacOs.OpenglView.mm b/sources/ewol/renderer/os/gui.MacOs.OpenglView.mm index 48387b64..14d61b5d 100644 --- a/sources/ewol/renderer/os/gui.MacOs.OpenglView.mm +++ b/sources/ewol/renderer/os/gui.MacOs.OpenglView.mm @@ -1,70 +1,31 @@ #import - -#if 0 - -@implementation OpenglView - -+ (Class) layerClass +#include + + + static void drawAnObject (void) { - return [CAEAGLLayer class]; -} - -- (id)initWithFrame:(CGRect)frame -{ - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - - CAEAGLLayer* eaglLayer = (CAEAGLLayer*) super.layer; - eaglLayer.opaque = YES; - - mimContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; - BOOL setContext=[EAGLContext setCurrentContext:mimContext]; - if (!mimContext || !setContext) - { - [self release]; - return nil; - } - - //Lets init and bind render buffer with current context - glGenRenderbuffers(1, &renderbuffer); - glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer); - [mimContext renderbufferStorage:GL_RENDERBUFFER fromDrawable: eaglLayer]; - - //Frame buffer- which is a collection of render buffers and other kind of buffers like depth etc. - glGenFramebuffers(1, &framebuffer); - glBindFramebuffer(GL_FRAMEBUFFER, framebuffer); - glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer); - - //Setting the dimensions of your view area. - glViewport(0, 0, CGRectGetWidth(frame), CGRectGetHeight(frame)); - - [self drawView]; - - + glColor3f(1.0f, 0.85f, 0.35f); + glBegin(GL_TRIANGLES); + { + glVertex3f( 0.0, 0.6, 0.0); + glVertex3f( -0.2, -0.3, 0.0); + glVertex3f( 0.2, -0.3 ,0.0); } - return self; + glEnd(); } -// Only override drawRect: if you perform custom drawing. -// An empty implementation adversely affects performance during animation. -- (void)drawView +@implementation OpenGLView + +-(void) drawRect: (NSRect) bounds { - // Drawing code - glClearColor(1.0f, 0.0f, 1.0f, 1); + glClearColor(0, 0, 0, 0); glClear(GL_COLOR_BUFFER_BIT); - [mimContext presentRenderbuffer:GL_RENDERBUFFER]; + drawAnObject(); + glFlush(); } -- (void)dealloc -{ - [super dealloc]; -} - @end -#endif -