From 66de02a12e944cedd8ad02f8404527e2f432d3c3 Mon Sep 17 00:00:00 2001 From: nadro Date: Wed, 1 May 2013 17:06:23 +0000 Subject: [PATCH] - Added official example for iOS (both iPhone and iPad devices are supported). git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@4516 dfc29bdd-3216-0410-991c-e03cc46cb475 --- examples/17.HelloWorld_Mobile/main.cpp | 174 +++++++++++-- media/sydney.bmp | Bin 60522 -> 132150 bytes source/Irrlicht/iOS/Interface_iPad.xib | 130 ++++++++++ source/Irrlicht/iOS/Interface_iPhone.xib | 131 ++++++++++ source/Irrlicht/iOS/example-info.plist | 48 ++++ .../iOS/iOS.xcodeproj/project.pbxproj | 231 ++++++++++++++++++ 6 files changed, 698 insertions(+), 16 deletions(-) create mode 100644 source/Irrlicht/iOS/Interface_iPad.xib create mode 100644 source/Irrlicht/iOS/Interface_iPhone.xib create mode 100644 source/Irrlicht/iOS/example-info.plist diff --git a/examples/17.HelloWorld_Mobile/main.cpp b/examples/17.HelloWorld_Mobile/main.cpp index 2631e549..911e117c 100644 --- a/examples/17.HelloWorld_Mobile/main.cpp +++ b/examples/17.HelloWorld_Mobile/main.cpp @@ -7,8 +7,11 @@ #include -#if defined ( _IRR_WINDOWS_ ) +#ifdef _IRR_WINDOWS_ #include +#elif defined(_IRR_IPHONE_PLATFORM_) + #import + #import #endif using namespace irr; @@ -20,6 +23,19 @@ using namespace gui; #pragma comment(lib, "Irrlicht.lib") + +#ifdef _IRR_IPHONE_PLATFORM_ +@interface AppDelegate : UIResponder +{ + UIWindow* window; + IrrlichtDevice* device; +} + +@property (strong, nonatomic) UIWindow *window; + +@end +#endif + class EventReceiver_basic : public IEventReceiver { private: @@ -108,18 +124,27 @@ public: */ IrrlichtDevice *startup() { - //E_DRIVER_TYPE driverType = EDT_BURNINGSVIDEO; - E_DRIVER_TYPE driverType = EDT_OPENGL; - // create device IrrlichtDevice *device = 0; + +#ifdef _IRR_IPHONE_PLATFORM_ + AppDelegate* delegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; -#if defined (_IRR_USE_WINDOWS_CE_DEVICE_) + SIrrlichtCreationParameters param; + param.DriverType = EDT_OGLES2; + param.WindowSize = dimension2d(0,0); + param.WindowId = delegate.window; + param.Bits = 24; + param.ZBufferBits = 16; + param.AntiAlias = 0; + + device = createDeviceEx(param); +#elif defined(_IRR_USE_WINDOWS_CE_DEVICE_) // set to standard mobile fullscreen 240x320 - device = createDevice(driverType, dimension2d(240, 320), 16, true ); + device = createDevice(EDT_OPENGL, dimension2d(240, 320), 16, true ); #else // on PC. use window mode - device = createDevice(driverType, dimension2d(240, 320), 16, false ); + device = createDevice(EDT_OPENGL, dimension2d(240, 320), 16, false ); #endif if ( 0 == device ) return 0; @@ -127,6 +152,12 @@ IrrlichtDevice *startup() IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); + +#ifdef _IRR_IPHONE_PLATFORM_ + stringc mediaPath = "media/"; +#else + stringc mediaPath = "../../media/"; +#endif // set the filesystem relative to the executable #if defined (_IRR_WINDOWS_) @@ -143,10 +174,14 @@ IrrlichtDevice *startup() IGUIStaticText *text = guienv->addStaticText(L"FPS: 25", rect(140,15,200,30), false, false, 0, 100 ); + +#ifndef _IRR_IPHONE_PLATFORM_ + // programmable quit button isn't allowed on iOS. guienv->addButton(core::rect(200,10,238,30), 0, 2, L"Quit"); +#endif // add irrlicht logo - guienv->addImage(driver->getTexture("../../media/irrlichtlogo3.png"), + guienv->addImage(driver->getTexture(mediaPath + "irrlichtlogo3.png"), core::position2d(0,-2)); return device; } @@ -155,8 +190,18 @@ IrrlichtDevice *startup() */ int run ( IrrlichtDevice *device ) { +#ifdef _IRR_IPHONE_PLATFORM_ + while (device) + { + NSAutoreleasePool* tPool = [[NSAutoreleasePool alloc] init]; + while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.002f, TRUE) == kCFRunLoopRunHandledSource); + [tPool release]; + + if(device->run()) +#else while(device->run()) if (device->isWindowActive()) +#endif { device->getVideoDriver()->beginScene(true, true, SColor(0,100,100,100)); device->getSceneManager()->drawAll(); @@ -174,8 +219,15 @@ int run ( IrrlichtDevice *device ) } } +#ifndef _IRR_IPHONE_PLATFORM_ device->drop(); - return 0; +#else + else + break; + } +#endif + + return 1; } /*! @@ -436,22 +488,40 @@ int example_terrain() /* */ +#ifdef _IRR_IPHONE_PLATFORM_ +IrrlichtDevice* example_helloworld() +#else int example_helloworld() +#endif { // create device IrrlichtDevice *device = startup(); if (device == 0) - return 1; // could not create selected driver. + #ifdef _IRR_IPHONE_PLATFORM_ + return 0; + #else + return 1 + #endif IVideoDriver* driver = device->getVideoDriver(); ISceneManager* smgr = device->getSceneManager(); IGUIEnvironment* guienv = device->getGUIEnvironment(); - IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2"); +#ifdef _IRR_IPHONE_PLATFORM_ + stringc mediaPath = "media/"; +#else + stringc mediaPath = "../../media/"; +#endif + + IAnimatedMesh* mesh = smgr->getMesh(mediaPath + "sydney.md2"); if (!mesh) { device->drop(); - return 1; + #ifdef _IRR_IPHONE_PLATFORM_ + return 0; + #else + return 1 + #endif } IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh ); @@ -467,7 +537,7 @@ int example_helloworld() { node->setMaterialFlag(EMF_LIGHTING, false); node->setMD2Animation(scene::EMAT_STAND); - node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") ); + node->setMaterialTexture( 0, driver->getTexture(mediaPath + "sydney.bmp") ); } /* @@ -477,11 +547,14 @@ int example_helloworld() */ smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0)); - EventReceiver_basic receiver(device); +#ifdef _IRR_IPHONE_PLATFORM_ + return device; +#else + EventReceiver_basic receiver(device); device->setEventReceiver(&receiver); return run ( device ); - +#endif } #if defined (_IRR_USE_WINDOWS_CE_DEVICE_) @@ -492,11 +565,80 @@ int example_helloworld() /* */ -int main() +#ifdef _IRR_IPHONE_PLATFORM_ +@implementation AppDelegate + +@synthesize window; + +- (void)applicationDidFinishLaunching:(UIApplication*)application { + // if you need ViewController or you don't want to see warning: + // "Application windows are expected to have a root view controller + // at the end of application launch" create custom UIWindow here + // and apply your ViewController to it in following way: + // window.rootViewController = YourViewController + // it's important to do this step before createDevice method. + device = example_helloworld(); + + [self performSelectorOnMainThread:@selector(applicationUpdate) withObject:nil waitUntilDone:NO]; +} + +- (void) applicationUpdate +{ + run(device); +} + +- (void)applicationDidEnterBackground:(UIApplication *)application +{ + // you should pause rendering here, because some iOS versions, + // doesn't allow to send OpenGL rendering commands, when app + // is inactive. +} + +- (void)applicationWillEnterForeground:(UIApplication *)application +{ + // you should unpause rendering here. +} + +- (void)applicationWillResignActive:(UIApplication *)application +{ + // you should pause rendering here, because some iOS versions, + // doesn't allow to send OpenGL rendering commands, when app + // is inactive. +} + +- (void)applicationDidBecomeActive:(UIApplication *)application +{ + // you should unpause rendering here. +} + +- (void)applicationWillTerminate:(UIApplication *)application +{ + device->drop(); +} + +- (void)dealloc +{ + [window release]; + [super dealloc]; +} + +@end +#endif + +int main(int argc, char *argv[]) +{ +#ifdef _IRR_IPHONE_PLATFORM_ + NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; + int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + [pool release]; + + return retVal; +#else example_helloworld (); example_customscenenode(); //example_terrain(); +#endif } /* diff --git a/media/sydney.bmp b/media/sydney.bmp index 2f14a5a03ab0661a4e4090e4479c29e6e7050ffe..0ba9aad998d10b450b1b1de2d0f40f0fe3c34972 100644 GIT binary patch literal 132150 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 diff --git a/source/Irrlicht/iOS/Interface_iPad.xib b/source/Irrlicht/iOS/Interface_iPad.xib new file mode 100644 index 00000000..ee708028 --- /dev/null +++ b/source/Irrlicht/iOS/Interface_iPad.xib @@ -0,0 +1,130 @@ + + + + 1280 + 11E53 + 2843 + 1138.47 + 569.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 1929 + + + IBProxyObject + IBUICustomObject + IBUIWindow + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBIPadFramework + + + IBFirstResponder + IBIPadFramework + + + IBIPadFramework + + + + 1316 + + {320, 480} + + 1 + MSAxIDEAA + + NO + NO + IBIPadFramework + YES + YES + + + + + + + delegate + + + + 11 + + + + window + + + + 12 + + + + + + 0 + + + + + + 2 + + + + + -1 + + + File's Owner + + + -2 + + + + + 9 + + + + + + + UIApplication + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + AppDelegate + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 12 + + + 0 + IBIPadFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + YES + 3 + 1929 + + diff --git a/source/Irrlicht/iOS/Interface_iPhone.xib b/source/Irrlicht/iOS/Interface_iPhone.xib new file mode 100644 index 00000000..efaeebd6 --- /dev/null +++ b/source/Irrlicht/iOS/Interface_iPhone.xib @@ -0,0 +1,131 @@ + + + + 1280 + 11G63b + 3084 + 1138.51 + 569.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 2083 + + + IBProxyObject + IBUICustomObject + IBUIWindow + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + IBCocoaTouchFramework + + + + 1316 + + {320, 480} + + + 1 + MSAxIDEAA + + NO + NO + IBCocoaTouchFramework + YES + YES + + + + + + + delegate + + + + 11 + + + + window + + + + 12 + + + + + + 0 + + + + + + 2 + + + + + -1 + + + File's Owner + + + -2 + + + + + 9 + + + + + + + UIApplication + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + AppDelegate + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 12 + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + YES + 3 + 2083 + + diff --git a/source/Irrlicht/iOS/example-info.plist b/source/Irrlicht/iOS/example-info.plist new file mode 100644 index 00000000..a7189719 --- /dev/null +++ b/source/Irrlicht/iOS/example-info.plist @@ -0,0 +1,48 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + irrlicht.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + NSMainNibFile + Interface_iPhone + NSMainNibFile~ipad + Interface_iPad + UIRequiredDeviceCapabilities + + armv7 + + UIStatusBarHidden + + UIStatusBarHidden~ipad + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + + + diff --git a/source/Irrlicht/iOS/iOS.xcodeproj/project.pbxproj b/source/Irrlicht/iOS/iOS.xcodeproj/project.pbxproj index 65a873a7..b966bd86 100644 --- a/source/Irrlicht/iOS/iOS.xcodeproj/project.pbxproj +++ b/source/Irrlicht/iOS/iOS.xcodeproj/project.pbxproj @@ -506,12 +506,49 @@ 5E3EA6731586A27E00C17C1D /* IBurningShader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E3047C415515B4400D9E53B /* IBurningShader.cpp */; }; 5E3EA6771586A27E00C17C1D /* Irrlicht.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E3047CC15515B4400D9E53B /* Irrlicht.cpp */; }; 5E3EA6781586A27E00C17C1D /* irrXML.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5E3047CD15515B4400D9E53B /* irrXML.cpp */; }; + 5ED2483F1731568400A13B86 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E7CF2E215516CC00014DCBA /* UIKit.framework */; }; + 5ED248401731568400A13B86 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E7CF2E415516CC00014DCBA /* Foundation.framework */; }; + 5ED248411731568400A13B86 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E7CF2E615516CC00014DCBA /* CoreGraphics.framework */; }; + 5ED2485E173157AD00A13B86 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5ED2485B173157AD00A13B86 /* main.cpp */; }; + 5ED2486117315F7A00A13B86 /* libIrrlicht.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E7CF31215516E370014DCBA /* libIrrlicht.a */; }; + 5ED2486317315FA800A13B86 /* media in Resources */ = {isa = PBXBuildFile; fileRef = 5ED2486217315FA800A13B86 /* media */; }; + 5ED24864173161C900A13B86 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E7CF2EA15516CC00014DCBA /* OpenGLES.framework */; }; + 5ED24865173161F200A13B86 /* CoreMotion.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EDC9F971638D8CF00E65F28 /* CoreMotion.framework */; }; + 5ED248661731622A00A13B86 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E7CF2E815516CC00014DCBA /* QuartzCore.framework */; }; + 5ED248741731788700A13B86 /* COGLES2FixedPipeline.fsh in Sources */ = {isa = PBXBuildFile; fileRef = 5ED2486C1731788700A13B86 /* COGLES2FixedPipeline.fsh */; }; + 5ED248751731788700A13B86 /* COGLES2FixedPipeline.vsh in Sources */ = {isa = PBXBuildFile; fileRef = 5ED2486D1731788700A13B86 /* COGLES2FixedPipeline.vsh */; }; + 5ED248761731788700A13B86 /* COGLES2NormalMap.fsh in Sources */ = {isa = PBXBuildFile; fileRef = 5ED2486E1731788700A13B86 /* COGLES2NormalMap.fsh */; }; + 5ED248771731788700A13B86 /* COGLES2NormalMap.vsh in Sources */ = {isa = PBXBuildFile; fileRef = 5ED2486F1731788700A13B86 /* COGLES2NormalMap.vsh */; }; + 5ED248781731788700A13B86 /* COGLES2ParallaxMap.fsh in Sources */ = {isa = PBXBuildFile; fileRef = 5ED248701731788700A13B86 /* COGLES2ParallaxMap.fsh */; }; + 5ED248791731788700A13B86 /* COGLES2ParallaxMap.vsh in Sources */ = {isa = PBXBuildFile; fileRef = 5ED248711731788700A13B86 /* COGLES2ParallaxMap.vsh */; }; + 5ED2487A1731788700A13B86 /* COGLES2Renderer2D.fsh in Sources */ = {isa = PBXBuildFile; fileRef = 5ED248721731788700A13B86 /* COGLES2Renderer2D.fsh */; }; + 5ED2487B1731788700A13B86 /* COGLES2Renderer2D.vsh in Sources */ = {isa = PBXBuildFile; fileRef = 5ED248731731788700A13B86 /* COGLES2Renderer2D.vsh */; }; + 5ED2487C173178DC00A13B86 /* COGLES2FixedPipeline.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 5ED2486C1731788700A13B86 /* COGLES2FixedPipeline.fsh */; }; + 5ED2487D173178DC00A13B86 /* COGLES2FixedPipeline.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 5ED2486D1731788700A13B86 /* COGLES2FixedPipeline.vsh */; }; + 5ED2487E173178DC00A13B86 /* COGLES2NormalMap.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 5ED2486E1731788700A13B86 /* COGLES2NormalMap.fsh */; }; + 5ED2487F173178DC00A13B86 /* COGLES2NormalMap.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 5ED2486F1731788700A13B86 /* COGLES2NormalMap.vsh */; }; + 5ED24880173178DC00A13B86 /* COGLES2ParallaxMap.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 5ED248701731788700A13B86 /* COGLES2ParallaxMap.fsh */; }; + 5ED24881173178DC00A13B86 /* COGLES2ParallaxMap.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 5ED248711731788700A13B86 /* COGLES2ParallaxMap.vsh */; }; + 5ED24882173178DC00A13B86 /* COGLES2Renderer2D.fsh in Resources */ = {isa = PBXBuildFile; fileRef = 5ED248721731788700A13B86 /* COGLES2Renderer2D.fsh */; }; + 5ED24883173178DC00A13B86 /* COGLES2Renderer2D.vsh in Resources */ = {isa = PBXBuildFile; fileRef = 5ED248731731788700A13B86 /* COGLES2Renderer2D.vsh */; }; + 5ED2488817317FFC00A13B86 /* Interface_iPad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5ED2488617317FFC00A13B86 /* Interface_iPad.xib */; }; + 5ED2488917317FFC00A13B86 /* Interface_iPhone.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5ED2488717317FFC00A13B86 /* Interface_iPhone.xib */; }; 5EEAE04C171DF38900C7BC68 /* irrpack.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EEAE049171DF38900C7BC68 /* irrpack.h */; }; 5EEAE04D171DF38900C7BC68 /* irrunpack.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EEAE04A171DF38900C7BC68 /* irrunpack.h */; }; 5EEAE04E171DF38900C7BC68 /* leakHunter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5EEAE04B171DF38900C7BC68 /* leakHunter.h */; }; 5EEAE050171DF3C700C7BC68 /* leakHunter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5EEAE04F171DF3C700C7BC68 /* leakHunter.cpp */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 5ED2485F17315F6400A13B86 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5E96FAE715515650000A0A05 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5E7CF31115516E370014DCBA; + remoteInfo = Irrlicht; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ 5E25C82816A845D900320AA9 /* COGLES2FixedPipelineRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = COGLES2FixedPipelineRenderer.cpp; path = ../COGLES2FixedPipelineRenderer.cpp; sourceTree = ""; }; 5E25C82916A845D900320AA9 /* COGLES2FixedPipelineRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = COGLES2FixedPipelineRenderer.h; path = ../COGLES2FixedPipelineRenderer.h; sourceTree = ""; }; @@ -1244,6 +1281,20 @@ 5E7CF769155187AB0014DCBA /* SoftwareDriver2_compile_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SoftwareDriver2_compile_config.h; path = ../SoftwareDriver2_compile_config.h; sourceTree = ""; }; 5E7CF76A155187AB0014DCBA /* SoftwareDriver2_helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SoftwareDriver2_helper.h; path = ../SoftwareDriver2_helper.h; sourceTree = ""; }; 5E7CF76B155187AB0014DCBA /* wglext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = wglext.h; path = ../wglext.h; sourceTree = ""; }; + 5ED2483E1731568400A13B86 /* 17.HelloWorld_Mobile.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; name = 17.HelloWorld_Mobile.app; path = HelloWorldMobile.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 5ED2485B173157AD00A13B86 /* main.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.objcpp; fileEncoding = 4; name = main.cpp; path = ../../../examples/17.HelloWorld_Mobile/main.cpp; sourceTree = ""; }; + 5ED2486217315FA800A13B86 /* media */ = {isa = PBXFileReference; lastKnownFileType = folder; name = media; path = ../../../media; sourceTree = ""; }; + 5ED2486C1731788700A13B86 /* COGLES2FixedPipeline.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = COGLES2FixedPipeline.fsh; sourceTree = ""; }; + 5ED2486D1731788700A13B86 /* COGLES2FixedPipeline.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = COGLES2FixedPipeline.vsh; sourceTree = ""; }; + 5ED2486E1731788700A13B86 /* COGLES2NormalMap.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = COGLES2NormalMap.fsh; sourceTree = ""; }; + 5ED2486F1731788700A13B86 /* COGLES2NormalMap.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = COGLES2NormalMap.vsh; sourceTree = ""; }; + 5ED248701731788700A13B86 /* COGLES2ParallaxMap.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = COGLES2ParallaxMap.fsh; sourceTree = ""; }; + 5ED248711731788700A13B86 /* COGLES2ParallaxMap.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = COGLES2ParallaxMap.vsh; sourceTree = ""; }; + 5ED248721731788700A13B86 /* COGLES2Renderer2D.fsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = COGLES2Renderer2D.fsh; sourceTree = ""; }; + 5ED248731731788700A13B86 /* COGLES2Renderer2D.vsh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = COGLES2Renderer2D.vsh; sourceTree = ""; }; + 5ED2488417317C4C00A13B86 /* example-info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "example-info.plist"; sourceTree = ""; }; + 5ED2488617317FFC00A13B86 /* Interface_iPad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Interface_iPad.xib; sourceTree = ""; }; + 5ED2488717317FFC00A13B86 /* Interface_iPhone.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Interface_iPhone.xib; sourceTree = ""; }; 5EDC9F971638D8CF00E65F28 /* CoreMotion.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMotion.framework; path = System/Library/Frameworks/CoreMotion.framework; sourceTree = SDKROOT; }; 5EE3D2BE1552DF7C00D0F9E8 /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; }; 5EEAE049171DF38900C7BC68 /* irrpack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = irrpack.h; path = ../../../include/irrpack.h; sourceTree = ""; }; @@ -1260,6 +1311,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 5ED2483B1731568400A13B86 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 5ED2486117315F7A00A13B86 /* libIrrlicht.a in Frameworks */, + 5ED248661731622A00A13B86 /* QuartzCore.framework in Frameworks */, + 5ED24865173161F200A13B86 /* CoreMotion.framework in Frameworks */, + 5ED24864173161C900A13B86 /* OpenGLES.framework in Frameworks */, + 5ED2483F1731568400A13B86 /* UIKit.framework in Frameworks */, + 5ED248401731568400A13B86 /* Foundation.framework in Frameworks */, + 5ED248411731568400A13B86 /* CoreGraphics.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -2095,9 +2160,12 @@ 5E96FAE515515650000A0A05 = { isa = PBXGroup; children = ( + 5ED24838173151F300A13B86 /* Examples */, 5E7CF2E115516CC00014DCBA /* Frameworks */, 5E30445D15515A9000D9E53B /* Include */, + 5ED2486217315FA800A13B86 /* media */, 5E96FAF115515650000A0A05 /* Products */, + 5ED2486B1731788700A13B86 /* Shaders */, 5E3045C815515AD100D9E53B /* Source */, ); sourceTree = ""; @@ -2106,10 +2174,46 @@ isa = PBXGroup; children = ( 5E7CF31215516E370014DCBA /* libIrrlicht.a */, + 5ED2483E1731568400A13B86 /* 17.HelloWorld_Mobile.app */, ); name = Products; sourceTree = ""; }; + 5ED24838173151F300A13B86 /* Examples */ = { + isa = PBXGroup; + children = ( + 5ED248391731523300A13B86 /* 17.HelloWorld_Mobile */, + ); + name = Examples; + sourceTree = ""; + }; + 5ED248391731523300A13B86 /* 17.HelloWorld_Mobile */ = { + isa = PBXGroup; + children = ( + 5ED2488617317FFC00A13B86 /* Interface_iPad.xib */, + 5ED2488717317FFC00A13B86 /* Interface_iPhone.xib */, + 5ED2488417317C4C00A13B86 /* example-info.plist */, + 5ED2485B173157AD00A13B86 /* main.cpp */, + ); + name = 17.HelloWorld_Mobile; + sourceTree = ""; + }; + 5ED2486B1731788700A13B86 /* Shaders */ = { + isa = PBXGroup; + children = ( + 5ED2486C1731788700A13B86 /* COGLES2FixedPipeline.fsh */, + 5ED2486D1731788700A13B86 /* COGLES2FixedPipeline.vsh */, + 5ED2486E1731788700A13B86 /* COGLES2NormalMap.fsh */, + 5ED2486F1731788700A13B86 /* COGLES2NormalMap.vsh */, + 5ED248701731788700A13B86 /* COGLES2ParallaxMap.fsh */, + 5ED248711731788700A13B86 /* COGLES2ParallaxMap.vsh */, + 5ED248721731788700A13B86 /* COGLES2Renderer2D.fsh */, + 5ED248731731788700A13B86 /* COGLES2Renderer2D.vsh */, + ); + name = Shaders; + path = ../../../media/Shaders; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -2325,11 +2429,32 @@ productReference = 5E7CF31215516E370014DCBA /* libIrrlicht.a */; productType = "com.apple.product-type.library.static"; }; + 5ED2483D1731568400A13B86 /* HelloWorldMobile */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5ED248541731568400A13B86 /* Build configuration list for PBXNativeTarget "HelloWorldMobile" */; + buildPhases = ( + 5ED2483A1731568400A13B86 /* Sources */, + 5ED2483B1731568400A13B86 /* Frameworks */, + 5ED2483C1731568400A13B86 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 5ED2486017315F6400A13B86 /* PBXTargetDependency */, + ); + name = HelloWorldMobile; + productName = 17.HelloWorld_Mobile; + productReference = 5ED2483E1731568400A13B86 /* 17.HelloWorld_Mobile.app */; + productType = "com.apple.product-type.application"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 5E96FAE715515650000A0A05 /* Project object */ = { isa = PBXProject; + attributes = { + LastUpgradeCheck = 0460; + }; buildConfigurationList = 5E96FAEA15515650000A0A05 /* Build configuration list for PBXProject "iOS" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; @@ -2343,10 +2468,32 @@ projectRoot = ""; targets = ( 5E7CF31115516E370014DCBA /* Irrlicht */, + 5ED2483D1731568400A13B86 /* HelloWorldMobile */, ); }; /* End PBXProject section */ +/* Begin PBXResourcesBuildPhase section */ + 5ED2483C1731568400A13B86 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5ED2487C173178DC00A13B86 /* COGLES2FixedPipeline.fsh in Resources */, + 5ED2487D173178DC00A13B86 /* COGLES2FixedPipeline.vsh in Resources */, + 5ED2487E173178DC00A13B86 /* COGLES2NormalMap.fsh in Resources */, + 5ED2487F173178DC00A13B86 /* COGLES2NormalMap.vsh in Resources */, + 5ED24880173178DC00A13B86 /* COGLES2ParallaxMap.fsh in Resources */, + 5ED24881173178DC00A13B86 /* COGLES2ParallaxMap.vsh in Resources */, + 5ED24882173178DC00A13B86 /* COGLES2Renderer2D.fsh in Resources */, + 5ED24883173178DC00A13B86 /* COGLES2Renderer2D.vsh in Resources */, + 5ED2486317315FA800A13B86 /* media in Resources */, + 5ED2488817317FFC00A13B86 /* Interface_iPad.xib in Resources */, + 5ED2488917317FFC00A13B86 /* Interface_iPhone.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + /* Begin PBXSourcesBuildPhase section */ 5E7CF30E15516E370014DCBA /* Sources */ = { isa = PBXSourcesBuildPhase; @@ -2673,8 +2820,32 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 5ED2483A1731568400A13B86 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5ED2485E173157AD00A13B86 /* main.cpp in Sources */, + 5ED248741731788700A13B86 /* COGLES2FixedPipeline.fsh in Sources */, + 5ED248751731788700A13B86 /* COGLES2FixedPipeline.vsh in Sources */, + 5ED248761731788700A13B86 /* COGLES2NormalMap.fsh in Sources */, + 5ED248771731788700A13B86 /* COGLES2NormalMap.vsh in Sources */, + 5ED248781731788700A13B86 /* COGLES2ParallaxMap.fsh in Sources */, + 5ED248791731788700A13B86 /* COGLES2ParallaxMap.vsh in Sources */, + 5ED2487A1731788700A13B86 /* COGLES2Renderer2D.fsh in Sources */, + 5ED2487B1731788700A13B86 /* COGLES2Renderer2D.vsh in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 5ED2486017315F6400A13B86 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 5E7CF31115516E370014DCBA /* Irrlicht */; + targetProxy = 5ED2485F17315F6400A13B86 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ 5E7CF31B15516E370014DCBA /* Debug */ = { isa = XCBuildConfiguration; @@ -2682,6 +2853,7 @@ DSTROOT = /tmp/Irrlicht.dst; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = iOS_Prefix.pch; + ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -2744,6 +2916,56 @@ }; name = Release; }; + 5ED248551731568400A13B86 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + HEADER_SEARCH_PATHS = ../../../include; + INFOPLIST_FILE = "$(SRCROOT)/example-info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 5ED248561731568400A13B86 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + GCC_PRECOMPILE_PREFIX_HEADER = NO; + GCC_PREFIX_HEADER = ""; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + HEADER_SEARCH_PATHS = ../../../include; + INFOPLIST_FILE = "$(SRCROOT)/example-info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 5.1; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE = ""; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -2765,6 +2987,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 5ED248541731568400A13B86 /* Build configuration list for PBXNativeTarget "HelloWorldMobile" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5ED248551731568400A13B86 /* Debug */, + 5ED248561731568400A13B86 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ }; rootObject = 5E96FAE715515650000A0A05 /* Project object */;