OSDN Git Service

Add OSX version of OGLES2HelloAPI sample.
authorCorentin Wallez <cwallez@google.com>
Thu, 10 Dec 2015 20:59:28 +0000 (15:59 -0500)
committerNicolas Capens <capn@google.com>
Wed, 23 Dec 2015 05:01:19 +0000 (05:01 +0000)
Change-Id: I2f8511486ca3b040b257c2a763abb1bd0647d0e6
Reviewed-on: https://swiftshader-review.googlesource.com/4441
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/Info.plist [new file with mode: 0644]
tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/OGLES2HelloAPI.xcodeproj/project.pbxproj [new file with mode: 0644]
tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/Prefix.pch [new file with mode: 0644]
tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/en.lproj/InfoPlist.strings [new file with mode: 0644]
tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/en.lproj/MainMenu.xib [new file with mode: 0644]
tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Info.plist [new file with mode: 0644]
tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/OGLES2HelloAPI_OSX.mm [new file with mode: 0644]

diff --git a/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/Info.plist b/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/Info.plist
new file mode 100644 (file)
index 0000000..459b752
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>en</string>
+       <key>CFBundleExecutable</key>
+       <string>${EXECUTABLE_NAME}</string>
+       <key>CFBundleIconFile</key>
+       <string>IMG.icns</string>
+       <key>LSApplicationCategoryType</key>
+       <string></string>
+       <key>CFBundleIdentifier</key>
+       <string>com.imgtec.${PRODUCT_NAME:rfc1034identifier}</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>${PRODUCT_NAME}</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleShortVersionString</key>
+       <string>1.0</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>1</string>
+       <key>LSMinimumSystemVersion</key>
+       <string>${MACOSX_DEPLOYMENT_TARGET}</string>
+       <key>NSHumanReadableCopyright</key>
+       <string>Copyright (c) Imagination Technologies Ltd. All rights reserved.</string>
+       <key>NSMainNibFile</key>
+       <string>MainMenu</string>
+       <key>NSPrincipalClass</key>
+       <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/OGLES2HelloAPI.xcodeproj/project.pbxproj b/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/OGLES2HelloAPI.xcodeproj/project.pbxproj
new file mode 100644 (file)
index 0000000..551d256
--- /dev/null
@@ -0,0 +1,400 @@
+// !$*UTF8*$!
+{
+       archiveVersion = 1;
+       classes = {
+       };
+       objectVersion = 46;
+       objects = {
+
+/* Begin PBXBuildFile section */
+               49068F5D13DDA30C00C8DC21 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49068F5C13DDA30C00C8DC21 /* Cocoa.framework */; };
+               49BB0EDC13DEB66200B228C5 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49BB0EDB13DEB66200B228C5 /* QuartzCore.framework */; };
+               DB3A55C815C92647004CE8F1 /* libEGL.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DB3A55C715C92647004CE8F1 /* libEGL.dylib */; };
+               DB3A55C915C92668004CE8F1 /* libEGL.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB3A55C715C92647004CE8F1 /* libEGL.dylib */; };
+               DB3A55CC15C937F1004CE8F1 /* libGLESv2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DB3A55CB15C937F1004CE8F1 /* libGLESv2.dylib */; };
+               DB3A55CD15C9380E004CE8F1 /* libGLESv2.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = DB3A55CB15C937F1004CE8F1 /* libGLESv2.dylib */; };
+               495B9D0213E2EE09000FD6B4 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 495B9D0013E2EE09000FD6B4 /* MainMenu.xib */; };
+               495B9D0613E2EE16000FD6B4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 495B9D0413E2EE16000FD6B4 /* InfoPlist.strings */; };
+               DBC1C92915D004BF00D6A9CC /* IMG.icns in Resources */ = {isa = PBXBuildFile; fileRef = DB3A55D015C938EC004CE8F1 /* IMG.icns */; };
+               F838719A6D9E34D9252E93DF /* OGLES2HelloAPI_OSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = F84A2FF8B83459EF3CD3A6EB /* OGLES2HelloAPI_OSX.mm */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+               DB3A55C515C92213004CE8F1 /* CopyFiles */ = {
+                       isa = PBXCopyFilesBuildPhase;
+                       buildActionMask = 2147483647;
+                       dstPath = "";
+                       dstSubfolderSpec = 10;
+                       files = (
+                               DB3A55CD15C9380E004CE8F1 /* libGLESv2.dylib in CopyFiles */,
+                               DB3A55C915C92668004CE8F1 /* libEGL.dylib in CopyFiles */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+               49068F5C13DDA30C00C8DC21 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+               49068F5F13DDA30C00C8DC21 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
+               49068F6013DDA30C00C8DC21 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
+               49068F6113DDA30C00C8DC21 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
+               49BB0EDB13DEB66200B228C5 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
+               49068F5813DDA30C00C8DC21 /* OGLES2HelloAPI.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OGLES2HelloAPI.app; sourceTree = BUILT_PRODUCTS_DIR; };
+               49FE311813E2CEE900B32DAC /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = SOURCE_ROOT; };
+               DB3A55C715C92647004CE8F1 /* libEGL.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libEGL.dylib; path = "../../../../../../Builds/OSX/x86/Lib/libEGL.dylib"; sourceTree = "<group>"; };
+               DB3A55CB15C937F1004CE8F1 /* libGLESv2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libGLESv2.dylib; path = "../../../../../../Builds/OSX/x86/Lib/libGLESv2.dylib"; sourceTree = "<group>"; };
+               DB3A55CE15C938D4004CE8F1 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
+               DB3A55D015C938EC004CE8F1 /* IMG.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = IMG.icns; path = "../../../../../../Builds/OSX/Resources/IMG.icns"; sourceTree = "<group>"; };
+               495B9D0113E2EE09000FD6B4 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = SOURCE_ROOT; };
+               495B9D0513E2EE16000FD6B4 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = SOURCE_ROOT; };
+               F84A2FF8B83459EF3CD3A6EB /* OGLES2HelloAPI_OSX.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; name = OGLES2HelloAPI_OSX.mm; path = ../../OGLES2HelloAPI_OSX.mm; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+               49068F5513DDA30C00C8DC21 /* Frameworks */ = {
+                       isa = PBXFrameworksBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               49BB0EDC13DEB66200B228C5 /* QuartzCore.framework in Frameworks */,
+                               49068F5D13DDA30C00C8DC21 /* Cocoa.framework in Frameworks */,
+                               DB3A55C815C92647004CE8F1 /* libEGL.dylib in Frameworks */,
+                               DB3A55CC15C937F1004CE8F1 /* libGLESv2.dylib in Frameworks */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+               49068F4D13DDA30C00C8DC21 = {
+                       isa = PBXGroup;
+                       children = (
+                               49068F7913DDA51C00C8DC21 /* Source */,
+                               DB5C32B515C7F60F00B1A208 /* Content */,
+                               DB3A55D015C938EC004CE8F1 /* IMG.icns */,
+                               DB5C32B415C7F5D100B1A208 /* Libraries */,
+                               49068F5B13DDA30C00C8DC21 /* Frameworks */,
+                               DB5C32AE15C7F50500B1A208 /* Resources */,
+                               49068F6313DDA30C00C8DC21 /* Supporting Files */,
+                               49068F5913DDA30C00C8DC21 /* Products */,
+                       );
+                       sourceTree = "<group>";
+               };
+               49068F5913DDA30C00C8DC21 /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49068F5813DDA30C00C8DC21 /* OGLES2HelloAPI.app */,
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               49068F5B13DDA30C00C8DC21 /* Frameworks */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49068F5F13DDA30C00C8DC21 /* AppKit.framework */,
+                               49068F6013DDA30C00C8DC21 /* CoreData.framework */,
+                               49068F6113DDA30C00C8DC21 /* Foundation.framework */,
+                               49BB0EDB13DEB66200B228C5 /* QuartzCore.framework */,
+                               49068F5C13DDA30C00C8DC21 /* Cocoa.framework */,
+                       );
+                       name = Frameworks;
+                       sourceTree = "<group>";
+               };
+               49068F6313DDA30C00C8DC21 /* Supporting Files */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49FE311813E2CEE900B32DAC /* Prefix.pch */,
+                               495B9D0413E2EE16000FD6B4 /* InfoPlist.strings */,
+                       );
+                       name = "Supporting Files";
+                       path = OGLES2HelloAPI;
+                       sourceTree = "<group>";
+               };
+               49068F7913DDA51C00C8DC21 /* Source */ = {
+                       isa = PBXGroup;
+                       children = (
+                               F84A2FF8B83459EF3CD3A6EB /* OGLES2HelloAPI_OSX.mm */,
+                       );
+                       name = Source;
+                       sourceTree = "<group>";
+               };
+               DB5C329915C7F19D00B1A208 /* Products */ = {
+                       isa = PBXGroup;
+                       children = (
+                       );
+                       name = Products;
+                       sourceTree = "<group>";
+               };
+               DB5C32AE15C7F50500B1A208 /* Resources */ = {
+                       isa = PBXGroup;
+                       children = (
+                               DB3A55CE15C938D4004CE8F1 /* Info.plist */,
+                               495B9D0013E2EE09000FD6B4 /* MainMenu.xib */,
+                       );
+                       name = Resources;
+                       path = OGLES2HelloAPI;
+                       sourceTree = "<group>";
+               };
+               DB5C32B415C7F5D100B1A208 /* Libraries */ = {
+                       isa = PBXGroup;
+                       children = (
+                               DB3A55C715C92647004CE8F1 /* libEGL.dylib */,
+                               DB3A55CB15C937F1004CE8F1 /* libGLESv2.dylib */,
+                       );
+                       name = Libraries;
+                       sourceTree = "<group>";
+               };
+               DB5C32B515C7F60F00B1A208 /* Content */ = {
+                       isa = PBXGroup;
+                       children = (
+                               DBE6ED4E15C2AB9C00275129 /* Generic */,
+                               DBE6ED4D15C2AB8E00275129 /* Models */,
+                               DBE6ED4C15C2AB7E00275129 /* Textures */,
+                               DBE6ED4A15C2AB7000275129 /* Shaders */,
+                       );
+                       name = Content;
+                       sourceTree = "<group>";
+               };
+               DBE6ED4A15C2AB7000275129 /* Shaders */ = {
+                       isa = PBXGroup;
+                       children = (
+                       );
+                       name = Shaders;
+                       sourceTree = "<group>";
+               };
+               DBE6ED4C15C2AB7E00275129 /* Textures */ = {
+                       isa = PBXGroup;
+                       children = (
+                       );
+                       name = Textures;
+                       sourceTree = "<group>";
+               };
+               DBE6ED4D15C2AB8E00275129 /* Models */ = {
+                       isa = PBXGroup;
+                       children = (
+                       );
+                       name = Models;
+                       sourceTree = "<group>";
+               };
+               DBE6ED4E15C2AB9C00275129 /* Generic */ = {
+                       isa = PBXGroup;
+                       children = (
+                       );
+                       name = Generic;
+                       sourceTree = "<group>";
+               };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+               49068F5713DDA30C00C8DC21 /* OGLES2HelloAPI */ = {
+                       isa = PBXNativeTarget;
+                       buildConfigurationList = 49068F7613DDA30C00C8DC21 /* Build configuration list for PBXNativeTarget "OGLES2HelloAPI" */;
+                       buildPhases = (
+                               49068F5413DDA30C00C8DC21 /* Sources */,
+                               49068F5513DDA30C00C8DC21 /* Frameworks */,
+                               49068F5613DDA30C00C8DC21 /* Resources */,
+                               DB3A55C515C92213004CE8F1 /* CopyFiles */,
+                       );
+                       buildRules = (
+                       );
+                       dependencies = (
+                       );
+                       name = OGLES2HelloAPI;
+                       productName = OGLES2HelloAPI;
+                       productReference = 49068F5813DDA30C00C8DC21 /* OGLES2HelloAPI.app */;
+                       productType = "com.apple.product-type.application";
+               };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+               49068F4F13DDA30C00C8DC21 /* Project object */ = {
+                       isa = PBXProject;
+                       attributes = {
+                               LastUpgradeCheck = 0430;
+                       };
+                       buildConfigurationList = 49068F5213DDA30C00C8DC21 /* Build configuration list for PBXProject "OGLES2HelloAPI" */;
+                       compatibilityVersion = "Xcode 3.2";
+                       developmentRegion = English;
+                       hasScannedForEncodings = 0;
+                       knownRegions = (
+                               en,
+                       );
+                       mainGroup = 49068F4D13DDA30C00C8DC21;
+                       productRefGroup = 49068F5913DDA30C00C8DC21 /* Products */;
+                       projectDirPath = "";
+                       projectReferences = (
+                               {
+                                       ProductGroup = DB5C329915C7F19D00B1A208 /* Products */;
+                                       ProjectRef = DBE6ED1B15C2A1D300275129 /* OGLES2Tools.xcodeproj */;
+                               },
+                       );
+                       projectRoot = "";
+                       targets = (
+                               49068F5713DDA30C00C8DC21 /* OGLES2HelloAPI */,
+                       );
+               };
+/* End PBXProject section */
+
+/* Begin PBXReferenceProxy section */
+               DB5C32AC15C7F32B00B1A208 /* libOGLES2Tools.a */ = {
+                       isa = PBXReferenceProxy;
+                       fileType = archive.ar;
+                       path = libOGLES2Tools.a;
+                       remoteRef = DB5C32AB15C7F32B00B1A208 /* PBXContainerItemProxy */;
+                       sourceTree = BUILT_PRODUCTS_DIR;
+               };
+/* End PBXReferenceProxy section */
+
+/* Begin PBXResourcesBuildPhase section */
+               49068F5613DDA30C00C8DC21 /* Resources */ = {
+                       isa = PBXResourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               495B9D0213E2EE09000FD6B4 /* MainMenu.xib in Resources */,
+                               495B9D0613E2EE16000FD6B4 /* InfoPlist.strings in Resources */,
+                               DB3A55CF15C938D4004CE8F1 /* Info.plist in Resources */,
+                               DBC1C92915D004BF00D6A9CC /* IMG.icns in Resources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+               49068F5413DDA30C00C8DC21 /* Sources */ = {
+                       isa = PBXSourcesBuildPhase;
+                       buildActionMask = 2147483647;
+                       files = (
+                               F838719A6D9E34D9252E93DF /* OGLES2HelloAPI_OSX.mm in Sources */,
+                       );
+                       runOnlyForDeploymentPostprocessing = 0;
+               };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+               495B9D0013E2EE09000FD6B4 /* MainMenu.xib */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               495B9D0113E2EE09000FD6B4 /* en */,
+                       );
+                       name = MainMenu.xib;
+                       sourceTree = "<group>";
+               };
+               495B9D0413E2EE16000FD6B4 /* InfoPlist.strings */ = {
+                       isa = PBXVariantGroup;
+                       children = (
+                               495B9D0513E2EE16000FD6B4 /* en */,
+                       );
+                       name = InfoPlist.strings;
+                       sourceTree = "<group>";
+               };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+               49068F7413DDA30C00C8DC21 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+                               COPY_PHASE_STRIP = NO;
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_DYNAMIC_NO_PIC = NO;
+                               GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+                               GCC_OPTIMIZATION_LEVEL = 0;
+                               GCC_PREPROCESSOR_DEFINITIONS = (
+                                       "_DEBUG=1",
+                                       "$(inherited)",
+                               );
+                               GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               INFOPLIST_FILE = "";
+                               MACOSX_DEPLOYMENT_TARGET = 10.6;
+                               ONLY_ACTIVE_ARCH = YES;
+                               SDKROOT = macosx;
+                       };
+                       name = Debug;
+               };
+               49068F7513DDA30C00C8DC21 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = NO;
+                               ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
+                               COPY_PHASE_STRIP = YES;
+                               DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+                               GCC_C_LANGUAGE_STANDARD = gnu99;
+                               GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+                               GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+                               GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+                               GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
+                               GCC_WARN_ABOUT_RETURN_TYPE = YES;
+                               GCC_WARN_UNUSED_VARIABLE = YES;
+                               INFOPLIST_FILE = "";
+                               MACOSX_DEPLOYMENT_TARGET = 10.6;
+                               SDKROOT = macosx;
+                       };
+                       name = Release;
+               };
+               49068F7713DDA30C00C8DC21 /* Debug */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = YES;
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
+                               GCC_PREFIX_HEADER = Prefix.pch;
+                               GCC_PREPROCESSOR_DEFINITIONS = (
+                                       "DEBUG=1",
+                                       BUILD_OGLES2,
+                               );
+                               HEADER_SEARCH_PATHS = "";
+                               INFOPLIST_FILE = Info.plist;
+                               LIBRARY_SEARCH_PATHS = ("$(inherited)","../../../../../../Builds/OSX/x86/Lib");
+                               OTHER_LDFLAGS = "";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               USER_HEADER_SEARCH_PATHS = "../../../../../../Builds/Include";
+                               WRAPPER_EXTENSION = app;
+                       };
+                       name = Debug;
+               };
+               49068F7813DDA30C00C8DC21 /* Release */ = {
+                       isa = XCBuildConfiguration;
+                       buildSettings = {
+                               ALWAYS_SEARCH_USER_PATHS = YES;
+                               GCC_PRECOMPILE_PREFIX_HEADER = YES;
+                               GCC_PREFIX_HEADER = Prefix.pch;
+                               GCC_PREPROCESSOR_DEFINITIONS = BUILD_OGLES2;
+                               HEADER_SEARCH_PATHS = "";
+                               INFOPLIST_FILE = Info.plist;
+                               LIBRARY_SEARCH_PATHS = ("$(inherited)","../../../../../../Builds/OSX/x86/Lib");
+                               OTHER_LDFLAGS = "";
+                               PRODUCT_NAME = "$(TARGET_NAME)";
+                               USER_HEADER_SEARCH_PATHS = "../../../../../../Builds/Include";
+                               WRAPPER_EXTENSION = app;
+                       };
+                       name = Release;
+               };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+               49068F5213DDA30C00C8DC21 /* Build configuration list for PBXProject "OGLES2HelloAPI" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               49068F7413DDA30C00C8DC21 /* Debug */,
+                               49068F7513DDA30C00C8DC21 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+               49068F7613DDA30C00C8DC21 /* Build configuration list for PBXNativeTarget "OGLES2HelloAPI" */ = {
+                       isa = XCConfigurationList;
+                       buildConfigurations = (
+                               49068F7713DDA30C00C8DC21 /* Debug */,
+                               49068F7813DDA30C00C8DC21 /* Release */,
+                       );
+                       defaultConfigurationIsVisible = 0;
+                       defaultConfigurationName = Release;
+               };
+/* End XCConfigurationList section */
+       };
+       rootObject = 49068F4F13DDA30C00C8DC21 /* Project object */;
+}
diff --git a/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/Prefix.pch b/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/Prefix.pch
new file mode 100644 (file)
index 0000000..d5cd5b9
--- /dev/null
@@ -0,0 +1,3 @@
+//
+// Prefix header for all source files of the 'OGLES2HelloAPI' target in the 'OGLES2HelloAPI' project
+//
diff --git a/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/en.lproj/InfoPlist.strings b/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/en.lproj/InfoPlist.strings
new file mode 100644 (file)
index 0000000..477b28f
--- /dev/null
@@ -0,0 +1,2 @@
+/* Localized versions of Info.plist keys */
+
diff --git a/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/en.lproj/MainMenu.xib b/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Build/OSX/en.lproj/MainMenu.xib
new file mode 100644 (file)
index 0000000..9251bbd
--- /dev/null
@@ -0,0 +1,446 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
+       <data>
+               <int key="IBDocument.SystemTarget">1070</int>
+               <string key="IBDocument.SystemVersion">11E53</string>
+               <string key="IBDocument.InterfaceBuilderVersion">2182</string>
+               <string key="IBDocument.AppKitVersion">1138.47</string>
+               <string key="IBDocument.HIToolboxVersion">569.00</string>
+               <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+                       <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+                       <string key="NS.object.0">2182</string>
+               </object>
+               <object class="NSArray" key="IBDocument.IntegratedClassDependencies">
+                       <bool key="EncodedWithXMLCoder">YES</bool>
+                       <string>NSMenu</string>
+                       <string>NSMenuItem</string>
+                       <string>NSCustomObject</string>
+               </object>
+               <object class="NSArray" key="IBDocument.PluginDependencies">
+                       <bool key="EncodedWithXMLCoder">YES</bool>
+                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+               </object>
+               <object class="NSMutableDictionary" key="IBDocument.Metadata">
+                       <string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+                       <integer value="1" key="NS.object.0"/>
+               </object>
+               <object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
+                       <bool key="EncodedWithXMLCoder">YES</bool>
+                       <object class="NSCustomObject" id="1021">
+                               <string key="NSClassName">NSApplication</string>
+                       </object>
+                       <object class="NSCustomObject" id="1014">
+                               <string key="NSClassName">FirstResponder</string>
+                       </object>
+                       <object class="NSCustomObject" id="1050">
+                               <string key="NSClassName">NSApplication</string>
+                       </object>
+                       <object class="NSMenu" id="649796088">
+                               <string key="NSTitle">AMainMenu</string>
+                               <object class="NSMutableArray" key="NSMenuItems">
+                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                       <object class="NSMenuItem" id="694149608">
+                                               <reference key="NSMenu" ref="649796088"/>
+                                               <string key="NSTitle">OGLES2HelloAPI</string>
+                                               <string key="NSKeyEquiv"/>
+                                               <int key="NSKeyEquivModMask">1048576</int>
+                                               <int key="NSMnemonicLoc">2147483647</int>
+                                               <object class="NSCustomResource" key="NSOnImage" id="35465992">
+                                                       <string key="NSClassName">NSImage</string>
+                                                       <string key="NSResourceName">NSMenuCheckmark</string>
+                                               </object>
+                                               <object class="NSCustomResource" key="NSMixedImage" id="502551668">
+                                                       <string key="NSClassName">NSImage</string>
+                                                       <string key="NSResourceName">NSMenuMixedState</string>
+                                               </object>
+                                               <string key="NSAction">submenuAction:</string>
+                                               <object class="NSMenu" key="NSSubmenu" id="110575045">
+                                                       <string key="NSTitle">OGLES2HelloAPI</string>
+                                                       <object class="NSMutableArray" key="NSMenuItems">
+                                                               <bool key="EncodedWithXMLCoder">YES</bool>
+                                                               <object class="NSMenuItem" id="238522557">
+                                                                       <reference key="NSMenu" ref="110575045"/>
+                                                                       <string key="NSTitle">About OGLES2HelloAPI</string>
+                                                                       <string key="NSKeyEquiv"/>
+                                                                       <int key="NSMnemonicLoc">2147483647</int>
+                                                                       <reference key="NSOnImage" ref="35465992"/>
+                                                                       <reference key="NSMixedImage" ref="502551668"/>
+                                                               </object>
+                                                               <object class="NSMenuItem" id="304266470">
+                                                                       <reference key="NSMenu" ref="110575045"/>
+                                                                       <bool key="NSIsDisabled">YES</bool>
+                                                                       <bool key="NSIsSeparator">YES</bool>
+                                                                       <string key="NSTitle"/>
+                                                                       <string key="NSKeyEquiv"/>
+                                                                       <int key="NSKeyEquivModMask">1048576</int>
+                                                                       <int key="NSMnemonicLoc">2147483647</int>
+                                                                       <reference key="NSOnImage" ref="35465992"/>
+                                                                       <reference key="NSMixedImage" ref="502551668"/>
+                                                               </object>
+                                                               <object class="NSMenuItem" id="755159360">
+                                                                       <reference key="NSMenu" ref="110575045"/>
+                                                                       <string key="NSTitle">Hide OGLES2HelloAPI</string>
+                                                                       <string key="NSKeyEquiv">h</string>
+                                                                       <int key="NSKeyEquivModMask">1048576</int>
+                                                                       <int key="NSMnemonicLoc">2147483647</int>
+                                                                       <reference key="NSOnImage" ref="35465992"/>
+                                                                       <reference key="NSMixedImage" ref="502551668"/>
+                                                               </object>
+                                                               <object class="NSMenuItem" id="1056857174">
+                                                                       <reference key="NSMenu" ref="110575045"/>
+                                                                       <bool key="NSIsDisabled">YES</bool>
+                                                                       <bool key="NSIsSeparator">YES</bool>
+                                                                       <string key="NSTitle"/>
+                                                                       <string key="NSKeyEquiv"/>
+                                                                       <int key="NSKeyEquivModMask">1048576</int>
+                                                                       <int key="NSMnemonicLoc">2147483647</int>
+                                                                       <reference key="NSOnImage" ref="35465992"/>
+                                                                       <reference key="NSMixedImage" ref="502551668"/>
+                                                               </object>
+                                                               <object class="NSMenuItem" id="632727374">
+                                                                       <reference key="NSMenu" ref="110575045"/>
+                                                                       <string key="NSTitle">Quit OGLES2HelloAPI</string>
+                                                                       <string key="NSKeyEquiv">q</string>
+                                                                       <int key="NSKeyEquivModMask">1048576</int>
+                                                                       <int key="NSMnemonicLoc">2147483647</int>
+                                                                       <reference key="NSOnImage" ref="35465992"/>
+                                                                       <reference key="NSMixedImage" ref="502551668"/>
+                                                               </object>
+                                                       </object>
+                                                       <string key="NSName">_NSAppleMenu</string>
+                                               </object>
+                                       </object>
+                                       <object class="NSMenuItem" id="379814623">
+                                               <reference key="NSMenu" ref="649796088"/>
+                                               <string key="NSTitle">File</string>
+                                               <string key="NSKeyEquiv"/>
+                                               <int key="NSKeyEquivModMask">1048576</int>
+                                               <int key="NSMnemonicLoc">2147483647</int>
+                                               <reference key="NSOnImage" ref="35465992"/>
+                                               <reference key="NSMixedImage" ref="502551668"/>
+                                       </object>
+                                       <object class="NSMenuItem" id="952259628">
+                                               <reference key="NSMenu" ref="649796088"/>
+                                               <string key="NSTitle">Edit</string>
+                                               <string key="NSKeyEquiv"/>
+                                               <int key="NSKeyEquivModMask">1048576</int>
+                                               <int key="NSMnemonicLoc">2147483647</int>
+                                               <reference key="NSOnImage" ref="35465992"/>
+                                               <reference key="NSMixedImage" ref="502551668"/>
+                                       </object>
+                                       <object class="NSMenuItem" id="302598603">
+                                               <reference key="NSMenu" ref="649796088"/>
+                                               <string key="NSTitle">Format</string>
+                                               <string key="NSKeyEquiv"/>
+                                               <int key="NSMnemonicLoc">2147483647</int>
+                                               <reference key="NSOnImage" ref="35465992"/>
+                                               <reference key="NSMixedImage" ref="502551668"/>
+                                       </object>
+                                       <object class="NSMenuItem" id="586577488">
+                                               <reference key="NSMenu" ref="649796088"/>
+                                               <string key="NSTitle">View</string>
+                                               <string key="NSKeyEquiv"/>
+                                               <int key="NSKeyEquivModMask">1048576</int>
+                                               <int key="NSMnemonicLoc">2147483647</int>
+                                               <reference key="NSOnImage" ref="35465992"/>
+                                               <reference key="NSMixedImage" ref="502551668"/>
+                                       </object>
+                                       <object class="NSMenuItem" id="713487014">
+                                               <reference key="NSMenu" ref="649796088"/>
+                                               <string key="NSTitle">Window</string>
+                                               <string key="NSKeyEquiv"/>
+                                               <int key="NSKeyEquivModMask">1048576</int>
+                                               <int key="NSMnemonicLoc">2147483647</int>
+                                               <reference key="NSOnImage" ref="35465992"/>
+                                               <reference key="NSMixedImage" ref="502551668"/>
+                                       </object>
+                                       <object class="NSMenuItem" id="448692316">
+                                               <reference key="NSMenu" ref="649796088"/>
+                                               <string key="NSTitle">Help</string>
+                                               <string key="NSKeyEquiv"/>
+                                               <int key="NSMnemonicLoc">2147483647</int>
+                                               <reference key="NSOnImage" ref="35465992"/>
+                                               <reference key="NSMixedImage" ref="502551668"/>
+                                       </object>
+                               </object>
+                               <string key="NSName">_NSMainMenu</string>
+                       </object>
+                       <object class="NSCustomObject" id="755631768">
+                               <string key="NSClassName">NSFontManager</string>
+                       </object>
+                       <object class="NSCustomObject" id="209256642">
+                               <string key="NSClassName">AppController</string>
+                       </object>
+               </object>
+               <object class="IBObjectContainer" key="IBDocument.Objects">
+                       <object class="NSMutableArray" key="connectionRecords">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBActionConnection" key="connection">
+                                               <string key="label">terminate:</string>
+                                               <reference key="source" ref="1050"/>
+                                               <reference key="destination" ref="632727374"/>
+                                       </object>
+                                       <int key="connectionID">449</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBOutletConnection" key="connection">
+                                               <string key="label">delegate</string>
+                                               <reference key="source" ref="1050"/>
+                                               <reference key="destination" ref="209256642"/>
+                                       </object>
+                                       <int key="connectionID">538</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBActionConnection" key="connection">
+                                               <string key="label">orderFrontStandardAboutPanel:</string>
+                                               <reference key="source" ref="1021"/>
+                                               <reference key="destination" ref="238522557"/>
+                                       </object>
+                                       <int key="connectionID">142</int>
+                               </object>
+                               <object class="IBConnectionRecord">
+                                       <object class="IBActionConnection" key="connection">
+                                               <string key="label">hide:</string>
+                                               <reference key="source" ref="1014"/>
+                                               <reference key="destination" ref="755159360"/>
+                                       </object>
+                                       <int key="connectionID">367</int>
+                               </object>
+                       </object>
+                       <object class="IBMutableOrderedSet" key="objectRecords">
+                               <object class="NSArray" key="orderedObjects">
+                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">0</int>
+                                               <object class="NSArray" key="object" id="0">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                               </object>
+                                               <reference key="children" ref="1048"/>
+                                               <nil key="parent"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">-2</int>
+                                               <reference key="object" ref="1021"/>
+                                               <reference key="parent" ref="0"/>
+                                               <string key="objectName">File's Owner</string>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">-1</int>
+                                               <reference key="object" ref="1014"/>
+                                               <reference key="parent" ref="0"/>
+                                               <string key="objectName">First Responder</string>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">-3</int>
+                                               <reference key="object" ref="1050"/>
+                                               <reference key="parent" ref="0"/>
+                                               <string key="objectName">Application</string>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">29</int>
+                                               <reference key="object" ref="649796088"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                       <reference ref="713487014"/>
+                                                       <reference ref="694149608"/>
+                                                       <reference ref="952259628"/>
+                                                       <reference ref="379814623"/>
+                                                       <reference ref="586577488"/>
+                                                       <reference ref="302598603"/>
+                                                       <reference ref="448692316"/>
+                                               </object>
+                                               <reference key="parent" ref="0"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">19</int>
+                                               <reference key="object" ref="713487014"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                               </object>
+                                               <reference key="parent" ref="649796088"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">56</int>
+                                               <reference key="object" ref="694149608"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                       <reference ref="110575045"/>
+                                               </object>
+                                               <reference key="parent" ref="649796088"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">217</int>
+                                               <reference key="object" ref="952259628"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                               </object>
+                                               <reference key="parent" ref="649796088"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">83</int>
+                                               <reference key="object" ref="379814623"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                               </object>
+                                               <reference key="parent" ref="649796088"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">57</int>
+                                               <reference key="object" ref="110575045"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                                       <reference ref="238522557"/>
+                                                       <reference ref="755159360"/>
+                                                       <reference ref="632727374"/>
+                                                       <reference ref="304266470"/>
+                                                       <reference ref="1056857174"/>
+                                               </object>
+                                               <reference key="parent" ref="694149608"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">58</int>
+                                               <reference key="object" ref="238522557"/>
+                                               <reference key="parent" ref="110575045"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">134</int>
+                                               <reference key="object" ref="755159360"/>
+                                               <reference key="parent" ref="110575045"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">136</int>
+                                               <reference key="object" ref="632727374"/>
+                                               <reference key="parent" ref="110575045"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">236</int>
+                                               <reference key="object" ref="304266470"/>
+                                               <reference key="parent" ref="110575045"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">149</int>
+                                               <reference key="object" ref="1056857174"/>
+                                               <reference key="parent" ref="110575045"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">295</int>
+                                               <reference key="object" ref="586577488"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                               </object>
+                                               <reference key="parent" ref="649796088"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">375</int>
+                                               <reference key="object" ref="302598603"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                               </object>
+                                               <reference key="parent" ref="649796088"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">420</int>
+                                               <reference key="object" ref="755631768"/>
+                                               <reference key="parent" ref="0"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">490</int>
+                                               <reference key="object" ref="448692316"/>
+                                               <object class="NSMutableArray" key="children">
+                                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                               </object>
+                                               <reference key="parent" ref="649796088"/>
+                                       </object>
+                                       <object class="IBObjectRecord">
+                                               <int key="objectID">534</int>
+                                               <reference key="object" ref="209256642"/>
+                                               <reference key="parent" ref="0"/>
+                                       </object>
+                               </object>
+                       </object>
+                       <object class="NSMutableDictionary" key="flattenedProperties">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                               <object class="NSArray" key="dict.sortedKeys">
+                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                       <string>-1.IBPluginDependency</string>
+                                       <string>-2.IBPluginDependency</string>
+                                       <string>-3.IBPluginDependency</string>
+                                       <string>134.IBPluginDependency</string>
+                                       <string>136.IBPluginDependency</string>
+                                       <string>149.IBPluginDependency</string>
+                                       <string>19.IBPluginDependency</string>
+                                       <string>217.IBPluginDependency</string>
+                                       <string>236.IBPluginDependency</string>
+                                       <string>29.IBPluginDependency</string>
+                                       <string>295.IBPluginDependency</string>
+                                       <string>375.IBPluginDependency</string>
+                                       <string>420.IBPluginDependency</string>
+                                       <string>490.IBPluginDependency</string>
+                                       <string>534.IBPluginDependency</string>
+                                       <string>56.IBPluginDependency</string>
+                                       <string>57.IBPluginDependency</string>
+                                       <string>58.IBPluginDependency</string>
+                                       <string>83.IBPluginDependency</string>
+                               </object>
+                               <object class="NSArray" key="dict.values">
+                                       <bool key="EncodedWithXMLCoder">YES</bool>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                                       <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+                               </object>
+                       </object>
+                       <object class="NSMutableDictionary" key="unlocalizedProperties">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                               <reference key="dict.sortedKeys" ref="0"/>
+                               <reference key="dict.values" ref="0"/>
+                       </object>
+                       <nil key="activeLocalization"/>
+                       <object class="NSMutableDictionary" key="localizations">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                               <reference key="dict.sortedKeys" ref="0"/>
+                               <reference key="dict.values" ref="0"/>
+                       </object>
+                       <nil key="sourceID"/>
+                       <int key="maxID">544</int>
+               </object>
+               <object class="IBClassDescriber" key="IBDocument.Classes"/>
+               <int key="IBDocument.localizationMode">0</int>
+               <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
+               <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
+                       <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
+                       <integer value="3000" key="NS.object.0"/>
+               </object>
+               <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
+               <int key="IBDocument.defaultPropertyAccessControl">3</int>
+               <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
+                       <bool key="EncodedWithXMLCoder">YES</bool>
+                       <object class="NSArray" key="dict.sortedKeys">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                               <string>NSMenuCheckmark</string>
+                               <string>NSMenuMixedState</string>
+                       </object>
+                       <object class="NSArray" key="dict.values">
+                               <bool key="EncodedWithXMLCoder">YES</bool>
+                               <string>{11, 11}</string>
+                               <string>{10, 3}</string>
+                       </object>
+               </object>
+       </data>
+</archive>
diff --git a/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Info.plist b/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/Info.plist
new file mode 100644 (file)
index 0000000..459b752
--- /dev/null
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>CFBundleDevelopmentRegion</key>
+       <string>en</string>
+       <key>CFBundleExecutable</key>
+       <string>${EXECUTABLE_NAME}</string>
+       <key>CFBundleIconFile</key>
+       <string>IMG.icns</string>
+       <key>LSApplicationCategoryType</key>
+       <string></string>
+       <key>CFBundleIdentifier</key>
+       <string>com.imgtec.${PRODUCT_NAME:rfc1034identifier}</string>
+       <key>CFBundleInfoDictionaryVersion</key>
+       <string>6.0</string>
+       <key>CFBundleName</key>
+       <string>${PRODUCT_NAME}</string>
+       <key>CFBundlePackageType</key>
+       <string>APPL</string>
+       <key>CFBundleShortVersionString</key>
+       <string>1.0</string>
+       <key>CFBundleSignature</key>
+       <string>????</string>
+       <key>CFBundleVersion</key>
+       <string>1</string>
+       <key>LSMinimumSystemVersion</key>
+       <string>${MACOSX_DEPLOYMENT_TARGET}</string>
+       <key>NSHumanReadableCopyright</key>
+       <string>Copyright (c) Imagination Technologies Ltd. All rights reserved.</string>
+       <key>NSMainNibFile</key>
+       <string>MainMenu</string>
+       <key>NSPrincipalClass</key>
+       <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/OGLES2HelloAPI_OSX.mm b/tests/third_party/PowerVR/Examples/Beginner/01_HelloAPI/OGLES2/OGLES2HelloAPI_OSX.mm
new file mode 100644 (file)
index 0000000..302a3ba
--- /dev/null
@@ -0,0 +1,709 @@
+/*******************************************************************************************************************************************
+
+ @File         OGLES2HelloAPI_OSX.mm
+
+ @Title        OpenGL ES 2.0 HelloAPI Tutorial
+
+ @Version
+
+ @Copyright    Copyright (c) Imagination Technologies Limited.
+
+ @Platform
+
+ @Description  Basic Tutorial that shows step-by-step how to initialize OpenGL ES 2.0, use it for drawing a triangle and terminate it.
+ Entry Point: main
+
+ *******************************************************************************************************************************************/
+/*******************************************************************************************************************************************
+ Include Files
+ *******************************************************************************************************************************************/
+#include <EGL/egl.h>
+#include <GLES2/gl2.h>
+#import <AppKit/NSApplication.h>
+#import <AppKit/NSWindow.h>
+#import <AppKit/NSScreen.h>
+#import <AppKit/NSView.h>
+
+/*******************************************************************************************************************************************
+ Defines
+ *******************************************************************************************************************************************/
+// Index to bind the attributes to vertex shaders
+#define VERTEX_ARRAY   0
+#define KFPS                   120.0
+
+// Width and height of the window
+#define WIDTH  800
+#define HEIGHT 600
+
+/*!*****************************************************************************************************************************************
+ Class AppController
+ *******************************************************************************************************************************************/
+@class AppController;
+
+@interface AppController : NSObject <NSApplicationDelegate>
+{
+@private
+       NSTimer*         m_timer;               // timer for rendering our OpenGL content
+       NSWindow*        m_window;      // Our window
+       NSView*          m_view;        // Our view
+    
+    // Shaders
+    GLuint           m_fragShader;
+    GLuint           m_vertexShader;
+    GLuint           m_program;
+    
+    // Vertex buffer objects
+    GLuint           m_vertexBuffer;
+    
+    // EGL variables
+    EGLDisplay       m_Display;
+    EGLSurface       m_Surface;
+    EGLContext       m_Context;
+}
+@end
+
+@implementation AppController
+
+/*!*****************************************************************************************************************************************
+ @Function             testGLError
+ @Input                        functionLastCalled          Function which triggered the error
+ @Return               True if no GL error was detected
+ @Description  Tests for an GL error and prints it in a message box.
+ *******************************************************************************************************************************************/
+- (BOOL) testGLError:(const char *)functionLastCalled
+{
+       /*      glGetError returns the last error that occurred using OpenGL ES, not necessarily the status of the last called function. The user
+        has to check after every single OpenGL ES call or at least once every frame. Usually this would be for debugging only, but for this
+        example it is enabled always
+        */
+       GLenum lastError = glGetError();
+       if (lastError != GL_NO_ERROR)
+       {
+               NSLog(@"%s failed (%x).\n", functionLastCalled, lastError);
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             testEGLError
+ @Input                        functionLastCalled          Function which triggered the error
+ @Return               True if no EGL error was detected
+ @Description  Tests for an EGL error and prints it.
+ *******************************************************************************************************************************************/
+- (BOOL) testEGLError:(const char *)functionLastCalled
+{
+       /*      eglGetError returns the last error that occurred using EGL, not necessarily the status of the last called function. The user has to
+        check after every single EGL call or at least once every frame. Usually this would be for debugging only, but for this example
+        it is enabled always.
+        */
+       EGLint lastError = eglGetError();
+       if (lastError != EGL_SUCCESS)
+       {
+               NSLog(@"%s failed (%x).\n", functionLastCalled, lastError);
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             createEGLDisplay
+ @Output               eglDisplay                                  EGLDisplay created
+ @Return               Whether the function succeeded or not.
+ @Description  Creates an EGLDisplay and initialises it.
+ *******************************************************************************************************************************************/
+- (BOOL) createEGLDisplay:(EGLDisplay &)eglDisplay
+{
+       /*      Get an EGL display.
+        EGL uses the concept of a "display" which in most environments corresponds to a single physical screen. After creating a native
+        display for a given windowing system, EGL can use this handle to get a corresponding EGLDisplay handle to it for use in rendering.
+        Should this fail, EGL is usually able to provide access to a default display. For Null window systems, there is no display so NULL
+        is passed the this function.
+        */
+       eglDisplay = eglGetDisplay((EGLNativeDisplayType)0);
+       if (eglDisplay == EGL_NO_DISPLAY)
+       {
+               printf("Failed to get an EGLDisplay");
+               return FALSE;
+       }
+
+       /*      Initialize EGL.
+        EGL has to be initialized with the display obtained in the previous step. All EGL functions other than eglGetDisplay
+        and eglGetError need an initialised EGLDisplay.
+        If an application is not interested in the EGL version number it can just pass NULL for the second and third parameters, but they
+        are queried here for illustration purposes.
+        */
+       EGLint eglMajorVersion, eglMinorVersion;
+       if (!eglInitialize(eglDisplay, &eglMajorVersion, &eglMinorVersion))
+       {
+               printf("Failed to initialise the EGLDisplay");
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             chooseEGLConfig
+ @Output               eglConfig                   The EGLConfig chosen by the function
+ @Input                        eglDisplay                  The EGLDisplay used by the application
+ @Return               Whether the function succeeded or not.
+ @Description  Chooses an appropriate EGLConfig and return it.
+ *******************************************************************************************************************************************/
+- (BOOL) chooseEGLConfig:(EGLConfig &)eglConfig fromDisplay:(EGLDisplay)eglDisplay
+{
+       /*      Specify the required configuration attributes.
+        An EGL "configuration" describes the capabilities an application requires and the type of surfaces that can be used for drawing.
+        Each implementation exposes a number of different configurations, and an application needs to describe to EGL what capabilities it
+        requires so that an appropriate one can be chosen. The first step in doing this is to create an attribute list, which is an array
+        of key/value pairs which describe particular capabilities requested. In this application nothing special is required so we can query
+        the minimum of needing it to render to a window, and being OpenGL ES 2.0 capable.
+        */
+       const EGLint configurationAttributes[] =
+       {
+               EGL_SURFACE_TYPE,               EGL_WINDOW_BIT,
+               EGL_RENDERABLE_TYPE,    EGL_OPENGL_ES2_BIT,
+               EGL_NONE
+       };
+
+       /*      Find a suitable EGLConfig
+        eglChooseConfig is provided by EGL to provide an easy way to select an appropriate configuration. It takes in the capabilities
+        specified in the attribute list, and returns a list of available configurations that match or exceed the capabilities requested.
+        Details of all the possible attributes and how they are selected for by this function are available in the EGL reference pages here:
+        http://www.khronos.org/registry/egl/sdk/docs/man/xhtml/eglChooseConfig.html
+        It is also possible to simply get the entire list of configurations and use a custom algorithm to choose a suitable one, as many
+        advanced applications choose to do. For this application however, taking the first EGLConfig that the function returns suits
+        its needs perfectly, so we limit it to returning a single EGLConfig.
+        */
+       EGLint configsReturned;
+       if (!eglChooseConfig(eglDisplay, configurationAttributes, &eglConfig, 1, &configsReturned) || (configsReturned != 1))
+       {
+               printf("Failed to choose a suitable config.");
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             createEGLSurface
+ @Output               eglSurface                                      The EGLSurface created
+ @Input                        eglDisplay                  The EGLDisplay used by the application
+ @Input                        eglConfig                   An EGLConfig chosen by the application
+ @Input         view                        The NSView to render to
+ @Return               Whether the function succeeds or not.
+ @Description  Creates an EGLSurface for the screen
+ *******************************************************************************************************************************************/
+- (BOOL) createEGLSurface:(EGLSurface &)eglSurface fromDisplay:(EGLDisplay)eglDisplay withConfig:(EGLConfig)eglConfig
+                                withView:(NSView *)view
+{
+       /*      Create an EGLSurface for rendering.
+        Using a native window created earlier and a suitable eglConfig, a surface is created that can be used to render OpenGL ES calls to.
+        There are three main surface types in EGL, which can all be used in the same way once created but work slightly differently:
+        - Window Surfaces  - These are created from a native window and are drawn to the screen.
+        - Pixmap Surfaces  - These are created from a native windowing system as well, but are offscreen and are not displayed to the user.
+        - PBuffer Surfaces - These are created directly within EGL, and like Pixmap Surfaces are offscreen and thus not displayed.
+        The offscreen surfaces are useful for non-rendering contexts and in certain other scenarios, but for most applications the main
+        surface used will be a window surface as performed below. For NULL window systems, there are no actual windows, so NULL is passed
+        to this function.
+        */
+       eglSurface = eglCreateWindowSurface(eglDisplay, eglConfig, (EGLNativeWindowType)view, NULL);
+       if (![self testEGLError:"eglCreateWindowSurface"])
+       {
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             setupEGLContext
+ @Output               eglContext                  The EGLContext created by this function
+ @Input                        eglDisplay                  The EGLDisplay used by the application
+ @Input                        eglConfig                   An EGLConfig chosen by the application
+ @Input                        eglSurface                                      The EGLSurface created by the application
+ @Return               Whether the function succeeds or not.
+ @Description  Sets up the EGLContext, creating it and then installing it to the current thread.
+ *******************************************************************************************************************************************/
+- (BOOL) setupEGLContext:(EGLContext &)eglContext fromDisplay:(EGLDisplay)eglDisplay withConfig:(EGLConfig)eglConfig
+                        withSurface:(EGLSurface)eglSurface
+{
+       /*      Make OpenGL ES the current API.
+        EGL needs a way to know that any subsequent EGL calls are going to be affecting OpenGL ES,
+        rather than any other API (such as OpenVG).
+        */
+       eglBindAPI(EGL_OPENGL_ES_API);
+       if (![self testEGLError:"eglBindAPI"])
+       {
+               return FALSE;
+       }
+
+       /*      Create a context.
+        EGL has to create what is known as a context for OpenGL ES. The concept of a context is OpenGL ES's way of encapsulating any
+        resources and state. What appear to be "global" functions in OpenGL actually only operate on the current context. A context
+        is required for any operations in OpenGL ES.
+        Similar to an EGLConfig, a context takes in a list of attributes specifying some of its capabilities. However in most cases this
+        is limited to just requiring the version of the OpenGL ES context required - In this case, OpenGL ES 2.0.
+        */
+       EGLint contextAttributes[] =
+       {
+               EGL_CONTEXT_CLIENT_VERSION, 2,
+               EGL_NONE
+       };
+
+       // Create the context with the context attributes supplied
+       eglContext = eglCreateContext(eglDisplay, eglConfig, NULL, contextAttributes);
+       if (![self testEGLError:"eglCreateContext"])
+       {
+               return FALSE;
+       }
+
+       /*      Bind the context to the current thread.
+        Due to the way OpenGL uses global functions, contexts need to be made current so that any function call can operate on the correct
+        context. Specifically, make current will bind the context to the thread it's called from, and unbind it from any others. To use
+        multiple contexts at the same time, users should use multiple threads and synchronise between them.
+        */
+       eglMakeCurrent(eglDisplay, eglSurface, eglSurface, eglContext);
+       if (![self testEGLError:"eglMakeCurrent"])
+       {
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             initialiseBuffer
+ @Output               vertexBuffer                Handle to a vertex buffer object
+ @Return               Whether the function succeeds or not.
+ @Description  Initialises shaders, buffers and other state required to begin rendering with OpenGL ES
+ *******************************************************************************************************************************************/
+- (BOOL) initialiseBuffer:(GLuint &)vertexBuffer
+{
+       /*      Concept: Vertices
+        When rendering a polygon or model to screen, OpenGL ES has to be told where to draw the object, and more fundamentally what shape
+        it is. The data used to do this is referred to as vertices, points in 3D space which are usually collected into groups of three
+        to render as triangles. Fundamentally, any advanced 3D shape in OpenGL ES is constructed from a series of these vertices - each
+        vertex representing one corner of a polygon.
+        */
+
+       /*      Concept: Buffer Objects
+        To operate on any data, OpenGL first needs to be able to access it. The GPU maintains a separate pool of memory it uses independent
+        of the CPU. Whilst on many embedded systems these are in the same physical memory, the distinction exists so that they can use and
+        allocate memory without having to worry about synchronising with any other processors in the device.
+        To this end, data needs to be uploaded into buffers, which are essentially a reserved bit of memory for the GPU to use. By creating
+        a buffer and giving it some data we can tell the GPU how to render a triangle.
+        */
+
+       // Vertex data containing the positions of each point of the triangle
+       GLfloat vertexData[] = {-0.4f,-0.4f, 0.0f,  // Bottom Left
+                                    0.4f,-0.4f, 0.0f,  // Bottom Right
+                                    0.0f, 0.4f, 0.0f}; // Top Middle
+
+       // Generate a buffer object
+       glGenBuffers(1, &vertexBuffer);
+
+       // Bind buffer as an vertex buffer so we can fill it with data
+       glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
+
+       /*      Set the buffer's size, data and usage
+        Note the last argument - GL_STATIC_DRAW. This tells the driver that we intend to read from the buffer on the GPU, and don't intend
+        to modify the data until we're done with it.
+        */
+       glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
+
+       if (![self testGLError:"glBufferData"])
+       {
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             initialiseShaders
+ @Output               fragmentShader              Handle to a fragment shader
+ @Output               vertexShader                Handle to a vertex shader
+ @Output               shaderProgram               Handle to a shader program containing the fragment and vertex shader
+ @Return               Whether the function succeeds or not.
+ @Description  Initialises shaders, buffers and other state required to begin rendering with OpenGL ES
+ *******************************************************************************************************************************************/
+-(BOOL) initialiseFragmentShader:(GLuint &)fragmentShader andVertexShader:(GLuint &)vertexShader withProgram:(GLuint &)shaderProgram
+{
+       /*      Concept: Shaders
+        OpenGL ES 2.0 uses what are known as shaders to determine how to draw objects on the screen. Instead of the fixed function
+        pipeline in early OpenGL or OpenGL ES 1.x, users can now programmatically define how vertices are transformed on screen, what
+        data is used where, and how each pixel on the screen is coloured.
+        These shaders are written in GL Shading Language ES: http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf
+        which is usually abbreviated to simply "GLSL ES".
+        Each shader is compiled on-device and then linked into a shader program, which combines a vertex and fragment shader into a form
+        that the OpenGL ES implementation can execute.
+        */
+
+       /*      Concept: Fragment Shaders
+        In a final buffer of image data, each individual point is referred to as a pixel. Fragment shaders are the part of the pipeline
+        which determine how these final pixels are coloured when drawn to the framebuffer. When data is passed through here, the positions
+        of these pixels is already set, all that's left to do is set the final colour based on any defined inputs.
+        The reason these are called "fragment" shaders instead of "pixel" shaders is due to a small technical difference between the two
+        concepts. When you colour a fragment, it may not be the final colour which ends up on screen. This is particularly true when
+        performing blending, where multiple fragments can contribute to the final pixel colour.
+        */
+       const char* const fragmentShaderSource = "\
+       void main (void)\
+       {\
+       gl_FragColor = vec4(1.0, 1.0, 0.66 ,1.0);\
+       }";
+
+       // Create a fragment shader object
+       fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
+
+       // Load the source code into it
+       glShaderSource(fragmentShader, 1, (const char**)&fragmentShaderSource, NULL);
+
+       // Compile the source code
+       glCompileShader(fragmentShader);
+
+       // Check that the shader compiled
+       GLint isShaderCompiled;
+       glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &isShaderCompiled);
+       if (!isShaderCompiled)
+       {
+               // If an error happened, first retrieve the length of the log message
+               int infoLogLength, charactersWritten;
+               glGetShaderiv(fragmentShader, GL_INFO_LOG_LENGTH, &infoLogLength);
+
+               // Allocate enough space for the message and retrieve it
+               char* infoLog = new char[infoLogLength];
+               glGetShaderInfoLog(fragmentShader, infoLogLength, &charactersWritten, infoLog);
+
+               // Display the error in a dialog box
+               infoLogLength>1 ? printf("%s", infoLog) : printf("Failed to compile fragment shader.");
+
+               delete[] infoLog;
+               return FALSE;
+       }
+
+       /*      Concept: Vertex Shaders
+        Vertex shaders primarily exist to allow a developer to express how to orient vertices in 3D space, through transformations like
+        Scaling, Translation or Rotation. Using the same basic layout and structure as a fragment shader, these take in vertex data and
+        output a fully transformed set of positions. Other inputs are also able to be used such as normals or texture coordinates, and can
+        also be transformed and output alongside the position data.
+        */
+       // Vertex shader code
+       const char* const vertexShaderSource = "\
+       attribute highp vec4    myVertex;\
+       uniform mediump mat4    transformationMatrix;\
+       void main(void)\
+       {\
+       gl_Position = transformationMatrix * myVertex;\
+       }";
+
+       // Create a vertex shader object
+       vertexShader = glCreateShader(GL_VERTEX_SHADER);
+
+       // Load the source code into the shader
+       glShaderSource(vertexShader, 1, (const char**)&vertexShaderSource, NULL);
+
+       // Compile the shader
+       glCompileShader(vertexShader);
+
+       // Check the shader has compiled
+       glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &isShaderCompiled);
+       if (!isShaderCompiled)
+       {
+               // If an error happened, first retrieve the length of the log message
+               int infoLogLength, charactersWritten;
+               glGetShaderiv(vertexShader, GL_INFO_LOG_LENGTH, &infoLogLength);
+
+               // Allocate enough space for the message and retrieve it
+               char* infoLog = new char[infoLogLength];
+               glGetShaderInfoLog(vertexShader, infoLogLength, &charactersWritten, infoLog);
+
+               // Display the error in a dialog box
+               infoLogLength>1 ? printf("%s", infoLog) : printf("Failed to compile vertex shader.");
+
+               delete[] infoLog;
+               return FALSE;
+       }
+
+       // Create the shader program
+       shaderProgram = glCreateProgram();
+
+       // Attach the fragment and vertex shaders to it
+       glAttachShader(shaderProgram, fragmentShader);
+       glAttachShader(shaderProgram, vertexShader);
+
+       // Bind the vertex attribute "myVertex" to location VERTEX_ARRAY (0)
+       glBindAttribLocation(shaderProgram, VERTEX_ARRAY, "myVertex");
+
+       // Link the program
+       glLinkProgram(shaderProgram);
+
+       // Check if linking succeeded in the same way we checked for compilation success
+       GLint isLinked;
+       glGetProgramiv(shaderProgram, GL_LINK_STATUS, &isLinked);
+       if (!isLinked)
+       {
+               // If an error happened, first retrieve the length of the log message
+               int infoLogLength, charactersWritten;
+               glGetProgramiv(shaderProgram, GL_INFO_LOG_LENGTH, &infoLogLength);
+
+               // Allocate enough space for the message and retrieve it
+               char* infoLog = new char[infoLogLength];
+               glGetProgramInfoLog(shaderProgram, infoLogLength, &charactersWritten, infoLog);
+
+               // Display the error in a dialog box
+               infoLogLength>1 ? printf("%s", infoLog) : printf("Failed to link shader program.");
+
+               delete[] infoLog;
+               return FALSE;
+       }
+
+       /*      Use the Program
+        Calling glUseProgram tells OpenGL ES that the application intends to use this program for rendering. Now that it's installed into
+        the current state, any further glDraw* calls will use the shaders contained within it to process scene data. Only one program can
+        be active at once, so in a multi-program application this function would be called in the render loop. Since this application only
+        uses one program it can be installed in the current state and left there.
+        */
+       glUseProgram(shaderProgram);
+
+       if (![self testGLError:"glUseProgram"])
+       {
+               return FALSE;
+       }
+
+       return TRUE;
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             applicationDidFinishLaunching
+ @Input                notification
+ @Description  Called when the application has finished launching.
+ *******************************************************************************************************************************************/
+- (void) applicationDidFinishLaunching:(NSNotification *)notification
+{
+    // Create our window
+    NSRect frame = NSMakeRect(0,0,WIDTH, HEIGHT);
+    m_window = [[NSWindow alloc] initWithContentRect:frame styleMask:NSMiniaturizableWindowMask | NSTitledWindowMask | NSClosableWindowMask
+                                                                                        backing:NSBackingStoreBuffered defer:NO];
+    
+    if(!m_window)
+    {
+        NSLog(@"Failed to allocated the window.");
+        [self terminateApp];
+    }
+    
+    [m_window setTitle:@"OGLES2HelloAPI"];
+    
+    // Create our view
+    m_view = [[NSView alloc] initWithFrame:frame];
+    
+    // Now we have a view, add it to our window
+    [m_window setContentView:m_view];
+    [m_window makeKeyAndOrderFront:nil];
+
+    // Add an observer so when our window is closed we terminate the app
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(terminateApp) name:NSWindowWillCloseNotification
+                                                                                          object:m_window];
+    
+    EGLConfig config;
+
+    // Create and Initialise an EGLDisplay
+    if(![self createEGLDisplay:m_Display])
+       {
+               [self terminateApp];
+       }
+
+       // Choose an EGLConfig for the application, used when setting up the rendering surface and EGLContext
+       if(![self chooseEGLConfig:config fromDisplay:m_Display])
+       {
+               [self terminateApp];
+       }
+
+       // Create an EGLSurface for rendering
+       if(![self createEGLSurface:m_Surface fromDisplay:m_Display withConfig:config withView:m_view])
+       {
+               [self terminateApp];
+       }
+
+       // Setup the EGL Context from the other EGL constructs created so far, so that the application is ready to submit OpenGL ES commands
+       if(![self setupEGLContext:m_Context fromDisplay:m_Display withConfig:config withSurface:m_Surface])
+       {
+               [self terminateApp];
+       }
+
+       // Initialise the vertex data in the application
+       if(![self initialiseBuffer:m_vertexBuffer])
+       {
+               [self terminateApp];
+       }
+
+       // Initialise the fragment and vertex shaders used in the application
+       if(![self initialiseFragmentShader:m_fragShader andVertexShader:m_vertexBuffer withProgram:m_program])
+       {
+               [self terminateApp];
+       }
+
+    // Setup a timer to redraw the view at a regular interval
+    m_timer = [NSTimer scheduledTimerWithTimeInterval:(1.0 / KFPS) target:self selector:@selector(renderScene) userInfo:nil repeats:YES];
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             RenderScene
+ @Input                        eglDisplay                  The EGLDisplay used by the application
+ @Input                        eglSurface                                      The EGLSurface created by the application
+ @Return               Whether the function succeeds or not.
+ @Description  Renders the scene to the framebuffer. Usually called within a loop.
+ *******************************************************************************************************************************************/
+- (BOOL) renderScene
+{
+       /*      Set the clear color
+        At the start of a frame, generally you clear the image to tell OpenGL ES that you're done with whatever was there before and want to
+        draw a new frame. In order to do that however, OpenGL ES needs to know what colour to set in the image's place. glClearColor
+        sets this value as 4 floating point values between 0.0 and 1.0, as the Red, Green, Blue and Alpha channels. Each value represents
+        the intensity of the particular channel, with all 0.0 being transparent black, and all 1.0 being opaque white. Subsequent calls to
+        glClear with the colour bit will clear the frame buffer to this value.
+        The functions glClearDepth and glClearStencil allow an application to do the same with depth and stencil values respectively.
+        */
+       glClearColor(0.6f, 0.8f, 1.0f, 1.0f);
+
+       /*      Clears the color buffer.
+        glClear is used here with the Colour Buffer to clear the colour. It can also be used to clear the depth or stencil buffer using
+        GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT, respectively.
+        */
+       glClear(GL_COLOR_BUFFER_BIT);
+
+       // Get the location of the transformation matrix in the shader using its name
+       int matrixLocation = glGetUniformLocation(m_program, "transformationMatrix");
+
+       // Matrix used to specify the orientation of the triangle on screen.
+       const float transformationMatrix[] =
+       {
+               1.0f,0.0f,0.0f,0.0f,
+               0.0f,1.0f,0.0f,0.0f,
+               0.0f,0.0f,1.0f,0.0f,
+               0.0f,0.0f,0.0f,1.0f
+       };
+
+       // Pass the transformationMatrix to the shader using its location
+       glUniformMatrix4fv( matrixLocation, 1, GL_FALSE, transformationMatrix);
+       if (![self testGLError:"glUniformMatrix4fv"])
+       {
+               return FALSE;
+       }
+
+       // Enable the user-defined vertex array
+       glEnableVertexAttribArray(VERTEX_ARRAY);
+
+       // Sets the vertex data to this attribute index, with the number of floats in each position
+       glVertexAttribPointer(VERTEX_ARRAY, 3, GL_FLOAT, GL_FALSE, 0, 0);
+       if (![self testGLError:"glVertexAttribPointer"])
+       {
+               return FALSE;
+       }
+
+       /*      Draw the triangle
+        glDrawArrays is a draw call, and executes the shader program using the vertices and other state set by the user. Draw calls are the
+        functions which tell OpenGL ES when to actually draw something to the framebuffer given the current state.
+        glDrawArrays causes the vertices to be submitted sequentially from the position given by the "first" argument until it has processed
+        "count" vertices. Other draw calls exist, notably glDrawElements which also accepts index data to allow the user to specify that
+        some vertices are accessed multiple times, without copying the vertex multiple times.
+        Others include versions of the above that allow the user to draw the same object multiple times with slightly different data, and
+        a version of glDrawElements which allows a user to restrict the actual indices accessed.
+        */
+       glDrawArrays(GL_TRIANGLES, 0, 3);
+       if (![self testGLError:"glDrawArrays"])
+       {
+               return FALSE;
+       }
+
+       /*      Present the display data to the screen.
+        When rendering to a Window surface, OpenGL ES is double buffered. This means that OpenGL ES renders directly to one frame buffer,
+        known as the back buffer, whilst the display reads from another - the front buffer. eglSwapBuffers signals to the windowing system
+        that OpenGL ES 2.0 has finished rendering a scene, and that the display should now draw to the screen from the new data. At the same
+        time, the front buffer is made available for OpenGL ES 2.0 to start rendering to. In effect, this call swaps the front and back
+        buffers.
+        */
+       if (!eglSwapBuffers(m_Display, m_Surface) )
+       {
+               [self testGLError:"eglSwapBuffers"];
+               return FALSE;
+       }
+       
+       return TRUE;
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             deInitialiseGLState
+ @Description  Releases the resources
+ *******************************************************************************************************************************************/
+- (void) deInitialiseGLState
+{
+       // Frees the OpenGL handles for the program and the 2 shaders
+       glDeleteShader(m_fragShader);
+       glDeleteShader(m_vertexShader);
+       glDeleteProgram(m_program);
+
+       // Delete the VBO as it is no longer needed
+       glDeleteBuffers(1, &m_vertexBuffer);
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             releaseEGLState
+ @Input                        eglDisplay                   The EGLDisplay used by the application
+ @Description  Releases all resources allocated by EGL
+ *******************************************************************************************************************************************/
+- (void) releaseEGLState:(EGLDisplay)eglDisplay
+{
+       // To release the resources in the context, first the context has to be released from its binding with the current thread.
+       eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+
+       // Terminate the display, and any resources associated with it (including the EGLContext)
+       eglTerminate(eglDisplay);
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             applicationWillTerminate
+ @Description   Called when the app is about to terminate.
+ *******************************************************************************************************************************************/
+- (void) applicationWillTerminate:(NSNotification *)notification
+{
+    // Release our timer
+    [m_timer invalidate];
+
+       [self deInitialiseGLState];
+       [self releaseEGLState:m_Display];
+
+    // Release our view and window
+    [m_view release];
+    m_view = nil;
+    
+    [m_window release];
+    m_window = nil;
+}
+
+/*!*****************************************************************************************************************************************
+ @Function             terminateApp
+ @Description   Attempts to immediately terminate the application.
+ *******************************************************************************************************************************************/
+- (void) terminateApp
+{
+    [NSApp terminate:nil];
+}
+
+@end
+
+/*!*****************************************************************************************************************************************
+ @Function             main
+ @Input                        argc           Number of arguments passed to the application, ignored.
+ @Input                        argv           Command line strings passed to the application, ignored.
+ @Return               Result code to send to the Operating System
+ @Description  Main function of the program, executes other functions.
+ *******************************************************************************************************************************************/
+int main(int argc, char **argv)
+{
+       return NSApplicationMain(argc, (const char **)argv);
+}
+