diff options
author | Vegard Storheil Eriksen <zyp@jvnv.net> | 2010-06-13 18:47:00 +0200 |
---|---|---|
committer | Vegard Storheil Eriksen <zyp@jvnv.net> | 2010-06-13 18:47:00 +0200 |
commit | c91de71d69265a0d619b25d0c04ae1adb0785f33 (patch) | |
tree | 83176a79b8ed2d83f962758972e5a37a69d8259d | |
parent | a6417af853180b5568c7f96c903057dd2c454204 (diff) |
-rw-r--r-- | SConstruct | 10 | ||||
-rw-r--r-- | SDLMain.h | 11 | ||||
-rw-r--r-- | SDLMain.m | 384 | ||||
-rwxr-xr-x | assimp.cpp | 2 | ||||
-rwxr-xr-x | foo.cpp | 2 | ||||
-rw-r--r-- | pattern.cpp | 2 | ||||
-rw-r--r-- | pattern.h | 2 | ||||
-rwxr-xr-x | texture.cpp | 29 | ||||
-rwxr-xr-x | texture.h | 14 | ||||
-rwxr-xr-x | texturepng.cpp | 45 | ||||
-rwxr-xr-x | texturepng.h | 8 | ||||
-rwxr-xr-x | texturesdl.cpp | 17 | ||||
-rwxr-xr-x | texturesdl.h | 8 |
13 files changed, 11 insertions, 523 deletions
@@ -2,16 +2,22 @@ env = Environment( LIBS = ['ARgsub_lite', 'ARvideo', 'AR', 'assimp'], ) -common_sources = ['application.cpp', 'videoprovider.cpp', 'hcoord.cpp', 'pattern.cpp', 'texture.cpp', 'texturesdl.cpp'] +common_sources = ['application.cpp', 'videoprovider.cpp', 'hcoord.cpp', 'pattern.cpp'] if env['PLATFORM'] == 'darwin': env.Append(CPPFLAGS = '-m32') env.Append(LINKFLAGS = '-m32') + env.Append(CPPPATH = ['.']) env.Append(FRAMEWORKS = ['SDL', 'SDL_image', 'Cocoa', 'OpenGL', 'QuickTime', 'Carbon', 'AppKit']) - common_sources.append('SDLMain.m') else: env.Append(LIBS = ['GL', 'GLU', 'SDL', 'SDL_image', 'SDLmain', 'gstreamer-0.10']) +Export('env') + +env.SConscript('wriggle/SConscript') +env.Append(LIBS = ['wriggle']) +env.Append(LIBPATH = ['wriggle']) + env.Program('foo', ['foo.cpp'] + common_sources) env.Program('assimp', ['assimp.cpp'] + common_sources) diff --git a/SDLMain.h b/SDLMain.h deleted file mode 100644 index 4683df5..0000000 --- a/SDLMain.h +++ /dev/null @@ -1,11 +0,0 @@ -/* SDLMain.m - main entry point for our Cocoa-ized SDL app - Initial Version: Darrell Walisser <dwaliss1@purdue.edu> - Non-NIB-Code & other changes: Max Horn <max@quendi.de> - - Feel free to customize this file to suit your needs -*/ - -#import <Cocoa/Cocoa.h> - -@interface SDLMain : NSObject -@end diff --git a/SDLMain.m b/SDLMain.m deleted file mode 100644 index 122fcc8..0000000 --- a/SDLMain.m +++ /dev/null @@ -1,384 +0,0 @@ -/* SDLMain.m - main entry point for our Cocoa-ized SDL app - Initial Version: Darrell Walisser <dwaliss1@purdue.edu> - Non-NIB-Code & other changes: Max Horn <max@quendi.de> - - Feel free to customize this file to suit your needs -*/ - -#import <SDL/SDL.h> -#import "SDLMain.h" -#import <sys/param.h> /* for MAXPATHLEN */ -#import <unistd.h> - -/* For some reaon, Apple removed setAppleMenu from the headers in 10.4, - but the method still is there and works. To avoid warnings, we declare - it ourselves here. */ -@interface NSApplication(SDL_Missing_Methods) -- (void)setAppleMenu:(NSMenu *)menu; -@end - -/* Use this flag to determine whether we use SDLMain.nib or not */ -#define SDL_USE_NIB_FILE 0 - -/* Use this flag to determine whether we use CPS (docking) or not */ -#define SDL_USE_CPS 1 -#ifdef SDL_USE_CPS -/* Portions of CPS.h */ -typedef struct CPSProcessSerNum -{ - UInt32 lo; - UInt32 hi; -} CPSProcessSerNum; - -extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn); -extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5); -extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn); - -#endif /* SDL_USE_CPS */ - -static int gArgc; -static char **gArgv; -static BOOL gFinderLaunch; -static BOOL gCalledAppMainline = FALSE; - -static NSString *getApplicationName(void) -{ - NSDictionary *dict; - NSString *appName = 0; - - /* Determine the application name */ - dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle()); - if (dict) - appName = [dict objectForKey: @"CFBundleName"]; - - if (![appName length]) - appName = [[NSProcessInfo processInfo] processName]; - - return appName; -} - -#if SDL_USE_NIB_FILE -/* A helper category for NSString */ -@interface NSString (ReplaceSubString) -- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString; -@end -#endif - -@interface SDLApplication : NSApplication -@end - -@implementation SDLApplication -/* Invoked from the Quit menu item */ -- (void)terminate:(id)sender -{ - /* Post a SDL_QUIT event */ - SDL_Event event; - event.type = SDL_QUIT; - SDL_PushEvent(&event); -} -@end - -/* The main class of the application, the application's delegate */ -@implementation SDLMain - -/* Set the working directory to the .app's parent directory */ -- (void) setupWorkingDirectory:(BOOL)shouldChdir -{ - if (shouldChdir) - { - char parentdir[MAXPATHLEN]; - CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle()); - CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url); - if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN)) { - assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */ - } - CFRelease(url); - CFRelease(url2); - } - -} - -#if SDL_USE_NIB_FILE - -/* Fix menu to contain the real app name instead of "SDL App" */ -- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName -{ - NSRange aRange; - NSEnumerator *enumerator; - NSMenuItem *menuItem; - - aRange = [[aMenu title] rangeOfString:@"SDL App"]; - if (aRange.length != 0) - [aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]]; - - enumerator = [[aMenu itemArray] objectEnumerator]; - while ((menuItem = [enumerator nextObject])) - { - aRange = [[menuItem title] rangeOfString:@"SDL App"]; - if (aRange.length != 0) - [menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]]; - if ([menuItem hasSubmenu]) - [self fixMenu:[menuItem submenu] withAppName:appName]; - } - [ aMenu sizeToFit ]; -} - -#else - -static void setApplicationMenu(void) -{ - /* warning: this code is very odd */ - NSMenu *appleMenu; - NSMenuItem *menuItem; - NSString *title; - NSString *appName; - - appName = getApplicationName(); - appleMenu = [[NSMenu alloc] initWithTitle:@""]; - - /* Add menu items */ - title = [@"About " stringByAppendingString:appName]; - [appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""]; - - [appleMenu addItem:[NSMenuItem separatorItem]]; - - title = [@"Hide " stringByAppendingString:appName]; - [appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"]; - - menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"]; - [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)]; - - [appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""]; - - [appleMenu addItem:[NSMenuItem separatorItem]]; - - title = [@"Quit " stringByAppendingString:appName]; - [appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"]; - - - /* Put menu into the menubar */ - menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; - [menuItem setSubmenu:appleMenu]; - [[NSApp mainMenu] addItem:menuItem]; - - /* Tell the application object that this is now the application menu */ - [NSApp setAppleMenu:appleMenu]; - - /* Finally give up our references to the objects */ - [appleMenu release]; - [menuItem release]; -} - -/* Create a window menu */ -static void setupWindowMenu(void) -{ - NSMenu *windowMenu; - NSMenuItem *windowMenuItem; - NSMenuItem *menuItem; - - windowMenu = [[NSMenu alloc] initWithTitle:@"Window"]; - - /* "Minimize" item */ - menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; - [windowMenu addItem:menuItem]; - [menuItem release]; - - /* Put menu into the menubar */ - windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""]; - [windowMenuItem setSubmenu:windowMenu]; - [[NSApp mainMenu] addItem:windowMenuItem]; - - /* Tell the application object that this is now the window menu */ - [NSApp setWindowsMenu:windowMenu]; - - /* Finally give up our references to the objects */ - [windowMenu release]; - [windowMenuItem release]; -} - -/* Replacement for NSApplicationMain */ -static void CustomApplicationMain (int argc, char **argv) -{ - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - SDLMain *sdlMain; - - /* Ensure the application object is initialised */ - [SDLApplication sharedApplication]; - -#ifdef SDL_USE_CPS - { - CPSProcessSerNum PSN; - /* Tell the dock about us */ - if (!CPSGetCurrentProcess(&PSN)) - if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103)) - if (!CPSSetFrontProcess(&PSN)) - [SDLApplication sharedApplication]; - } -#endif /* SDL_USE_CPS */ - - /* Set up the menubar */ - [NSApp setMainMenu:[[NSMenu alloc] init]]; - setApplicationMenu(); - setupWindowMenu(); - - /* Create SDLMain and make it the app delegate */ - sdlMain = [[SDLMain alloc] init]; - [NSApp setDelegate:sdlMain]; - - /* Start the main event loop */ - [NSApp run]; - - [sdlMain release]; - [pool release]; -} - -#endif - - -/* - * Catch document open requests...this lets us notice files when the app - * was launched by double-clicking a document, or when a document was - * dragged/dropped on the app's icon. You need to have a - * CFBundleDocumentsType section in your Info.plist to get this message, - * apparently. - * - * Files are added to gArgv, so to the app, they'll look like command line - * arguments. Previously, apps launched from the finder had nothing but - * an argv[0]. - * - * This message may be received multiple times to open several docs on launch. - * - * This message is ignored once the app's mainline has been called. - */ -- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename -{ - const char *temparg; - size_t arglen; - char *arg; - char **newargv; - - if (!gFinderLaunch) /* MacOS is passing command line args. */ - return FALSE; - - if (gCalledAppMainline) /* app has started, ignore this document. */ - return FALSE; - - temparg = [filename UTF8String]; - arglen = SDL_strlen(temparg) + 1; - arg = (char *) SDL_malloc(arglen); - if (arg == NULL) - return FALSE; - - newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2)); - if (newargv == NULL) - { - SDL_free(arg); - return FALSE; - } - gArgv = newargv; - - SDL_strlcpy(arg, temparg, arglen); - gArgv[gArgc++] = arg; - gArgv[gArgc] = NULL; - return TRUE; -} - - -/* Called when the internal event loop has just started running */ -- (void) applicationDidFinishLaunching: (NSNotification *) note -{ - int status; - - /* Set the working directory to the .app's parent directory */ - [self setupWorkingDirectory:gFinderLaunch]; - -#if SDL_USE_NIB_FILE - /* Set the main menu to contain the real app name instead of "SDL App" */ - [self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()]; -#endif - - /* Hand off to main application code */ - gCalledAppMainline = TRUE; - status = SDL_main (gArgc, gArgv); - - /* We're done, thank you for playing */ - exit(status); -} -@end - - -@implementation NSString (ReplaceSubString) - -- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString -{ - unsigned int bufferSize; - unsigned int selfLen = [self length]; - unsigned int aStringLen = [aString length]; - unichar *buffer; - NSRange localRange; - NSString *result; - - bufferSize = selfLen + aStringLen - aRange.length; - buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar)); - - /* Get first part into buffer */ - localRange.location = 0; - localRange.length = aRange.location; - [self getCharacters:buffer range:localRange]; - - /* Get middle part into buffer */ - localRange.location = 0; - localRange.length = aStringLen; - [aString getCharacters:(buffer+aRange.location) range:localRange]; - - /* Get last part into buffer */ - localRange.location = aRange.location + aRange.length; - localRange.length = selfLen - localRange.location; - [self getCharacters:(buffer+aRange.location+aStringLen) range:localRange]; - - /* Build output string */ - result = [NSString stringWithCharacters:buffer length:bufferSize]; - - NSDeallocateMemoryPages(buffer, bufferSize); - - return result; -} - -@end - - - -#ifdef main -# undef main -#endif - - -/* Main entry point to executable - should *not* be SDL_main! */ -int main (int argc, char **argv) -{ - /* Copy the arguments into a global variable */ - /* This is passed if we are launched by double-clicking */ - if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) { - gArgv = (char **) SDL_malloc(sizeof (char *) * 2); - gArgv[0] = argv[0]; - gArgv[1] = NULL; - gArgc = 1; - gFinderLaunch = YES; - } else { - int i; - gArgc = argc; - gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1)); - for (i = 0; i <= argc; i++) - gArgv[i] = argv[i]; - gFinderLaunch = NO; - } - -#if SDL_USE_NIB_FILE - [SDLApplication poseAsClass:[NSApplication class]]; - NSApplicationMain (argc, argv); -#else - CustomApplicationMain (argc, argv); -#endif - return 0; -} - @@ -6,7 +6,7 @@ #include "hcoord.h" -#include "texturesdl.h" +#include <wriggle/texturesdl.h> #include <assimp/assimp.hpp> #include <assimp/aiScene.h> @@ -1,8 +1,6 @@ #include <stdexcept> #include <iostream> -#include "texturepng.h" - #include "pattern.h" #include "application.h" diff --git a/pattern.cpp b/pattern.cpp index e2a8fcd..650a81b 100644 --- a/pattern.cpp +++ b/pattern.cpp @@ -8,7 +8,7 @@ #include <SDL/SDL.h> #include <SDL/SDL_opengl.h> -#include "texturesdl.h" +#include <wriggle/texturesdl.h> Pattern::Pattern(std::string filename) { patt_width = 25.0; @@ -2,7 +2,7 @@ #define PATTERN_H #include <string> -#include "texture.h" +#include <wriggle/texture.h> #include <AR/ar.h> class Pattern { diff --git a/texture.cpp b/texture.cpp deleted file mode 100755 index 1678a97..0000000 --- a/texture.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __APPLE__ -#include <GL/gl.h> -#include <GL/glut.h> -#else -#include <OpenGL/gl.h> -#include <GLUT/glut.h> -#endif -#include <stdexcept> -#include "texture.h" - -unsigned int Texture::tex() { - return texture; -} - -void Texture::build() { - if(!data) { - throw(std::runtime_error("No texture data")); - } - glGenTextures(1, &texture); - glBindTexture(GL_TEXTURE_2D, texture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST); - //glTexImage2D(GL_TEXTURE_2D, 0, 4, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); - if(byte_per_pixel == 4) { - gluBuild2DMipmaps(GL_TEXTURE_2D, 4, width, height, GL_BGRA, GL_UNSIGNED_BYTE, data); - } else if(byte_per_pixel == 3) { - gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, GL_BGR, GL_UNSIGNED_BYTE, data); - } -} diff --git a/texture.h b/texture.h deleted file mode 100755 index 14e500f..0000000 --- a/texture.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef _TEXTURE_H_ -#define _TEXTURE_H_ -class Texture { - public: - unsigned int tex(); - protected: - void build(); - unsigned char* data; - unsigned int width; - unsigned int height; - unsigned int byte_per_pixel; - unsigned int texture; -}; -#endif // _TEXTURE_H_ diff --git a/texturepng.cpp b/texturepng.cpp deleted file mode 100755 index 19dd4ab..0000000 --- a/texturepng.cpp +++ /dev/null @@ -1,45 +0,0 @@ -#include <iostream> -#include <stdexcept> -#include <png.h> -#include "texturepng.h" - -TexturePNG::TexturePNG(const char* filename) { - FILE *file = fopen(filename, "rb"); - if(!file) { - throw(std::runtime_error("TexturePNG file not found")); - } - png_byte header[8]; - fread(header, 1, 8, file); - if(png_sig_cmp(header, 0, 8)) { - throw(std::runtime_error("Invalid PNG file")); - } - png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0); - if(!png_ptr) { - throw(std::runtime_error("LibPNG Error (png_ptr)")); - } - png_infop info_ptr = png_create_info_struct(png_ptr); - if(!info_ptr) { - throw(std::runtime_error("LibPNG Error (info_ptr)")); - } - png_infop end_info = png_create_info_struct(png_ptr); - if(!end_info) { - throw(std::runtime_error("LibPNG Error (end_info)")); - } - if (setjmp(png_jmpbuf(png_ptr))) { - throw(std::runtime_error("LibPNG Error")); - } - png_init_io(png_ptr, file); - png_set_sig_bytes(png_ptr, 8); - png_read_png(png_ptr, info_ptr, 0, 0); - png_bytep* row_pointers = png_get_rows(png_ptr, info_ptr); - width = png_get_image_width(png_ptr, info_ptr); - height = png_get_image_height(png_ptr, info_ptr); - data = new unsigned char[width * height * 4]; - for(int y = 0; y < height; y++) { - for(int x = 0; x < width * 4; x++) { - data[x + y*width*4] = row_pointers[y][x]; - } - } - build(); - png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); -} diff --git a/texturepng.h b/texturepng.h deleted file mode 100755 index 9236d39..0000000 --- a/texturepng.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _TEXTUREPNG_H_ -#define _TEXTUREPNG_H_ -#include "texture.h" -class TexturePNG : public Texture { - public: - TexturePNG(const char* filename); -}; -#endif // _TEXTUREPNG_H_ diff --git a/texturesdl.cpp b/texturesdl.cpp deleted file mode 100755 index 8e112ef..0000000 --- a/texturesdl.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include <iostream> -#include <stdexcept> -#include <SDL/SDL_image.h> -#include "texturesdl.h" - -TextureSDL::TextureSDL(const char* filename) { - SDL_Surface* image = IMG_Load(filename); - - width = image->w; - height = image->h; - byte_per_pixel = image->format->BytesPerPixel; - data = (unsigned char*)image->pixels; - - build(); - - SDL_FreeSurface(image); -} diff --git a/texturesdl.h b/texturesdl.h deleted file mode 100755 index 6b2eff2..0000000 --- a/texturesdl.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef _TEXTURESDL_H_ -#define _TEXTURESDL_H_ -#include "texture.h" -class TextureSDL : public Texture { - public: - TextureSDL(const char* filename); -}; -#endif // _TEXTURESDL_H_ |