Kaynağa Gözat

Merge pull request #26 from blackberry-gaming/next-setaylor

Added Support for MacOSX using XCode 4.0
Sean Paul Taylor 14 yıl önce
ebeveyn
işleme
824eed8e4a
58 değiştirilmiş dosya ile 2006 ekleme ve 150 silme
  1. 4 4
      gameplay-encoder/gameplay-encoder.vcxproj
  2. 546 0
      gameplay-encoder/gameplay-encoder.xcodeproj/project.pbxproj
  3. 32 18
      gameplay-encoder/src/Base.h
  4. 1 1
      gameplay-encoder/src/DAEOptimizer.cpp
  5. 2 2
      gameplay-encoder/src/DAESceneEncoder.cpp
  6. 1 1
      gameplay-encoder/src/DAEUtil.cpp
  7. 2 8
      gameplay-encoder/src/EncoderArguments.h
  8. 3 3
      gameplay-encoder/src/FileIO.cpp
  9. 4 8
      gameplay-encoder/src/FileIO.h
  10. 2 3
      gameplay-encoder/src/Mesh.cpp
  11. 1 0
      gameplay-encoder/src/Mesh.h
  12. 1 1
      gameplay-encoder/src/MeshSkin.cpp
  13. 2 1
      gameplay-encoder/src/MeshSubSet.cpp
  14. 10 7
      gameplay-encoder/src/MeshSubSet.h
  15. 2 7
      gameplay-encoder/src/Object.h
  16. 22 0
      gameplay.xcworkspace/contents.xcworkspacedata
  17. 3 3
      gameplay/gameplay.vcxproj
  18. 10 10
      gameplay/gameplay.vcxproj.filters
  19. 717 0
      gameplay/gameplay.xcodeproj/project.pbxproj
  20. 2 0
      gameplay/res/shaders/bumped-specular.fsh
  21. 3 1
      gameplay/res/shaders/bumped-specular.vsh
  22. 2 0
      gameplay/res/shaders/bumped.fsh
  23. 2 0
      gameplay/res/shaders/colored-specular.fsh
  24. 3 1
      gameplay/res/shaders/colored-specular.vsh
  25. 2 0
      gameplay/res/shaders/colored.fsh
  26. 3 1
      gameplay/res/shaders/colored.vsh
  27. 2 0
      gameplay/res/shaders/diffuse-specular.fsh
  28. 3 1
      gameplay/res/shaders/diffuse-specular.vsh
  29. 2 0
      gameplay/res/shaders/diffuse.fsh
  30. 3 1
      gameplay/res/shaders/diffuse.vsh
  31. 2 0
      gameplay/res/shaders/parallax-specular.fsh
  32. 3 1
      gameplay/res/shaders/parallax-specular.vsh
  33. 2 0
      gameplay/res/shaders/parallax.fsh
  34. 3 1
      gameplay/res/shaders/parallax.vsh
  35. 4 2
      gameplay/res/shaders/solid.fsh
  36. 1 1
      gameplay/res/shaders/solid.vsh
  37. 2 0
      gameplay/res/shaders/textured.fsh
  38. 2 1
      gameplay/src/AnimationClip.cpp
  39. 0 1
      gameplay/src/AnimationController.cpp
  40. 144 10
      gameplay/src/AudioBuffer.cpp
  41. 4 0
      gameplay/src/AudioBuffer.h
  42. 34 8
      gameplay/src/AudioController.cpp
  43. 2 1
      gameplay/src/AudioController.h
  44. 22 11
      gameplay/src/Base.h
  45. 1 1
      gameplay/src/Curve.cpp
  46. 17 3
      gameplay/src/Effect.cpp
  47. 3 2
      gameplay/src/FileSystem.cpp
  48. 0 1
      gameplay/src/Font.cpp
  49. 2 2
      gameplay/src/Joint.cpp
  50. 335 0
      gameplay/src/PlatformMacOSX.mm
  51. 2 3
      gameplay/src/Properties.cpp
  52. 1 1
      gameplay/src/RenderState.cpp
  53. 0 1
      gameplay/src/SpriteBatch.cpp
  54. 0 2
      gameplay/src/Texture.h
  55. 24 0
      gameplay/src/gameplay-main-macosx.mm
  56. 3 4
      gameplay/src/gameplay-main-qnx.cpp
  57. 1 1
      gameplay/src/gameplay-main-win32.cpp
  58. 0 10
      gameplay/src/gameplay-main.h

+ 4 - 4
gameplay-encoder/gameplay-encoder.vcxproj

@@ -144,11 +144,11 @@
     <Link>
       <SubSystem>Console</SubSystem>
       <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>;../external-deps/freetype2/lib;../external-deps/collada-dom/lib</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>../external-deps/freetype2/lib/win32;../external-deps/collada-dom/lib/win32</AdditionalLibraryDirectories>
       <AdditionalDependencies>freetype245.lib;libcollada14dom22-d.lib;%(AdditionalDependencies)</AdditionalDependencies>
     </Link>
     <PostBuildEvent>
-      <Command>copy /Y "$(ProjectDir)..\external-deps\collada-dom\lib\*.dll" "$(TargetDir)"</Command>
+      <Command>copy /Y "$(ProjectDir)..\external-deps\collada-dom\lib\win32\*.dll" "$(TargetDir)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
@@ -168,10 +168,10 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalDependencies>freetype245.lib;libcollada14dom22-d.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>;../external-deps/freetype2/lib;../external-deps/collada-dom/lib</AdditionalLibraryDirectories>
+      <AdditionalLibraryDirectories>../external-deps/freetype2/lib/win32;../external-deps/collada-dom/lib/win32</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>copy /Y "$(ProjectDir)..\external-deps\collada-dom\lib\*.dll" "$(TargetDir)"</Command>
+      <Command>copy /Y "$(ProjectDir)..\external-deps\collada-dom\lib\win32\*.dll" "$(TargetDir)"</Command>
     </PostBuildEvent>
   </ItemDefinitionGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

+ 546 - 0
gameplay-encoder/gameplay-encoder.xcodeproj/project.pbxproj

@@ -0,0 +1,546 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		42475D7C14720ECE00610A6A /* libdom.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42475D7B14720ECE00610A6A /* libdom.a */; };
+		42C8EE0A14724CD700E43619 /* Animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDB714724CD700E43619 /* Animation.cpp */; };
+		42C8EE0B14724CD700E43619 /* AnimationChannel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDB914724CD700E43619 /* AnimationChannel.cpp */; };
+		42C8EE0C14724CD700E43619 /* Animations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDBB14724CD700E43619 /* Animations.cpp */; };
+		42C8EE0D14724CD700E43619 /* Base.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDBD14724CD700E43619 /* Base.cpp */; };
+		42C8EE0E14724CD700E43619 /* Camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDBF14724CD700E43619 /* Camera.cpp */; };
+		42C8EE0F14724CD700E43619 /* CameraInstance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDC114724CD700E43619 /* CameraInstance.cpp */; };
+		42C8EE1014724CD700E43619 /* DAEChannelTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDC314724CD700E43619 /* DAEChannelTarget.cpp */; };
+		42C8EE1114724CD700E43619 /* DAEOptimizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDC514724CD700E43619 /* DAEOptimizer.cpp */; };
+		42C8EE1214724CD700E43619 /* DAESceneEncoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDC714724CD700E43619 /* DAESceneEncoder.cpp */; };
+		42C8EE1314724CD700E43619 /* DAEUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDC914724CD700E43619 /* DAEUtil.cpp */; };
+		42C8EE1414724CD700E43619 /* Effect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDCB14724CD700E43619 /* Effect.cpp */; };
+		42C8EE1514724CD700E43619 /* EncoderArguments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDCD14724CD700E43619 /* EncoderArguments.cpp */; };
+		42C8EE1614724CD700E43619 /* FileIO.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDCF14724CD700E43619 /* FileIO.cpp */; };
+		42C8EE1714724CD700E43619 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDD114724CD700E43619 /* Font.cpp */; };
+		42C8EE1814724CD700E43619 /* Glyph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDD314724CD700E43619 /* Glyph.cpp */; };
+		42C8EE1914724CD700E43619 /* GPBDecoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDD514724CD700E43619 /* GPBDecoder.cpp */; };
+		42C8EE1A14724CD700E43619 /* GPBFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDD714724CD700E43619 /* GPBFile.cpp */; };
+		42C8EE1B14724CD700E43619 /* Light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDD914724CD700E43619 /* Light.cpp */; };
+		42C8EE1C14724CD700E43619 /* LightInstance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDDB14724CD700E43619 /* LightInstance.cpp */; };
+		42C8EE1D14724CD700E43619 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDDD14724CD700E43619 /* main.cpp */; };
+		42C8EE1E14724CD700E43619 /* Material.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDDE14724CD700E43619 /* Material.cpp */; };
+		42C8EE1F14724CD700E43619 /* MaterialParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDE014724CD700E43619 /* MaterialParameter.cpp */; };
+		42C8EE2014724CD700E43619 /* Matrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDE214724CD700E43619 /* Matrix.cpp */; };
+		42C8EE2114724CD700E43619 /* Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDE414724CD700E43619 /* Mesh.cpp */; };
+		42C8EE2214724CD700E43619 /* MeshPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDE614724CD700E43619 /* MeshPart.cpp */; };
+		42C8EE2314724CD700E43619 /* MeshSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDE814724CD700E43619 /* MeshSkin.cpp */; };
+		42C8EE2414724CD700E43619 /* MeshSubSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDEA14724CD700E43619 /* MeshSubSet.cpp */; };
+		42C8EE2514724CD700E43619 /* Model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDEC14724CD700E43619 /* Model.cpp */; };
+		42C8EE2614724CD700E43619 /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDEE14724CD700E43619 /* Node.cpp */; };
+		42C8EE2714724CD700E43619 /* Object.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDF014724CD700E43619 /* Object.cpp */; };
+		42C8EE2814724CD700E43619 /* Quaternion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDF214724CD700E43619 /* Quaternion.cpp */; };
+		42C8EE2914724CD700E43619 /* Reference.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDF414724CD700E43619 /* Reference.cpp */; };
+		42C8EE2A14724CD700E43619 /* ReferenceTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDF614724CD700E43619 /* ReferenceTable.cpp */; };
+		42C8EE2B14724CD700E43619 /* Scene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDF814724CD700E43619 /* Scene.cpp */; };
+		42C8EE2C14724CD700E43619 /* StringUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDFA14724CD700E43619 /* StringUtil.cpp */; };
+		42C8EE2D14724CD700E43619 /* Transform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDFC14724CD700E43619 /* Transform.cpp */; };
+		42C8EE2E14724CD700E43619 /* TTFFontEncoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EDFE14724CD700E43619 /* TTFFontEncoder.cpp */; };
+		42C8EE2F14724CD700E43619 /* Vector2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EE0014724CD700E43619 /* Vector2.cpp */; };
+		42C8EE3014724CD700E43619 /* Vector3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EE0214724CD700E43619 /* Vector3.cpp */; };
+		42C8EE3114724CD700E43619 /* Vector4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EE0414724CD700E43619 /* Vector4.cpp */; };
+		42C8EE3214724CD700E43619 /* Vertex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EE0614724CD700E43619 /* Vertex.cpp */; };
+		42C8EE3314724CD700E43619 /* VertexElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42C8EE0814724CD700E43619 /* VertexElement.cpp */; };
+		42C8EE351472B60100E43619 /* libfreetype.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42C8EE341472B60100E43619 /* libfreetype.a */; };
+		42C8EE371472D7E700E43619 /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 42C8EE361472D7E700E43619 /* libxml2.dylib */; };
+		42C8EE391472DAA300E43619 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 42C8EE381472DAA300E43619 /* libz.dylib */; };
+		42C8EE3B1472DAAE00E43619 /* libbz2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 42C8EE3A1472DAAE00E43619 /* libbz2.dylib */; };
+		42D277591472EFA700D867A4 /* libpcre.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42D277571472EFA700D867A4 /* libpcre.a */; };
+		42D2775A1472EFA700D867A4 /* libpcrecpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42D277581472EFA700D867A4 /* libpcrecpp.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+		42475CE4147208A000610A6A /* CopyFiles */ = {
+			isa = PBXCopyFilesBuildPhase;
+			buildActionMask = 2147483647;
+			dstPath = /usr/share/man/man1/;
+			dstSubfolderSpec = 0;
+			files = (
+			);
+			runOnlyForDeploymentPostprocessing = 1;
+		};
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+		42475CE6147208A000610A6A /* gameplay-encoder */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "gameplay-encoder"; sourceTree = BUILT_PRODUCTS_DIR; };
+		42475D7B14720ECE00610A6A /* libdom.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libdom.a; path = "../external-deps/collada-dom/lib/macosx/libdom.a"; sourceTree = "<group>"; };
+		42C8EDB714724CD700E43619 /* Animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Animation.cpp; path = src/Animation.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDB814724CD700E43619 /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animation.h; path = src/Animation.h; sourceTree = SOURCE_ROOT; };
+		42C8EDB914724CD700E43619 /* AnimationChannel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AnimationChannel.cpp; path = src/AnimationChannel.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDBA14724CD700E43619 /* AnimationChannel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationChannel.h; path = src/AnimationChannel.h; sourceTree = SOURCE_ROOT; };
+		42C8EDBB14724CD700E43619 /* Animations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Animations.cpp; path = src/Animations.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDBC14724CD700E43619 /* Animations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animations.h; path = src/Animations.h; sourceTree = SOURCE_ROOT; };
+		42C8EDBD14724CD700E43619 /* Base.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Base.cpp; path = src/Base.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDBE14724CD700E43619 /* Base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Base.h; path = src/Base.h; sourceTree = SOURCE_ROOT; };
+		42C8EDBF14724CD700E43619 /* Camera.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Camera.cpp; path = src/Camera.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDC014724CD700E43619 /* Camera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Camera.h; path = src/Camera.h; sourceTree = SOURCE_ROOT; };
+		42C8EDC114724CD700E43619 /* CameraInstance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CameraInstance.cpp; path = src/CameraInstance.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDC214724CD700E43619 /* CameraInstance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CameraInstance.h; path = src/CameraInstance.h; sourceTree = SOURCE_ROOT; };
+		42C8EDC314724CD700E43619 /* DAEChannelTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DAEChannelTarget.cpp; path = src/DAEChannelTarget.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDC414724CD700E43619 /* DAEChannelTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DAEChannelTarget.h; path = src/DAEChannelTarget.h; sourceTree = SOURCE_ROOT; };
+		42C8EDC514724CD700E43619 /* DAEOptimizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DAEOptimizer.cpp; path = src/DAEOptimizer.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDC614724CD700E43619 /* DAEOptimizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DAEOptimizer.h; path = src/DAEOptimizer.h; sourceTree = SOURCE_ROOT; };
+		42C8EDC714724CD700E43619 /* DAESceneEncoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DAESceneEncoder.cpp; path = src/DAESceneEncoder.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDC814724CD700E43619 /* DAESceneEncoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DAESceneEncoder.h; path = src/DAESceneEncoder.h; sourceTree = SOURCE_ROOT; };
+		42C8EDC914724CD700E43619 /* DAEUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DAEUtil.cpp; path = src/DAEUtil.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDCA14724CD700E43619 /* DAEUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DAEUtil.h; path = src/DAEUtil.h; sourceTree = SOURCE_ROOT; };
+		42C8EDCB14724CD700E43619 /* Effect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Effect.cpp; path = src/Effect.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDCC14724CD700E43619 /* Effect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Effect.h; path = src/Effect.h; sourceTree = SOURCE_ROOT; };
+		42C8EDCD14724CD700E43619 /* EncoderArguments.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EncoderArguments.cpp; path = src/EncoderArguments.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDCE14724CD700E43619 /* EncoderArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EncoderArguments.h; path = src/EncoderArguments.h; sourceTree = SOURCE_ROOT; };
+		42C8EDCF14724CD700E43619 /* FileIO.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileIO.cpp; path = src/FileIO.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDD014724CD700E43619 /* FileIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileIO.h; path = src/FileIO.h; sourceTree = SOURCE_ROOT; };
+		42C8EDD114724CD700E43619 /* Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Font.cpp; path = src/Font.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDD214724CD700E43619 /* Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Font.h; path = src/Font.h; sourceTree = SOURCE_ROOT; };
+		42C8EDD314724CD700E43619 /* Glyph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Glyph.cpp; path = src/Glyph.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDD414724CD700E43619 /* Glyph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Glyph.h; path = src/Glyph.h; sourceTree = SOURCE_ROOT; };
+		42C8EDD514724CD700E43619 /* GPBDecoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GPBDecoder.cpp; path = src/GPBDecoder.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDD614724CD700E43619 /* GPBDecoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GPBDecoder.h; path = src/GPBDecoder.h; sourceTree = SOURCE_ROOT; };
+		42C8EDD714724CD700E43619 /* GPBFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = GPBFile.cpp; path = src/GPBFile.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDD814724CD700E43619 /* GPBFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GPBFile.h; path = src/GPBFile.h; sourceTree = SOURCE_ROOT; };
+		42C8EDD914724CD700E43619 /* Light.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Light.cpp; path = src/Light.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDDA14724CD700E43619 /* Light.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Light.h; path = src/Light.h; sourceTree = SOURCE_ROOT; };
+		42C8EDDB14724CD700E43619 /* LightInstance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LightInstance.cpp; path = src/LightInstance.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDDC14724CD700E43619 /* LightInstance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LightInstance.h; path = src/LightInstance.h; sourceTree = SOURCE_ROOT; };
+		42C8EDDD14724CD700E43619 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDDE14724CD700E43619 /* Material.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Material.cpp; path = src/Material.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDDF14724CD700E43619 /* Material.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Material.h; path = src/Material.h; sourceTree = SOURCE_ROOT; };
+		42C8EDE014724CD700E43619 /* MaterialParameter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MaterialParameter.cpp; path = src/MaterialParameter.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDE114724CD700E43619 /* MaterialParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MaterialParameter.h; path = src/MaterialParameter.h; sourceTree = SOURCE_ROOT; };
+		42C8EDE214724CD700E43619 /* Matrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Matrix.cpp; path = src/Matrix.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDE314724CD700E43619 /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Matrix.h; path = src/Matrix.h; sourceTree = SOURCE_ROOT; };
+		42C8EDE414724CD700E43619 /* Mesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Mesh.cpp; path = src/Mesh.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDE514724CD700E43619 /* Mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Mesh.h; path = src/Mesh.h; sourceTree = SOURCE_ROOT; };
+		42C8EDE614724CD700E43619 /* MeshPart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MeshPart.cpp; path = src/MeshPart.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDE714724CD700E43619 /* MeshPart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshPart.h; path = src/MeshPart.h; sourceTree = SOURCE_ROOT; };
+		42C8EDE814724CD700E43619 /* MeshSkin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MeshSkin.cpp; path = src/MeshSkin.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDE914724CD700E43619 /* MeshSkin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshSkin.h; path = src/MeshSkin.h; sourceTree = SOURCE_ROOT; };
+		42C8EDEA14724CD700E43619 /* MeshSubSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MeshSubSet.cpp; path = src/MeshSubSet.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDEB14724CD700E43619 /* MeshSubSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshSubSet.h; path = src/MeshSubSet.h; sourceTree = SOURCE_ROOT; };
+		42C8EDEC14724CD700E43619 /* Model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Model.cpp; path = src/Model.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDED14724CD700E43619 /* Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Model.h; path = src/Model.h; sourceTree = SOURCE_ROOT; };
+		42C8EDEE14724CD700E43619 /* Node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Node.cpp; path = src/Node.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDEF14724CD700E43619 /* Node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Node.h; path = src/Node.h; sourceTree = SOURCE_ROOT; };
+		42C8EDF014724CD700E43619 /* Object.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Object.cpp; path = src/Object.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDF114724CD700E43619 /* Object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Object.h; path = src/Object.h; sourceTree = SOURCE_ROOT; };
+		42C8EDF214724CD700E43619 /* Quaternion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Quaternion.cpp; path = src/Quaternion.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDF314724CD700E43619 /* Quaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Quaternion.h; path = src/Quaternion.h; sourceTree = SOURCE_ROOT; };
+		42C8EDF414724CD700E43619 /* Reference.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Reference.cpp; path = src/Reference.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDF514724CD700E43619 /* Reference.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Reference.h; path = src/Reference.h; sourceTree = SOURCE_ROOT; };
+		42C8EDF614724CD700E43619 /* ReferenceTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ReferenceTable.cpp; path = src/ReferenceTable.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDF714724CD700E43619 /* ReferenceTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ReferenceTable.h; path = src/ReferenceTable.h; sourceTree = SOURCE_ROOT; };
+		42C8EDF814724CD700E43619 /* Scene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Scene.cpp; path = src/Scene.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDF914724CD700E43619 /* Scene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Scene.h; path = src/Scene.h; sourceTree = SOURCE_ROOT; };
+		42C8EDFA14724CD700E43619 /* StringUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StringUtil.cpp; path = src/StringUtil.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDFB14724CD700E43619 /* StringUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StringUtil.h; path = src/StringUtil.h; sourceTree = SOURCE_ROOT; };
+		42C8EDFC14724CD700E43619 /* Transform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Transform.cpp; path = src/Transform.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDFD14724CD700E43619 /* Transform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Transform.h; path = src/Transform.h; sourceTree = SOURCE_ROOT; };
+		42C8EDFE14724CD700E43619 /* TTFFontEncoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TTFFontEncoder.cpp; path = src/TTFFontEncoder.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EDFF14724CD700E43619 /* TTFFontEncoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TTFFontEncoder.h; path = src/TTFFontEncoder.h; sourceTree = SOURCE_ROOT; };
+		42C8EE0014724CD700E43619 /* Vector2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Vector2.cpp; path = src/Vector2.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EE0114724CD700E43619 /* Vector2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vector2.h; path = src/Vector2.h; sourceTree = SOURCE_ROOT; };
+		42C8EE0214724CD700E43619 /* Vector3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Vector3.cpp; path = src/Vector3.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EE0314724CD700E43619 /* Vector3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vector3.h; path = src/Vector3.h; sourceTree = SOURCE_ROOT; };
+		42C8EE0414724CD700E43619 /* Vector4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Vector4.cpp; path = src/Vector4.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EE0514724CD700E43619 /* Vector4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vector4.h; path = src/Vector4.h; sourceTree = SOURCE_ROOT; };
+		42C8EE0614724CD700E43619 /* Vertex.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Vertex.cpp; path = src/Vertex.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EE0714724CD700E43619 /* Vertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vertex.h; path = src/Vertex.h; sourceTree = SOURCE_ROOT; };
+		42C8EE0814724CD700E43619 /* VertexElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VertexElement.cpp; path = src/VertexElement.cpp; sourceTree = SOURCE_ROOT; };
+		42C8EE0914724CD700E43619 /* VertexElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VertexElement.h; path = src/VertexElement.h; sourceTree = SOURCE_ROOT; };
+		42C8EE341472B60100E43619 /* libfreetype.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libfreetype.a; path = "../external-deps/freetype2/lib/macosx/libfreetype.a"; sourceTree = "<group>"; };
+		42C8EE361472D7E700E43619 /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = usr/lib/libxml2.dylib; sourceTree = SDKROOT; };
+		42C8EE381472DAA300E43619 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+		42C8EE3A1472DAAE00E43619 /* libbz2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libbz2.dylib; path = usr/lib/libbz2.dylib; sourceTree = SDKROOT; };
+		42D277571472EFA700D867A4 /* libpcre.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpcre.a; path = "../external-deps/pcre/lib/macosx/libpcre.a"; sourceTree = "<group>"; };
+		42D277581472EFA700D867A4 /* libpcrecpp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpcrecpp.a; path = "../external-deps/pcre/lib/macosx/libpcrecpp.a"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		42475CE3147208A000610A6A /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				42D277591472EFA700D867A4 /* libpcre.a in Frameworks */,
+				42D2775A1472EFA700D867A4 /* libpcrecpp.a in Frameworks */,
+				42C8EE351472B60100E43619 /* libfreetype.a in Frameworks */,
+				42475D7C14720ECE00610A6A /* libdom.a in Frameworks */,
+				42C8EE3B1472DAAE00E43619 /* libbz2.dylib in Frameworks */,
+				42C8EE391472DAA300E43619 /* libz.dylib in Frameworks */,
+				42C8EE371472D7E700E43619 /* libxml2.dylib in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		42475CDB147208A000610A6A = {
+			isa = PBXGroup;
+			children = (
+				42D277571472EFA700D867A4 /* libpcre.a */,
+				42D277581472EFA700D867A4 /* libpcrecpp.a */,
+				42C8EE3A1472DAAE00E43619 /* libbz2.dylib */,
+				42C8EE381472DAA300E43619 /* libz.dylib */,
+				42C8EE361472D7E700E43619 /* libxml2.dylib */,
+				42C8EE341472B60100E43619 /* libfreetype.a */,
+				42475D7B14720ECE00610A6A /* libdom.a */,
+				42475CE9147208A000610A6A /* gameplay-encoder */,
+				42475CE7147208A000610A6A /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		42475CE7147208A000610A6A /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				42475CE6147208A000610A6A /* gameplay-encoder */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		42475CE9147208A000610A6A /* gameplay-encoder */ = {
+			isa = PBXGroup;
+			children = (
+				42C8EDB714724CD700E43619 /* Animation.cpp */,
+				42C8EDB814724CD700E43619 /* Animation.h */,
+				42C8EDB914724CD700E43619 /* AnimationChannel.cpp */,
+				42C8EDBA14724CD700E43619 /* AnimationChannel.h */,
+				42C8EDBB14724CD700E43619 /* Animations.cpp */,
+				42C8EDBC14724CD700E43619 /* Animations.h */,
+				42C8EDBD14724CD700E43619 /* Base.cpp */,
+				42C8EDBE14724CD700E43619 /* Base.h */,
+				42C8EDBF14724CD700E43619 /* Camera.cpp */,
+				42C8EDC014724CD700E43619 /* Camera.h */,
+				42C8EDC114724CD700E43619 /* CameraInstance.cpp */,
+				42C8EDC214724CD700E43619 /* CameraInstance.h */,
+				42C8EDC314724CD700E43619 /* DAEChannelTarget.cpp */,
+				42C8EDC414724CD700E43619 /* DAEChannelTarget.h */,
+				42C8EDC514724CD700E43619 /* DAEOptimizer.cpp */,
+				42C8EDC614724CD700E43619 /* DAEOptimizer.h */,
+				42C8EDC714724CD700E43619 /* DAESceneEncoder.cpp */,
+				42C8EDC814724CD700E43619 /* DAESceneEncoder.h */,
+				42C8EDC914724CD700E43619 /* DAEUtil.cpp */,
+				42C8EDCA14724CD700E43619 /* DAEUtil.h */,
+				42C8EDCB14724CD700E43619 /* Effect.cpp */,
+				42C8EDCC14724CD700E43619 /* Effect.h */,
+				42C8EDCD14724CD700E43619 /* EncoderArguments.cpp */,
+				42C8EDCE14724CD700E43619 /* EncoderArguments.h */,
+				42C8EDCF14724CD700E43619 /* FileIO.cpp */,
+				42C8EDD014724CD700E43619 /* FileIO.h */,
+				42C8EDD114724CD700E43619 /* Font.cpp */,
+				42C8EDD214724CD700E43619 /* Font.h */,
+				42C8EDD314724CD700E43619 /* Glyph.cpp */,
+				42C8EDD414724CD700E43619 /* Glyph.h */,
+				42C8EDD514724CD700E43619 /* GPBDecoder.cpp */,
+				42C8EDD614724CD700E43619 /* GPBDecoder.h */,
+				42C8EDD714724CD700E43619 /* GPBFile.cpp */,
+				42C8EDD814724CD700E43619 /* GPBFile.h */,
+				42C8EDD914724CD700E43619 /* Light.cpp */,
+				42C8EDDA14724CD700E43619 /* Light.h */,
+				42C8EDDB14724CD700E43619 /* LightInstance.cpp */,
+				42C8EDDC14724CD700E43619 /* LightInstance.h */,
+				42C8EDDD14724CD700E43619 /* main.cpp */,
+				42C8EDDE14724CD700E43619 /* Material.cpp */,
+				42C8EDDF14724CD700E43619 /* Material.h */,
+				42C8EDE014724CD700E43619 /* MaterialParameter.cpp */,
+				42C8EDE114724CD700E43619 /* MaterialParameter.h */,
+				42C8EDE214724CD700E43619 /* Matrix.cpp */,
+				42C8EDE314724CD700E43619 /* Matrix.h */,
+				42C8EDE414724CD700E43619 /* Mesh.cpp */,
+				42C8EDE514724CD700E43619 /* Mesh.h */,
+				42C8EDE614724CD700E43619 /* MeshPart.cpp */,
+				42C8EDE714724CD700E43619 /* MeshPart.h */,
+				42C8EDE814724CD700E43619 /* MeshSkin.cpp */,
+				42C8EDE914724CD700E43619 /* MeshSkin.h */,
+				42C8EDEA14724CD700E43619 /* MeshSubSet.cpp */,
+				42C8EDEB14724CD700E43619 /* MeshSubSet.h */,
+				42C8EDEC14724CD700E43619 /* Model.cpp */,
+				42C8EDED14724CD700E43619 /* Model.h */,
+				42C8EDEE14724CD700E43619 /* Node.cpp */,
+				42C8EDEF14724CD700E43619 /* Node.h */,
+				42C8EDF014724CD700E43619 /* Object.cpp */,
+				42C8EDF114724CD700E43619 /* Object.h */,
+				42C8EDF214724CD700E43619 /* Quaternion.cpp */,
+				42C8EDF314724CD700E43619 /* Quaternion.h */,
+				42C8EDF414724CD700E43619 /* Reference.cpp */,
+				42C8EDF514724CD700E43619 /* Reference.h */,
+				42C8EDF614724CD700E43619 /* ReferenceTable.cpp */,
+				42C8EDF714724CD700E43619 /* ReferenceTable.h */,
+				42C8EDF814724CD700E43619 /* Scene.cpp */,
+				42C8EDF914724CD700E43619 /* Scene.h */,
+				42C8EDFA14724CD700E43619 /* StringUtil.cpp */,
+				42C8EDFB14724CD700E43619 /* StringUtil.h */,
+				42C8EDFC14724CD700E43619 /* Transform.cpp */,
+				42C8EDFD14724CD700E43619 /* Transform.h */,
+				42C8EDFE14724CD700E43619 /* TTFFontEncoder.cpp */,
+				42C8EDFF14724CD700E43619 /* TTFFontEncoder.h */,
+				42C8EE0014724CD700E43619 /* Vector2.cpp */,
+				42C8EE0114724CD700E43619 /* Vector2.h */,
+				42C8EE0214724CD700E43619 /* Vector3.cpp */,
+				42C8EE0314724CD700E43619 /* Vector3.h */,
+				42C8EE0414724CD700E43619 /* Vector4.cpp */,
+				42C8EE0514724CD700E43619 /* Vector4.h */,
+				42C8EE0614724CD700E43619 /* Vertex.cpp */,
+				42C8EE0714724CD700E43619 /* Vertex.h */,
+				42C8EE0814724CD700E43619 /* VertexElement.cpp */,
+				42C8EE0914724CD700E43619 /* VertexElement.h */,
+			);
+			path = "gameplay-encoder";
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+		42475CE5147208A000610A6A /* gameplay-encoder */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 42475CF0147208A100610A6A /* Build configuration list for PBXNativeTarget "gameplay-encoder" */;
+			buildPhases = (
+				42475CE2147208A000610A6A /* Sources */,
+				42475CE3147208A000610A6A /* Frameworks */,
+				42475CE4147208A000610A6A /* CopyFiles */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = "gameplay-encoder";
+			productName = "gameplay-encoder";
+			productReference = 42475CE6147208A000610A6A /* gameplay-encoder */;
+			productType = "com.apple.product-type.tool";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		42475CDD147208A000610A6A /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0420;
+			};
+			buildConfigurationList = 42475CE0147208A000610A6A /* Build configuration list for PBXProject "gameplay-encoder" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 42475CDB147208A000610A6A;
+			productRefGroup = 42475CE7147208A000610A6A /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				42475CE5147208A000610A6A /* gameplay-encoder */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		42475CE2147208A000610A6A /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				42C8EE0A14724CD700E43619 /* Animation.cpp in Sources */,
+				42C8EE0B14724CD700E43619 /* AnimationChannel.cpp in Sources */,
+				42C8EE0C14724CD700E43619 /* Animations.cpp in Sources */,
+				42C8EE0D14724CD700E43619 /* Base.cpp in Sources */,
+				42C8EE0E14724CD700E43619 /* Camera.cpp in Sources */,
+				42C8EE0F14724CD700E43619 /* CameraInstance.cpp in Sources */,
+				42C8EE1014724CD700E43619 /* DAEChannelTarget.cpp in Sources */,
+				42C8EE1114724CD700E43619 /* DAEOptimizer.cpp in Sources */,
+				42C8EE1214724CD700E43619 /* DAESceneEncoder.cpp in Sources */,
+				42C8EE1314724CD700E43619 /* DAEUtil.cpp in Sources */,
+				42C8EE1414724CD700E43619 /* Effect.cpp in Sources */,
+				42C8EE1514724CD700E43619 /* EncoderArguments.cpp in Sources */,
+				42C8EE1614724CD700E43619 /* FileIO.cpp in Sources */,
+				42C8EE1714724CD700E43619 /* Font.cpp in Sources */,
+				42C8EE1814724CD700E43619 /* Glyph.cpp in Sources */,
+				42C8EE1914724CD700E43619 /* GPBDecoder.cpp in Sources */,
+				42C8EE1A14724CD700E43619 /* GPBFile.cpp in Sources */,
+				42C8EE1B14724CD700E43619 /* Light.cpp in Sources */,
+				42C8EE1C14724CD700E43619 /* LightInstance.cpp in Sources */,
+				42C8EE1D14724CD700E43619 /* main.cpp in Sources */,
+				42C8EE1E14724CD700E43619 /* Material.cpp in Sources */,
+				42C8EE1F14724CD700E43619 /* MaterialParameter.cpp in Sources */,
+				42C8EE2014724CD700E43619 /* Matrix.cpp in Sources */,
+				42C8EE2114724CD700E43619 /* Mesh.cpp in Sources */,
+				42C8EE2214724CD700E43619 /* MeshPart.cpp in Sources */,
+				42C8EE2314724CD700E43619 /* MeshSkin.cpp in Sources */,
+				42C8EE2414724CD700E43619 /* MeshSubSet.cpp in Sources */,
+				42C8EE2514724CD700E43619 /* Model.cpp in Sources */,
+				42C8EE2614724CD700E43619 /* Node.cpp in Sources */,
+				42C8EE2714724CD700E43619 /* Object.cpp in Sources */,
+				42C8EE2814724CD700E43619 /* Quaternion.cpp in Sources */,
+				42C8EE2914724CD700E43619 /* Reference.cpp in Sources */,
+				42C8EE2A14724CD700E43619 /* ReferenceTable.cpp in Sources */,
+				42C8EE2B14724CD700E43619 /* Scene.cpp in Sources */,
+				42C8EE2C14724CD700E43619 /* StringUtil.cpp in Sources */,
+				42C8EE2D14724CD700E43619 /* Transform.cpp in Sources */,
+				42C8EE2E14724CD700E43619 /* TTFFontEncoder.cpp in Sources */,
+				42C8EE2F14724CD700E43619 /* Vector2.cpp in Sources */,
+				42C8EE3014724CD700E43619 /* Vector3.cpp in Sources */,
+				42C8EE3114724CD700E43619 /* Vector4.cpp in Sources */,
+				42C8EE3214724CD700E43619 /* Vertex.cpp in Sources */,
+				42C8EE3314724CD700E43619 /* VertexElement.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		42475CEE147208A100610A6A /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_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 = (
+					DOM_INCLUDE_LIBXML,
+					NO_BOOST,
+					NO_ZAE,
+					"DEBUG=1",
+				);
+				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;
+				HEADER_SEARCH_PATHS = (
+					"../external-deps/freetype/include",
+					"../external-deps/collada-dom/include",
+					"../external-deps/collada-dom/include/1.4",
+				);
+				INFOPLIST_PREPROCESSOR_DEFINITIONS = "";
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = YES;
+				OTHER_TEST_FLAGS = "";
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SDKROOT = macosx;
+				WARNING_CFLAGS = "";
+			};
+			name = Debug;
+		};
+		42475CEF147208A100610A6A /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_PREPROCESSOR_DEFINITIONS = (
+					DOM_INCLUDE_LIBXML,
+					NO_BOOST,
+					NO_ZAE,
+				);
+				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;
+				HEADER_SEARCH_PATHS = (
+					"../external-deps/freetype/include",
+					"../external-deps/collada-dom/include",
+					"../external-deps/collada-dom/include/1.4",
+				);
+				INFOPLIST_PREPROCESSOR_DEFINITIONS = "";
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				OTHER_TEST_FLAGS = "";
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				SDKROOT = macosx;
+				WARNING_CFLAGS = "";
+			};
+			name = Release;
+		};
+		42475CF1147208A100610A6A /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "compiler-default";
+				CLANG_CXX_LIBRARY = "compiler-default";
+				GCC_C_LANGUAGE_STANDARD = "compiler-default";
+				GCC_ENABLE_CPP_EXCEPTIONS = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+				HEADER_SEARCH_PATHS = (
+					"../external-deps/freetype2/include",
+					"../external-deps/collada-dom/include",
+					"../external-deps/collada-dom/include/1.4",
+				);
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../external-deps/freetype2/lib/macosx\"",
+					"\"$(SRCROOT)/../external-deps/collada-dom/lib/macosx\"",
+					"\"$(SRCROOT)/../../../collada-dom/dom/external-libs/minizip/mac\"",
+					"\"$(SRCROOT)/../../../collada-dom/dom/external-libs/pcre/lib/mac\"",
+					"\"$(SRCROOT)/../external-deps/pcre/lib/macosx\"",
+				);
+				MACH_O_TYPE = mh_execute;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Debug;
+		};
+		42475CF2147208A100610A6A /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				CLANG_CXX_LANGUAGE_STANDARD = "compiler-default";
+				CLANG_CXX_LIBRARY = "compiler-default";
+				GCC_C_LANGUAGE_STANDARD = "compiler-default";
+				GCC_ENABLE_CPP_EXCEPTIONS = NO;
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+				HEADER_SEARCH_PATHS = (
+					"../external-deps/freetype2/include",
+					"../external-deps/collada-dom/include",
+					"../external-deps/collada-dom/include/1.4",
+				);
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../external-deps/freetype2/lib/macosx\"",
+					"\"$(SRCROOT)/../external-deps/collada-dom/lib/macosx\"",
+					"\"$(SRCROOT)/../../../collada-dom/dom/external-libs/minizip/mac\"",
+					"\"$(SRCROOT)/../../../collada-dom/dom/external-libs/pcre/lib/mac\"",
+					"\"$(SRCROOT)/../external-deps/pcre/lib/macosx\"",
+				);
+				MACH_O_TYPE = mh_execute;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		42475CE0147208A000610A6A /* Build configuration list for PBXProject "gameplay-encoder" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				42475CEE147208A100610A6A /* Debug */,
+				42475CEF147208A100610A6A /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		42475CF0147208A100610A6A /* Build configuration list for PBXNativeTarget "gameplay-encoder" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				42475CF1147208A100610A6A /* Debug */,
+				42475CF2147208A100610A6A /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 42475CDD147208A000610A6A /* Project object */;
+}

+ 32 - 18
gameplay-encoder/src/Base.h

@@ -1,26 +1,40 @@
-#ifndef COMMON_H_
-#define COMMON_H_
+#ifndef BASE_H_
+#define BASE_H_
 
-#include <assert.h>
+#include <cmath>
+#include <iostream>
+#include <string>
+#include <vector>
+#include <list>
 #include <map>
+#include <stdio.h>
+#include <stdlib.h>
+#include <iostream>
+#include <string>
+#include <sys/stat.h>
+#include <vector>
+#include <assert.h>
+#include <math.h>
+#include <float.h>
+
 
 #ifndef M_1_PI        
-#define M_1_PI                    0.31830988618379067154
+#define M_1_PI                      0.31830988618379067154
 #endif
-#define MATH_FLOAT_SMALL        1.0e-37f
-#define MATH_TOLERANCE            2e-37f
-#define MATH_E                     2.71828182845904523536f
-#define MATH_LOG10E                0.4342944819032518f
-#define MATH_LOG2E                1.442695040888963387f
-#define MATH_PI                    3.14159265358979323846f
-#define MATH_PIOOVER2            1.57079632679489661923f
-#define MATH_PIOOVER4             M_PI_4
-#define MATH_PIX2                 6.28318530717958647693f
-#define MATH_EPSILON            0.000001f
-#define MATH_DEG_TO_RAD(x)         ((x) * 0.0174532925f)
-#define MATH_RAD_TO_DEG(x)        ((x)* 57.29577951f)
-#define MATH_RANDOM_MINUS1_1()  ((2.0f*((float)rand()/RAND_MAX))-1.0f) // Returns a random float between -1 and 1.
-#define MATH_RANDOM_0_1()       ((float)rand()/RAND_MAX) // Returns a random float between 0 and 1.
+#define MATH_FLOAT_SMALL            1.0e-37f
+#define MATH_TOLERANCE              2e-37f
+#define MATH_E                      2.71828182845904523536f
+#define MATH_LOG10E                 0.4342944819032518f
+#define MATH_LOG2E                  1.442695040888963387f
+#define MATH_PI                     3.14159265358979323846f
+#define MATH_PIOOVER2               1.57079632679489661923f
+#define MATH_PIOOVER4               M_PI_4
+#define MATH_PIX2                   6.28318530717958647693f
+#define MATH_EPSILON                0.000001f
+#define MATH_DEG_TO_RAD(x)          ((x) * 0.0174532925f)
+#define MATH_RAD_TO_DEG(x)          ((x)* 57.29577951f)
+#define MATH_RANDOM_MINUS1_1()      ((2.0f*((float)rand()/RAND_MAX))-1.0f) // Returns a random float between -1 and 1.
+#define MATH_RANDOM_0_1()           ((float)rand()/RAND_MAX) // Returns a random float between 0 and 1.
 
 namespace gameplay
 {

+ 1 - 1
gameplay-encoder/src/DAEOptimizer.cpp

@@ -81,7 +81,7 @@ void DAEOptimizer::getAnimationChannels(const domNodeRef& node, std::list<domCha
     }
 
     // Recursively do the same for all nodes
-    daeTArray<daeSmartRef<daeElement>> children;
+    daeTArray< daeSmartRef<daeElement> > children;
     node->getChildren(children);
     size_t childCount = children.getCount();
     for (size_t i = 0; i < childCount; i++)

+ 2 - 2
gameplay-encoder/src/DAESceneEncoder.cpp

@@ -831,7 +831,7 @@ void DAESceneEncoder::transformNode(domNode* domNode, Node* node)
 
 void DAESceneEncoder::calcTransform(domNode* domNode, Matrix& dstTransform)
 {
-    daeTArray<daeSmartRef<daeElement>> children;
+    daeTArray<daeSmartRef<daeElement> > children;
     domNode->getChildren(children);
     size_t childCount = children.getCount();
     for (size_t i = 0; i < childCount; i++)
@@ -1653,7 +1653,7 @@ Mesh* DAESceneEncoder::loadMesh(const domMesh* meshElement, const std::string& g
                     delete polygonInputs[j];
                 }
                 warning(std::string("Triangles do not all have the same number of input sources for geometry mesh: ") + geometryId);
-                return false;
+                return NULL;
             }
             else
             {

+ 1 - 1
gameplay-encoder/src/DAEUtil.cpp

@@ -148,7 +148,7 @@ const domName_arrayRef getSourceNameArray(const domSourceRef& source)
     {
         return nameArray;
     }
-    daeTArray<daeSmartRef<daeElement>> children;
+    daeTArray<daeSmartRef<daeElement> > children;
     source->getChildren(children);
     size_t childCount = children.getCount();
     for (size_t i = 0; i < childCount; i++)

+ 2 - 8
gameplay-encoder/src/EncoderArguments.h

@@ -1,12 +1,6 @@
 #ifndef ENCODERARGUMENTS_H_
 #define ENCODERARGUMENTS_H_
 
-#include <stdio.h>
-#include <stdlib.h>
-#include <iostream>
-#include <string>
-#include <sys/stat.h>
-#include <vector>
 
 #include "Base.h"
 
@@ -48,12 +42,12 @@ public:
     /**
      * Returns the char pointer to the file path string.
      */
-    const char* EncoderArguments::getFilePathPointer() const;
+    const char* getFilePathPointer() const;
 
     /**
      * Returns the path to where the DAE output should be written to.
      */
-    const std::string& EncoderArguments::getDAEOutputPath() const;
+    const std::string& getDAEOutputPath() const;
 
     const std::vector<std::string>& getGroupAnimationNodeId() const;
     const std::vector<std::string>& getGroupAnimationAnimationId() const;

+ 3 - 3
gameplay-encoder/src/FileIO.cpp

@@ -1,10 +1,10 @@
 #include "FileIO.h"
-#include <assert.h>
 
 namespace gameplay
 {
 
-// Writing ot a binary file //
+
+// Writing out a binary file //
 
 void write(unsigned char value, FILE* file)
 {
@@ -102,7 +102,7 @@ void fprintfElement(FILE* file, const char* elementName, unsigned int value)
 }
 void fprintfElement(FILE* file, const char* elementName, unsigned char value)
 {
-    fprintf(file, "<%s>%u</%s>\n", elementName, value, (unsigned int)elementName);
+    fprintf(file, "<%s>%u</%s>\n", elementName, value, elementName);
 }
 
 void fprintfMatrix4f(FILE* file, const float* m)

+ 4 - 8
gameplay-encoder/src/FileIO.h

@@ -1,10 +1,6 @@
 #ifndef FILEIO_H_
 #define FILEIO_H_
 
-#include <iostream>
-#include <list>
-#include <vector>
-
 #include "Base.h"
 
 namespace gameplay
@@ -27,7 +23,7 @@ template <class T>
 void fprintfElement(FILE* file, const char* format, const char* elementName, std::vector<T> list)
 {
     fprintf(file, "<%s>", elementName);
-    std::vector<T>::const_iterator i;
+    typename std::vector<T>::const_iterator i;
     for (i = list.begin(); i != list.end(); i++)
     {
         fprintf(file, format, *i);
@@ -39,7 +35,7 @@ template <class T>
 void fprintfElement(FILE* file, const char* format, const char* elementName, std::list<T> list)
 {
     fprintf(file, "<%s>", elementName);
-    std::list<T>::const_iterator i;
+    typename std::list<T>::const_iterator i;
     for (i = list.begin(); i != list.end(); i++)
     {
         fprintf(file, format, *i);
@@ -81,7 +77,7 @@ void write(std::list<T> list, FILE* file)
     // First write the size of the list
     write(list.size(), file);
     // Then write each element
-    std::list<T>::const_iterator i;
+    typename std::list<T>::const_iterator i;
     for (i = list.begin(); i != list.end(); i++)
     {
         write(*i, file);
@@ -99,7 +95,7 @@ void write(std::vector<T> vector, FILE* file)
     // First write the size of the vector
     write(vector.size(), file);
     // Then write each element
-    std::vector<T>::const_iterator i;
+    typename std::vector<T>::const_iterator i;
     for (i = vector.begin(); i != vector.end(); i++)
     {
         write(*i, file);

+ 2 - 3
gameplay-encoder/src/Mesh.cpp

@@ -1,5 +1,4 @@
 #include "Mesh.h"
-#include <cmath>
 
 namespace gameplay
 {
@@ -81,7 +80,7 @@ void Mesh::writeText(FILE* file)
     }
 
     // for each Vertex
-    fprintf(file, "<vertices count=\"%u\">\n", vertices.size());
+    fprintf(file, "<vertices count=\"%lu\">\n", vertices.size());
     for (std::vector<Vertex>::iterator i = vertices.begin(); i != vertices.end(); i++)
     {
         i->writeText(file);
@@ -200,7 +199,7 @@ void Mesh::computeBounds()
     }
 
     // Convert squared distance to distance for radius
-    bounds.radius = std::sqrtf(bounds.radius);
+    bounds.radius = sqrtf(bounds.radius);
 }
 
 }

+ 1 - 0
gameplay-encoder/src/Mesh.h

@@ -1,6 +1,7 @@
 #ifndef MESH_H_
 #define MESH_H_
 
+#include "Base.h"
 #include "Object.h"
 #include "MeshPart.h"
 #include "VertexElement.h"

+ 1 - 1
gameplay-encoder/src/MeshSkin.cpp

@@ -49,7 +49,7 @@ void MeshSkin::writeText(FILE* file)
         fprintf(file, "%s ", i->c_str());
     }
     fprintf(file, "</joints>\n");
-    fprintf(file, "<bindPoses count=\"%u\">", _bindPoses.size());
+    fprintf(file, "<bindPoses count=\"%lu\">", _bindPoses.size());
     for (std::list<float>::const_iterator i = _bindPoses.begin(); i != _bindPoses.end(); i++)
     {
         fprintf(file, "%f ", *i);

+ 2 - 1
gameplay-encoder/src/MeshSubSet.cpp

@@ -13,10 +13,11 @@ MeshSubSet::~MeshSubSet(void)
 {
 }
 
-byte MeshSubSet::getTypeId(void)
+unsigned int MeshSubSet::getTypeId(void)
 {
     return MESHPART_ID;
 }
+    
 const char* MeshSubSet::getElementName(void)
 {
     return "MeshSubSet";

+ 10 - 7
gameplay-encoder/src/MeshSubSet.h

@@ -1,19 +1,20 @@
-#ifndef MESHSUBSET_H_

+#ifndef MESHSUBSET_H_
 #define MESHSUBSET_H_
 
-#include <vector>
-
-#include "Common.h"
+#include "Base.h"
 #include "Object.h"
 #include "Vertex.h"
 
+namespace gameplay 
+{
+
 class MeshSubSet : public Object
 {
 public:
     MeshSubSet(void);
     virtual ~MeshSubSet(void);
 
-    virtual byte getTypeId(void);
+    virtual unsigned int getTypeId(void);
     virtual const char* getElementName(void);
     virtual void writeBinary(FILE* file);
     virtual void writeText(FILE* file);
@@ -24,5 +25,7 @@ public:
     std::map<Vertex, int> vertexLookupTable;
 };
 
-

-#endif

+}
+
+#endif
+

+ 2 - 7
gameplay-encoder/src/Object.h

@@ -1,11 +1,6 @@
 #ifndef OBJ_H_
 #define OBJ_H_
 
-#include <iostream>
-#include <string>
-#include <list>
-#include <vector>
-
 #include "Base.h"
 #include "FileIO.h"
 
@@ -118,7 +113,7 @@ public:
         // First write the size of the list
         write(list.size(), file);
         // Then write each element
-        std::list<T>::const_iterator i;
+        typename std::list<T>::const_iterator i;
         for (i = list.begin(); i != list.end(); i++)
         {
             (*i)->writeBinary(file);
@@ -134,7 +129,7 @@ public:
         // First write the size of the vector
         write(vector.size(), file);
         // Then write each element
-        std::vector<T>::const_iterator i;
+        typename std::vector<T>::const_iterator i;
         for (i = vector.begin(); i != vector.end(); i++)
         {
             (*i)->writeBinary(file);

+ 22 - 0
gameplay.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:gameplay/gameplay.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:gameplay-encoder/gameplay-encoder.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:gameplay-samples/sample00-mesh/sample00-mesh.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:gameplay-samples/sample01-longboard/sample01-longboard.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:gameplay-samples/sample02-spaceship/sample02-spaceship.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:gameplay-samples/sample03-character/sample03-character.xcodeproj">
+   </FileRef>
+</Workspace>

+ 3 - 3
gameplay/gameplay.vcxproj

@@ -34,6 +34,8 @@
     <ClCompile Include="src\Font.cpp" />
     <ClCompile Include="src\Frustum.cpp" />
     <ClCompile Include="src\Game.cpp" />
+    <ClCompile Include="src\gameplay-main-qnx.cpp" />
+    <ClCompile Include="src\gameplay-main-win32.cpp" />
     <ClCompile Include="src\Input.cpp" />
     <ClCompile Include="src\Joint.cpp" />
     <ClCompile Include="src\Light.cpp" />
@@ -90,9 +92,6 @@
     <ClInclude Include="src\Font.h" />
     <ClInclude Include="src\Frustum.h" />
     <ClInclude Include="src\Game.h" />
-    <ClInclude Include="src\gameplay-main-qnx.h" />
-    <ClInclude Include="src\gameplay-main-win32.h" />
-    <ClInclude Include="src\gameplay-main.h" />
     <ClInclude Include="src\gameplay.h" />
     <ClInclude Include="src\Input.h" />
     <ClInclude Include="src\Joint.h" />
@@ -149,6 +148,7 @@
     <None Include="res\shaders\solid.vsh" />
     <None Include="res\shaders\textured.fsh" />
     <None Include="res\shaders\textured.vsh" />
+    <None Include="src\gameplay-main-macosx.mm" />
   </ItemGroup>
   <PropertyGroup Label="Globals">
     <ProjectGuid>{1032BA4B-57EB-4348-9E03-29DD63E80E4A}</ProjectGuid>

+ 10 - 10
gameplay/gameplay.vcxproj.filters

@@ -168,9 +168,15 @@
     <ClCompile Include="src\RenderState.cpp">
       <Filter>src</Filter>
     </ClCompile>
-    <ClCompile Include="src\DebugNew.cpp">
+    <ClCompile Include="src\gameplay-main-qnx.cpp">
       <Filter>src</Filter>
     </ClCompile>
+    <ClCompile Include="src\gameplay-main-win32.cpp">
+		<Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\DebugNew.cpp">
+		<Filter>src</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="src\Animation.h">
@@ -221,15 +227,6 @@
     <ClInclude Include="src\gameplay.h">
       <Filter>src</Filter>
     </ClInclude>
-    <ClInclude Include="src\gameplay-main.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\gameplay-main-qnx.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\gameplay-main-win32.h">
-      <Filter>src</Filter>
-    </ClInclude>
     <ClInclude Include="src\Input.h">
       <Filter>src</Filter>
     </ClInclude>
@@ -406,5 +403,8 @@
     <None Include="res\shaders\bumped-specular.fsh">
       <Filter>res\shaders</Filter>
     </None>
+    <None Include="src\gameplay-main-macosx.mm">
+      <Filter>src</Filter>
+    </None>
   </ItemGroup>
 </Project>

+ 717 - 0
gameplay/gameplay.xcodeproj/project.pbxproj

@@ -0,0 +1,717 @@
+// !$*UTF8*$!
+{
+	archiveVersion = 1;
+	classes = {
+	};
+	objectVersion = 46;
+	objects = {
+
+/* Begin PBXBuildFile section */
+		4220A6E8146B122B00CAEB3A /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4220A6E7146B122B00CAEB3A /* QuartzCore.framework */; };
+		4234D99E14686C52003031B3 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4234D99D14686C52003031B3 /* Cocoa.framework */; };
+		4299EFA9146AC94300FF4A73 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4299EFA8146AC94300FF4A73 /* OpenGL.framework */; };
+		4299EFAB146AC94B00FF4A73 /* OpenAL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4299EFAA146AC94B00FF4A73 /* OpenAL.framework */; };
+		42BBCCBE146C89DF00D2A5F8 /* Animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC4B146C89DF00D2A5F8 /* Animation.cpp */; };
+		42BBCCBF146C89DF00D2A5F8 /* Animation.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC4C146C89DF00D2A5F8 /* Animation.h */; };
+		42BBCCC0146C89DF00D2A5F8 /* AnimationClip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC4D146C89DF00D2A5F8 /* AnimationClip.cpp */; };
+		42BBCCC1146C89DF00D2A5F8 /* AnimationClip.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC4E146C89DF00D2A5F8 /* AnimationClip.h */; };
+		42BBCCC2146C89DF00D2A5F8 /* AnimationController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC4F146C89DF00D2A5F8 /* AnimationController.cpp */; };
+		42BBCCC3146C89DF00D2A5F8 /* AnimationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC50146C89DF00D2A5F8 /* AnimationController.h */; };
+		42BBCCC4146C89DF00D2A5F8 /* AnimationTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC51146C89DF00D2A5F8 /* AnimationTarget.cpp */; };
+		42BBCCC5146C89DF00D2A5F8 /* AnimationTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC52146C89DF00D2A5F8 /* AnimationTarget.h */; };
+		42BBCCC6146C89DF00D2A5F8 /* AnimationValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC53146C89DF00D2A5F8 /* AnimationValue.cpp */; };
+		42BBCCC7146C89DF00D2A5F8 /* AnimationValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC54146C89DF00D2A5F8 /* AnimationValue.h */; };
+		42BBCCC8146C89DF00D2A5F8 /* AudioBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC55146C89DF00D2A5F8 /* AudioBuffer.cpp */; };
+		42BBCCC9146C89DF00D2A5F8 /* AudioBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC56146C89DF00D2A5F8 /* AudioBuffer.h */; };
+		42BBCCCA146C89DF00D2A5F8 /* AudioController.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC57146C89DF00D2A5F8 /* AudioController.cpp */; };
+		42BBCCCB146C89DF00D2A5F8 /* AudioController.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC58146C89DF00D2A5F8 /* AudioController.h */; };
+		42BBCCCC146C89DF00D2A5F8 /* AudioListener.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC59146C89DF00D2A5F8 /* AudioListener.cpp */; };
+		42BBCCCD146C89DF00D2A5F8 /* AudioListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC5A146C89DF00D2A5F8 /* AudioListener.h */; };
+		42BBCCCE146C89DF00D2A5F8 /* AudioSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC5B146C89DF00D2A5F8 /* AudioSource.cpp */; };
+		42BBCCCF146C89DF00D2A5F8 /* AudioSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC5C146C89DF00D2A5F8 /* AudioSource.h */; };
+		42BBCCD0146C89DF00D2A5F8 /* Base.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC5D146C89DF00D2A5F8 /* Base.h */; };
+		42BBCCD1146C89DF00D2A5F8 /* BoundingBox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC5E146C89DF00D2A5F8 /* BoundingBox.cpp */; };
+		42BBCCD2146C89DF00D2A5F8 /* BoundingBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC5F146C89DF00D2A5F8 /* BoundingBox.h */; };
+		42BBCCD3146C89DF00D2A5F8 /* BoundingSphere.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC60146C89DF00D2A5F8 /* BoundingSphere.cpp */; };
+		42BBCCD4146C89DF00D2A5F8 /* BoundingSphere.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC61146C89DF00D2A5F8 /* BoundingSphere.h */; };
+		42BBCCD5146C89DF00D2A5F8 /* Camera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC62146C89DF00D2A5F8 /* Camera.cpp */; };
+		42BBCCD6146C89DF00D2A5F8 /* Camera.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC63146C89DF00D2A5F8 /* Camera.h */; };
+		42BBCCD7146C89DF00D2A5F8 /* Curve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC64146C89DF00D2A5F8 /* Curve.cpp */; };
+		42BBCCD8146C89DF00D2A5F8 /* Curve.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC65146C89DF00D2A5F8 /* Curve.h */; };
+		42BBCCD9146C89DF00D2A5F8 /* DepthStencilTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC66146C89DF00D2A5F8 /* DepthStencilTarget.cpp */; };
+		42BBCCDA146C89DF00D2A5F8 /* DepthStencilTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC67146C89DF00D2A5F8 /* DepthStencilTarget.h */; };
+		42BBCCDB146C89DF00D2A5F8 /* Effect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC68146C89DF00D2A5F8 /* Effect.cpp */; };
+		42BBCCDC146C89DF00D2A5F8 /* Effect.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC69146C89DF00D2A5F8 /* Effect.h */; };
+		42BBCCDD146C89DF00D2A5F8 /* FileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC6A146C89DF00D2A5F8 /* FileSystem.cpp */; };
+		42BBCCDE146C89DF00D2A5F8 /* FileSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC6B146C89DF00D2A5F8 /* FileSystem.h */; };
+		42BBCCDF146C89DF00D2A5F8 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC6C146C89DF00D2A5F8 /* Font.cpp */; };
+		42BBCCE0146C89DF00D2A5F8 /* Font.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC6D146C89DF00D2A5F8 /* Font.h */; };
+		42BBCCE1146C89DF00D2A5F8 /* FrameBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC6E146C89DF00D2A5F8 /* FrameBuffer.cpp */; };
+		42BBCCE2146C89DF00D2A5F8 /* FrameBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC6F146C89DF00D2A5F8 /* FrameBuffer.h */; };
+		42BBCCE3146C89DF00D2A5F8 /* Frustum.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC70146C89DF00D2A5F8 /* Frustum.cpp */; };
+		42BBCCE4146C89DF00D2A5F8 /* Frustum.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC71146C89DF00D2A5F8 /* Frustum.h */; };
+		42BBCCE5146C89DF00D2A5F8 /* Game.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC72146C89DF00D2A5F8 /* Game.cpp */; };
+		42BBCCE6146C89DF00D2A5F8 /* Game.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC73146C89DF00D2A5F8 /* Game.h */; };
+		42BBCCE7146C89DF00D2A5F8 /* gameplay-main-macosx.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC74146C89DF00D2A5F8 /* gameplay-main-macosx.mm */; };
+		42BBCCE8146C89DF00D2A5F8 /* gameplay-main-qnx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC75146C89DF00D2A5F8 /* gameplay-main-qnx.cpp */; };
+		42BBCCE9146C89DF00D2A5F8 /* gameplay-main-win32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC76146C89DF00D2A5F8 /* gameplay-main-win32.cpp */; };
+		42BBCCEA146C89DF00D2A5F8 /* gameplay.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC77146C89DF00D2A5F8 /* gameplay.h */; };
+		42BBCCEB146C89DF00D2A5F8 /* Input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC78146C89DF00D2A5F8 /* Input.cpp */; };
+		42BBCCEC146C89DF00D2A5F8 /* Input.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC79146C89DF00D2A5F8 /* Input.h */; };
+		42BBCCED146C89DF00D2A5F8 /* Joint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC7A146C89DF00D2A5F8 /* Joint.cpp */; };
+		42BBCCEE146C89DF00D2A5F8 /* Joint.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC7B146C89DF00D2A5F8 /* Joint.h */; };
+		42BBCCEF146C89DF00D2A5F8 /* Light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC7C146C89DF00D2A5F8 /* Light.cpp */; };
+		42BBCCF0146C89DF00D2A5F8 /* Light.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC7D146C89DF00D2A5F8 /* Light.h */; };
+		42BBCCF1146C89DF00D2A5F8 /* Material.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC7E146C89DF00D2A5F8 /* Material.cpp */; };
+		42BBCCF2146C89DF00D2A5F8 /* Material.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC7F146C89DF00D2A5F8 /* Material.h */; };
+		42BBCCF3146C89DF00D2A5F8 /* MaterialParameter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC80146C89DF00D2A5F8 /* MaterialParameter.cpp */; };
+		42BBCCF4146C89DF00D2A5F8 /* MaterialParameter.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC81146C89DF00D2A5F8 /* MaterialParameter.h */; };
+		42BBCCF5146C89DF00D2A5F8 /* Matrix.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC82146C89DF00D2A5F8 /* Matrix.cpp */; };
+		42BBCCF6146C89DF00D2A5F8 /* Matrix.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC83146C89DF00D2A5F8 /* Matrix.h */; };
+		42BBCCF7146C89DF00D2A5F8 /* Mesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC84146C89DF00D2A5F8 /* Mesh.cpp */; };
+		42BBCCF8146C89DF00D2A5F8 /* Mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC85146C89DF00D2A5F8 /* Mesh.h */; };
+		42BBCCF9146C89DF00D2A5F8 /* MeshPart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC86146C89DF00D2A5F8 /* MeshPart.cpp */; };
+		42BBCCFA146C89DF00D2A5F8 /* MeshPart.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC87146C89DF00D2A5F8 /* MeshPart.h */; };
+		42BBCCFB146C89DF00D2A5F8 /* MeshSkin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC88146C89DF00D2A5F8 /* MeshSkin.cpp */; };
+		42BBCCFC146C89DF00D2A5F8 /* MeshSkin.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC89146C89DF00D2A5F8 /* MeshSkin.h */; };
+		42BBCCFD146C89DF00D2A5F8 /* Model.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC8A146C89DF00D2A5F8 /* Model.cpp */; };
+		42BBCCFE146C89DF00D2A5F8 /* Model.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC8B146C89DF00D2A5F8 /* Model.h */; };
+		42BBCCFF146C89DF00D2A5F8 /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC8C146C89DF00D2A5F8 /* Node.cpp */; };
+		42BBCD00146C89DF00D2A5F8 /* Node.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC8D146C89DF00D2A5F8 /* Node.h */; };
+		42BBCD01146C89DF00D2A5F8 /* Package.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC8E146C89DF00D2A5F8 /* Package.cpp */; };
+		42BBCD02146C89DF00D2A5F8 /* Package.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC8F146C89DF00D2A5F8 /* Package.h */; };
+		42BBCD03146C89DF00D2A5F8 /* ParticleEmitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC90146C89DF00D2A5F8 /* ParticleEmitter.cpp */; };
+		42BBCD04146C89DF00D2A5F8 /* ParticleEmitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC91146C89DF00D2A5F8 /* ParticleEmitter.h */; };
+		42BBCD05146C89DF00D2A5F8 /* Pass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC92146C89DF00D2A5F8 /* Pass.cpp */; };
+		42BBCD06146C89DF00D2A5F8 /* Pass.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC93146C89DF00D2A5F8 /* Pass.h */; };
+		42BBCD07146C89DF00D2A5F8 /* Plane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC94146C89DF00D2A5F8 /* Plane.cpp */; };
+		42BBCD08146C89DF00D2A5F8 /* Plane.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC95146C89DF00D2A5F8 /* Plane.h */; };
+		42BBCD09146C89DF00D2A5F8 /* Platform.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC96146C89DF00D2A5F8 /* Platform.h */; };
+		42BBCD0A146C89DF00D2A5F8 /* PlatformMacOSX.mm in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC97146C89DF00D2A5F8 /* PlatformMacOSX.mm */; };
+		42BBCD0B146C89DF00D2A5F8 /* PlatformQNX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC98146C89DF00D2A5F8 /* PlatformQNX.cpp */; };
+		42BBCD0C146C89DF00D2A5F8 /* PlatformWin32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC99146C89DF00D2A5F8 /* PlatformWin32.cpp */; };
+		42BBCD0D146C89DF00D2A5F8 /* Properties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC9A146C89DF00D2A5F8 /* Properties.cpp */; };
+		42BBCD0E146C89DF00D2A5F8 /* Properties.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC9B146C89DF00D2A5F8 /* Properties.h */; };
+		42BBCD0F146C89DF00D2A5F8 /* Quaternion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC9C146C89DF00D2A5F8 /* Quaternion.cpp */; };
+		42BBCD10146C89DF00D2A5F8 /* Quaternion.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC9D146C89DF00D2A5F8 /* Quaternion.h */; };
+		42BBCD11146C89DF00D2A5F8 /* Ray.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCC9E146C89DF00D2A5F8 /* Ray.cpp */; };
+		42BBCD12146C89DF00D2A5F8 /* Ray.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCC9F146C89DF00D2A5F8 /* Ray.h */; };
+		42BBCD13146C89DF00D2A5F8 /* Rectangle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCA0146C89DF00D2A5F8 /* Rectangle.cpp */; };
+		42BBCD14146C89DF00D2A5F8 /* Rectangle.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCA1146C89DF00D2A5F8 /* Rectangle.h */; };
+		42BBCD15146C89DF00D2A5F8 /* Ref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCA2146C89DF00D2A5F8 /* Ref.cpp */; };
+		42BBCD16146C89DF00D2A5F8 /* Ref.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCA3146C89DF00D2A5F8 /* Ref.h */; };
+		42BBCD17146C89DF00D2A5F8 /* RenderState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCA4146C89DF00D2A5F8 /* RenderState.cpp */; };
+		42BBCD18146C89DF00D2A5F8 /* RenderState.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCA5146C89DF00D2A5F8 /* RenderState.h */; };
+		42BBCD19146C89DF00D2A5F8 /* RenderTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCA6146C89DF00D2A5F8 /* RenderTarget.cpp */; };
+		42BBCD1A146C89DF00D2A5F8 /* RenderTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCA7146C89DF00D2A5F8 /* RenderTarget.h */; };
+		42BBCD1B146C89DF00D2A5F8 /* Scene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCA8146C89DF00D2A5F8 /* Scene.cpp */; };
+		42BBCD1C146C89DF00D2A5F8 /* Scene.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCA9146C89DF00D2A5F8 /* Scene.h */; };
+		42BBCD1D146C89DF00D2A5F8 /* SpriteBatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCAA146C89DF00D2A5F8 /* SpriteBatch.cpp */; };
+		42BBCD1E146C89DF00D2A5F8 /* SpriteBatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCAB146C89DF00D2A5F8 /* SpriteBatch.h */; };
+		42BBCD1F146C89DF00D2A5F8 /* Technique.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCAC146C89DF00D2A5F8 /* Technique.cpp */; };
+		42BBCD20146C89DF00D2A5F8 /* Technique.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCAD146C89DF00D2A5F8 /* Technique.h */; };
+		42BBCD21146C89DF00D2A5F8 /* Texture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCAE146C89DF00D2A5F8 /* Texture.cpp */; };
+		42BBCD22146C89DF00D2A5F8 /* Texture.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCAF146C89DF00D2A5F8 /* Texture.h */; };
+		42BBCD23146C89DF00D2A5F8 /* Transform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCB0146C89DF00D2A5F8 /* Transform.cpp */; };
+		42BBCD24146C89DF00D2A5F8 /* Transform.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCB1146C89DF00D2A5F8 /* Transform.h */; };
+		42BBCD25146C89DF00D2A5F8 /* Vector2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCB2146C89DF00D2A5F8 /* Vector2.cpp */; };
+		42BBCD26146C89DF00D2A5F8 /* Vector2.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCB3146C89DF00D2A5F8 /* Vector2.h */; };
+		42BBCD27146C89DF00D2A5F8 /* Vector3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCB4146C89DF00D2A5F8 /* Vector3.cpp */; };
+		42BBCD28146C89DF00D2A5F8 /* Vector3.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCB5146C89DF00D2A5F8 /* Vector3.h */; };
+		42BBCD29146C89DF00D2A5F8 /* Vector4.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCB6146C89DF00D2A5F8 /* Vector4.cpp */; };
+		42BBCD2A146C89DF00D2A5F8 /* Vector4.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCB7146C89DF00D2A5F8 /* Vector4.h */; };
+		42BBCD2B146C89DF00D2A5F8 /* VertexAttributeBinding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCB8146C89DF00D2A5F8 /* VertexAttributeBinding.cpp */; };
+		42BBCD2C146C89DF00D2A5F8 /* VertexAttributeBinding.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCB9146C89DF00D2A5F8 /* VertexAttributeBinding.h */; };
+		42BBCD2D146C89DF00D2A5F8 /* VertexFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCBA146C89DF00D2A5F8 /* VertexFormat.cpp */; };
+		42BBCD2E146C89DF00D2A5F8 /* VertexFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCBB146C89DF00D2A5F8 /* VertexFormat.h */; };
+		42BBCD2F146C89DF00D2A5F8 /* Viewport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BBCCBC146C89DF00D2A5F8 /* Viewport.cpp */; };
+		42BBCD30146C89DF00D2A5F8 /* Viewport.h in Headers */ = {isa = PBXBuildFile; fileRef = 42BBCCBD146C89DF00D2A5F8 /* Viewport.h */; };
+		42CCD554146EC1DD00353661 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CCD553146EC1DD00353661 /* libz.dylib */; };
+		42CCD556146EC1EB00353661 /* libpng.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42CCD555146EC1EB00353661 /* libpng.a */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+		4220A6E7146B122B00CAEB3A /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = SDKs/MacOSX10.7.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
+		4234D99A14686C52003031B3 /* libgameplay.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libgameplay.a; sourceTree = BUILT_PRODUCTS_DIR; };
+		4234D99D14686C52003031B3 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
+		4299EFA8146AC94300FF4A73 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = SDKs/MacOSX10.7.sdk/System/Library/Frameworks/OpenGL.framework; sourceTree = DEVELOPER_DIR; };
+		4299EFAA146AC94B00FF4A73 /* OpenAL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenAL.framework; path = SDKs/MacOSX10.7.sdk/System/Library/Frameworks/OpenAL.framework; sourceTree = DEVELOPER_DIR; };
+		42BBCC4B146C89DF00D2A5F8 /* Animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Animation.cpp; path = src/Animation.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC4C146C89DF00D2A5F8 /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animation.h; path = src/Animation.h; sourceTree = SOURCE_ROOT; };
+		42BBCC4D146C89DF00D2A5F8 /* AnimationClip.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AnimationClip.cpp; path = src/AnimationClip.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC4E146C89DF00D2A5F8 /* AnimationClip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationClip.h; path = src/AnimationClip.h; sourceTree = SOURCE_ROOT; };
+		42BBCC4F146C89DF00D2A5F8 /* AnimationController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AnimationController.cpp; path = src/AnimationController.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC50146C89DF00D2A5F8 /* AnimationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationController.h; path = src/AnimationController.h; sourceTree = SOURCE_ROOT; };
+		42BBCC51146C89DF00D2A5F8 /* AnimationTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AnimationTarget.cpp; path = src/AnimationTarget.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC52146C89DF00D2A5F8 /* AnimationTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationTarget.h; path = src/AnimationTarget.h; sourceTree = SOURCE_ROOT; };
+		42BBCC53146C89DF00D2A5F8 /* AnimationValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AnimationValue.cpp; path = src/AnimationValue.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC54146C89DF00D2A5F8 /* AnimationValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationValue.h; path = src/AnimationValue.h; sourceTree = SOURCE_ROOT; };
+		42BBCC55146C89DF00D2A5F8 /* AudioBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AudioBuffer.cpp; path = src/AudioBuffer.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC56146C89DF00D2A5F8 /* AudioBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioBuffer.h; path = src/AudioBuffer.h; sourceTree = SOURCE_ROOT; };
+		42BBCC57146C89DF00D2A5F8 /* AudioController.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AudioController.cpp; path = src/AudioController.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC58146C89DF00D2A5F8 /* AudioController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioController.h; path = src/AudioController.h; sourceTree = SOURCE_ROOT; };
+		42BBCC59146C89DF00D2A5F8 /* AudioListener.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AudioListener.cpp; path = src/AudioListener.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC5A146C89DF00D2A5F8 /* AudioListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioListener.h; path = src/AudioListener.h; sourceTree = SOURCE_ROOT; };
+		42BBCC5B146C89DF00D2A5F8 /* AudioSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AudioSource.cpp; path = src/AudioSource.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC5C146C89DF00D2A5F8 /* AudioSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AudioSource.h; path = src/AudioSource.h; sourceTree = SOURCE_ROOT; };
+		42BBCC5D146C89DF00D2A5F8 /* Base.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Base.h; path = src/Base.h; sourceTree = SOURCE_ROOT; };
+		42BBCC5E146C89DF00D2A5F8 /* BoundingBox.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BoundingBox.cpp; path = src/BoundingBox.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC5F146C89DF00D2A5F8 /* BoundingBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoundingBox.h; path = src/BoundingBox.h; sourceTree = SOURCE_ROOT; };
+		42BBCC60146C89DF00D2A5F8 /* BoundingSphere.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BoundingSphere.cpp; path = src/BoundingSphere.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC61146C89DF00D2A5F8 /* BoundingSphere.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BoundingSphere.h; path = src/BoundingSphere.h; sourceTree = SOURCE_ROOT; };
+		42BBCC62146C89DF00D2A5F8 /* Camera.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Camera.cpp; path = src/Camera.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC63146C89DF00D2A5F8 /* Camera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Camera.h; path = src/Camera.h; sourceTree = SOURCE_ROOT; };
+		42BBCC64146C89DF00D2A5F8 /* Curve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Curve.cpp; path = src/Curve.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC65146C89DF00D2A5F8 /* Curve.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Curve.h; path = src/Curve.h; sourceTree = SOURCE_ROOT; };
+		42BBCC66146C89DF00D2A5F8 /* DepthStencilTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DepthStencilTarget.cpp; path = src/DepthStencilTarget.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC67146C89DF00D2A5F8 /* DepthStencilTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DepthStencilTarget.h; path = src/DepthStencilTarget.h; sourceTree = SOURCE_ROOT; };
+		42BBCC68146C89DF00D2A5F8 /* Effect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Effect.cpp; path = src/Effect.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC69146C89DF00D2A5F8 /* Effect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Effect.h; path = src/Effect.h; sourceTree = SOURCE_ROOT; };
+		42BBCC6A146C89DF00D2A5F8 /* FileSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FileSystem.cpp; path = src/FileSystem.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC6B146C89DF00D2A5F8 /* FileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileSystem.h; path = src/FileSystem.h; sourceTree = SOURCE_ROOT; };
+		42BBCC6C146C89DF00D2A5F8 /* Font.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Font.cpp; path = src/Font.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC6D146C89DF00D2A5F8 /* Font.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Font.h; path = src/Font.h; sourceTree = SOURCE_ROOT; };
+		42BBCC6E146C89DF00D2A5F8 /* FrameBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = FrameBuffer.cpp; path = src/FrameBuffer.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC6F146C89DF00D2A5F8 /* FrameBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FrameBuffer.h; path = src/FrameBuffer.h; sourceTree = SOURCE_ROOT; };
+		42BBCC70146C89DF00D2A5F8 /* Frustum.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Frustum.cpp; path = src/Frustum.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC71146C89DF00D2A5F8 /* Frustum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Frustum.h; path = src/Frustum.h; sourceTree = SOURCE_ROOT; };
+		42BBCC72146C89DF00D2A5F8 /* Game.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Game.cpp; path = src/Game.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC73146C89DF00D2A5F8 /* Game.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Game.h; path = src/Game.h; sourceTree = SOURCE_ROOT; };
+		42BBCC74146C89DF00D2A5F8 /* gameplay-main-macosx.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = "gameplay-main-macosx.mm"; path = "src/gameplay-main-macosx.mm"; sourceTree = SOURCE_ROOT; };
+		42BBCC75146C89DF00D2A5F8 /* gameplay-main-qnx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gameplay-main-qnx.cpp"; path = "src/gameplay-main-qnx.cpp"; sourceTree = SOURCE_ROOT; };
+		42BBCC76146C89DF00D2A5F8 /* gameplay-main-win32.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = "gameplay-main-win32.cpp"; path = "src/gameplay-main-win32.cpp"; sourceTree = SOURCE_ROOT; };
+		42BBCC77146C89DF00D2A5F8 /* gameplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gameplay.h; path = src/gameplay.h; sourceTree = SOURCE_ROOT; };
+		42BBCC78146C89DF00D2A5F8 /* Input.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Input.cpp; path = src/Input.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC79146C89DF00D2A5F8 /* Input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Input.h; path = src/Input.h; sourceTree = SOURCE_ROOT; };
+		42BBCC7A146C89DF00D2A5F8 /* Joint.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Joint.cpp; path = src/Joint.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC7B146C89DF00D2A5F8 /* Joint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Joint.h; path = src/Joint.h; sourceTree = SOURCE_ROOT; };
+		42BBCC7C146C89DF00D2A5F8 /* Light.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Light.cpp; path = src/Light.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC7D146C89DF00D2A5F8 /* Light.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Light.h; path = src/Light.h; sourceTree = SOURCE_ROOT; };
+		42BBCC7E146C89DF00D2A5F8 /* Material.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Material.cpp; path = src/Material.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC7F146C89DF00D2A5F8 /* Material.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Material.h; path = src/Material.h; sourceTree = SOURCE_ROOT; };
+		42BBCC80146C89DF00D2A5F8 /* MaterialParameter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MaterialParameter.cpp; path = src/MaterialParameter.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC81146C89DF00D2A5F8 /* MaterialParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MaterialParameter.h; path = src/MaterialParameter.h; sourceTree = SOURCE_ROOT; };
+		42BBCC82146C89DF00D2A5F8 /* Matrix.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Matrix.cpp; path = src/Matrix.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC83146C89DF00D2A5F8 /* Matrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Matrix.h; path = src/Matrix.h; sourceTree = SOURCE_ROOT; };
+		42BBCC84146C89DF00D2A5F8 /* Mesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Mesh.cpp; path = src/Mesh.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC85146C89DF00D2A5F8 /* Mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Mesh.h; path = src/Mesh.h; sourceTree = SOURCE_ROOT; };
+		42BBCC86146C89DF00D2A5F8 /* MeshPart.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MeshPart.cpp; path = src/MeshPart.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC87146C89DF00D2A5F8 /* MeshPart.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshPart.h; path = src/MeshPart.h; sourceTree = SOURCE_ROOT; };
+		42BBCC88146C89DF00D2A5F8 /* MeshSkin.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MeshSkin.cpp; path = src/MeshSkin.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC89146C89DF00D2A5F8 /* MeshSkin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshSkin.h; path = src/MeshSkin.h; sourceTree = SOURCE_ROOT; };
+		42BBCC8A146C89DF00D2A5F8 /* Model.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Model.cpp; path = src/Model.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC8B146C89DF00D2A5F8 /* Model.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Model.h; path = src/Model.h; sourceTree = SOURCE_ROOT; };
+		42BBCC8C146C89DF00D2A5F8 /* Node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Node.cpp; path = src/Node.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC8D146C89DF00D2A5F8 /* Node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Node.h; path = src/Node.h; sourceTree = SOURCE_ROOT; };
+		42BBCC8E146C89DF00D2A5F8 /* Package.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Package.cpp; path = src/Package.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC8F146C89DF00D2A5F8 /* Package.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Package.h; path = src/Package.h; sourceTree = SOURCE_ROOT; };
+		42BBCC90146C89DF00D2A5F8 /* ParticleEmitter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ParticleEmitter.cpp; path = src/ParticleEmitter.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC91146C89DF00D2A5F8 /* ParticleEmitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ParticleEmitter.h; path = src/ParticleEmitter.h; sourceTree = SOURCE_ROOT; };
+		42BBCC92146C89DF00D2A5F8 /* Pass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Pass.cpp; path = src/Pass.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC93146C89DF00D2A5F8 /* Pass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Pass.h; path = src/Pass.h; sourceTree = SOURCE_ROOT; };
+		42BBCC94146C89DF00D2A5F8 /* Plane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Plane.cpp; path = src/Plane.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC95146C89DF00D2A5F8 /* Plane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Plane.h; path = src/Plane.h; sourceTree = SOURCE_ROOT; };
+		42BBCC96146C89DF00D2A5F8 /* Platform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Platform.h; path = src/Platform.h; sourceTree = SOURCE_ROOT; };
+		42BBCC97146C89DF00D2A5F8 /* PlatformMacOSX.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = PlatformMacOSX.mm; path = src/PlatformMacOSX.mm; sourceTree = SOURCE_ROOT; };
+		42BBCC98146C89DF00D2A5F8 /* PlatformQNX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PlatformQNX.cpp; path = src/PlatformQNX.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC99146C89DF00D2A5F8 /* PlatformWin32.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PlatformWin32.cpp; path = src/PlatformWin32.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC9A146C89DF00D2A5F8 /* Properties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Properties.cpp; path = src/Properties.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC9B146C89DF00D2A5F8 /* Properties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Properties.h; path = src/Properties.h; sourceTree = SOURCE_ROOT; };
+		42BBCC9C146C89DF00D2A5F8 /* Quaternion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Quaternion.cpp; path = src/Quaternion.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC9D146C89DF00D2A5F8 /* Quaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Quaternion.h; path = src/Quaternion.h; sourceTree = SOURCE_ROOT; };
+		42BBCC9E146C89DF00D2A5F8 /* Ray.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Ray.cpp; path = src/Ray.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCC9F146C89DF00D2A5F8 /* Ray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Ray.h; path = src/Ray.h; sourceTree = SOURCE_ROOT; };
+		42BBCCA0146C89DF00D2A5F8 /* Rectangle.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Rectangle.cpp; path = src/Rectangle.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCA1146C89DF00D2A5F8 /* Rectangle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Rectangle.h; path = src/Rectangle.h; sourceTree = SOURCE_ROOT; };
+		42BBCCA2146C89DF00D2A5F8 /* Ref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Ref.cpp; path = src/Ref.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCA3146C89DF00D2A5F8 /* Ref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Ref.h; path = src/Ref.h; sourceTree = SOURCE_ROOT; };
+		42BBCCA4146C89DF00D2A5F8 /* RenderState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderState.cpp; path = src/RenderState.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCA5146C89DF00D2A5F8 /* RenderState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderState.h; path = src/RenderState.h; sourceTree = SOURCE_ROOT; };
+		42BBCCA6146C89DF00D2A5F8 /* RenderTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RenderTarget.cpp; path = src/RenderTarget.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCA7146C89DF00D2A5F8 /* RenderTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RenderTarget.h; path = src/RenderTarget.h; sourceTree = SOURCE_ROOT; };
+		42BBCCA8146C89DF00D2A5F8 /* Scene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Scene.cpp; path = src/Scene.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCA9146C89DF00D2A5F8 /* Scene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Scene.h; path = src/Scene.h; sourceTree = SOURCE_ROOT; };
+		42BBCCAA146C89DF00D2A5F8 /* SpriteBatch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SpriteBatch.cpp; path = src/SpriteBatch.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCAB146C89DF00D2A5F8 /* SpriteBatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SpriteBatch.h; path = src/SpriteBatch.h; sourceTree = SOURCE_ROOT; };
+		42BBCCAC146C89DF00D2A5F8 /* Technique.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Technique.cpp; path = src/Technique.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCAD146C89DF00D2A5F8 /* Technique.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Technique.h; path = src/Technique.h; sourceTree = SOURCE_ROOT; };
+		42BBCCAE146C89DF00D2A5F8 /* Texture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Texture.cpp; path = src/Texture.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCAF146C89DF00D2A5F8 /* Texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Texture.h; path = src/Texture.h; sourceTree = SOURCE_ROOT; };
+		42BBCCB0146C89DF00D2A5F8 /* Transform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Transform.cpp; path = src/Transform.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCB1146C89DF00D2A5F8 /* Transform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Transform.h; path = src/Transform.h; sourceTree = SOURCE_ROOT; };
+		42BBCCB2146C89DF00D2A5F8 /* Vector2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Vector2.cpp; path = src/Vector2.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCB3146C89DF00D2A5F8 /* Vector2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vector2.h; path = src/Vector2.h; sourceTree = SOURCE_ROOT; };
+		42BBCCB4146C89DF00D2A5F8 /* Vector3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Vector3.cpp; path = src/Vector3.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCB5146C89DF00D2A5F8 /* Vector3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vector3.h; path = src/Vector3.h; sourceTree = SOURCE_ROOT; };
+		42BBCCB6146C89DF00D2A5F8 /* Vector4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Vector4.cpp; path = src/Vector4.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCB7146C89DF00D2A5F8 /* Vector4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vector4.h; path = src/Vector4.h; sourceTree = SOURCE_ROOT; };
+		42BBCCB8146C89DF00D2A5F8 /* VertexAttributeBinding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VertexAttributeBinding.cpp; path = src/VertexAttributeBinding.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCB9146C89DF00D2A5F8 /* VertexAttributeBinding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VertexAttributeBinding.h; path = src/VertexAttributeBinding.h; sourceTree = SOURCE_ROOT; };
+		42BBCCBA146C89DF00D2A5F8 /* VertexFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VertexFormat.cpp; path = src/VertexFormat.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCBB146C89DF00D2A5F8 /* VertexFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VertexFormat.h; path = src/VertexFormat.h; sourceTree = SOURCE_ROOT; };
+		42BBCCBC146C89DF00D2A5F8 /* Viewport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Viewport.cpp; path = src/Viewport.cpp; sourceTree = SOURCE_ROOT; };
+		42BBCCBD146C89DF00D2A5F8 /* Viewport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Viewport.h; path = src/Viewport.h; sourceTree = SOURCE_ROOT; };
+		42CCD553146EC1DD00353661 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = SDKs/MacOSX10.7.sdk/usr/lib/libz.dylib; sourceTree = DEVELOPER_DIR; };
+		42CCD555146EC1EB00353661 /* libpng.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpng.a; path = "../external-deps/libpng/lib/macosx/libpng.a"; sourceTree = "<group>"; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+		4234D99714686C52003031B3 /* Frameworks */ = {
+			isa = PBXFrameworksBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				42CCD556146EC1EB00353661 /* libpng.a in Frameworks */,
+				42CCD554146EC1DD00353661 /* libz.dylib in Frameworks */,
+				4234D99E14686C52003031B3 /* Cocoa.framework in Frameworks */,
+				4220A6E8146B122B00CAEB3A /* QuartzCore.framework in Frameworks */,
+				4299EFA9146AC94300FF4A73 /* OpenGL.framework in Frameworks */,
+				4299EFAB146AC94B00FF4A73 /* OpenAL.framework in Frameworks */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+		4234D98A14686BB6003031B3 = {
+			isa = PBXGroup;
+			children = (
+				42CCD555146EC1EB00353661 /* libpng.a */,
+				42CCD553146EC1DD00353661 /* libz.dylib */,
+				4234D9A314686C52003031B3 /* gameplay */,
+				42CCD4AF146D811D00353661 /* Frameworks */,
+				4234D99B14686C52003031B3 /* Products */,
+			);
+			sourceTree = "<group>";
+		};
+		4234D99B14686C52003031B3 /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				4234D99A14686C52003031B3 /* libgameplay.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
+		4234D9A314686C52003031B3 /* gameplay */ = {
+			isa = PBXGroup;
+			children = (
+				42BBCC4B146C89DF00D2A5F8 /* Animation.cpp */,
+				42BBCC4C146C89DF00D2A5F8 /* Animation.h */,
+				42BBCC4D146C89DF00D2A5F8 /* AnimationClip.cpp */,
+				42BBCC4E146C89DF00D2A5F8 /* AnimationClip.h */,
+				42BBCC4F146C89DF00D2A5F8 /* AnimationController.cpp */,
+				42BBCC50146C89DF00D2A5F8 /* AnimationController.h */,
+				42BBCC51146C89DF00D2A5F8 /* AnimationTarget.cpp */,
+				42BBCC52146C89DF00D2A5F8 /* AnimationTarget.h */,
+				42BBCC53146C89DF00D2A5F8 /* AnimationValue.cpp */,
+				42BBCC54146C89DF00D2A5F8 /* AnimationValue.h */,
+				42BBCC55146C89DF00D2A5F8 /* AudioBuffer.cpp */,
+				42BBCC56146C89DF00D2A5F8 /* AudioBuffer.h */,
+				42BBCC57146C89DF00D2A5F8 /* AudioController.cpp */,
+				42BBCC58146C89DF00D2A5F8 /* AudioController.h */,
+				42BBCC59146C89DF00D2A5F8 /* AudioListener.cpp */,
+				42BBCC5A146C89DF00D2A5F8 /* AudioListener.h */,
+				42BBCC5B146C89DF00D2A5F8 /* AudioSource.cpp */,
+				42BBCC5C146C89DF00D2A5F8 /* AudioSource.h */,
+				42BBCC5D146C89DF00D2A5F8 /* Base.h */,
+				42BBCC5E146C89DF00D2A5F8 /* BoundingBox.cpp */,
+				42BBCC5F146C89DF00D2A5F8 /* BoundingBox.h */,
+				42BBCC60146C89DF00D2A5F8 /* BoundingSphere.cpp */,
+				42BBCC61146C89DF00D2A5F8 /* BoundingSphere.h */,
+				42BBCC62146C89DF00D2A5F8 /* Camera.cpp */,
+				42BBCC63146C89DF00D2A5F8 /* Camera.h */,
+				42BBCC64146C89DF00D2A5F8 /* Curve.cpp */,
+				42BBCC65146C89DF00D2A5F8 /* Curve.h */,
+				42BBCC66146C89DF00D2A5F8 /* DepthStencilTarget.cpp */,
+				42BBCC67146C89DF00D2A5F8 /* DepthStencilTarget.h */,
+				42BBCC68146C89DF00D2A5F8 /* Effect.cpp */,
+				42BBCC69146C89DF00D2A5F8 /* Effect.h */,
+				42BBCC6A146C89DF00D2A5F8 /* FileSystem.cpp */,
+				42BBCC6B146C89DF00D2A5F8 /* FileSystem.h */,
+				42BBCC6C146C89DF00D2A5F8 /* Font.cpp */,
+				42BBCC6D146C89DF00D2A5F8 /* Font.h */,
+				42BBCC6E146C89DF00D2A5F8 /* FrameBuffer.cpp */,
+				42BBCC6F146C89DF00D2A5F8 /* FrameBuffer.h */,
+				42BBCC70146C89DF00D2A5F8 /* Frustum.cpp */,
+				42BBCC71146C89DF00D2A5F8 /* Frustum.h */,
+				42BBCC72146C89DF00D2A5F8 /* Game.cpp */,
+				42BBCC73146C89DF00D2A5F8 /* Game.h */,
+				42BBCC74146C89DF00D2A5F8 /* gameplay-main-macosx.mm */,
+				42BBCC75146C89DF00D2A5F8 /* gameplay-main-qnx.cpp */,
+				42BBCC76146C89DF00D2A5F8 /* gameplay-main-win32.cpp */,
+				42BBCC77146C89DF00D2A5F8 /* gameplay.h */,
+				42BBCC78146C89DF00D2A5F8 /* Input.cpp */,
+				42BBCC79146C89DF00D2A5F8 /* Input.h */,
+				42BBCC7A146C89DF00D2A5F8 /* Joint.cpp */,
+				42BBCC7B146C89DF00D2A5F8 /* Joint.h */,
+				42BBCC7C146C89DF00D2A5F8 /* Light.cpp */,
+				42BBCC7D146C89DF00D2A5F8 /* Light.h */,
+				42BBCC7E146C89DF00D2A5F8 /* Material.cpp */,
+				42BBCC7F146C89DF00D2A5F8 /* Material.h */,
+				42BBCC80146C89DF00D2A5F8 /* MaterialParameter.cpp */,
+				42BBCC81146C89DF00D2A5F8 /* MaterialParameter.h */,
+				42BBCC82146C89DF00D2A5F8 /* Matrix.cpp */,
+				42BBCC83146C89DF00D2A5F8 /* Matrix.h */,
+				42BBCC84146C89DF00D2A5F8 /* Mesh.cpp */,
+				42BBCC85146C89DF00D2A5F8 /* Mesh.h */,
+				42BBCC86146C89DF00D2A5F8 /* MeshPart.cpp */,
+				42BBCC87146C89DF00D2A5F8 /* MeshPart.h */,
+				42BBCC88146C89DF00D2A5F8 /* MeshSkin.cpp */,
+				42BBCC89146C89DF00D2A5F8 /* MeshSkin.h */,
+				42BBCC8A146C89DF00D2A5F8 /* Model.cpp */,
+				42BBCC8B146C89DF00D2A5F8 /* Model.h */,
+				42BBCC8C146C89DF00D2A5F8 /* Node.cpp */,
+				42BBCC8D146C89DF00D2A5F8 /* Node.h */,
+				42BBCC8E146C89DF00D2A5F8 /* Package.cpp */,
+				42BBCC8F146C89DF00D2A5F8 /* Package.h */,
+				42BBCC90146C89DF00D2A5F8 /* ParticleEmitter.cpp */,
+				42BBCC91146C89DF00D2A5F8 /* ParticleEmitter.h */,
+				42BBCC92146C89DF00D2A5F8 /* Pass.cpp */,
+				42BBCC93146C89DF00D2A5F8 /* Pass.h */,
+				42BBCC94146C89DF00D2A5F8 /* Plane.cpp */,
+				42BBCC95146C89DF00D2A5F8 /* Plane.h */,
+				42BBCC96146C89DF00D2A5F8 /* Platform.h */,
+				42BBCC97146C89DF00D2A5F8 /* PlatformMacOSX.mm */,
+				42BBCC98146C89DF00D2A5F8 /* PlatformQNX.cpp */,
+				42BBCC99146C89DF00D2A5F8 /* PlatformWin32.cpp */,
+				42BBCC9A146C89DF00D2A5F8 /* Properties.cpp */,
+				42BBCC9B146C89DF00D2A5F8 /* Properties.h */,
+				42BBCC9C146C89DF00D2A5F8 /* Quaternion.cpp */,
+				42BBCC9D146C89DF00D2A5F8 /* Quaternion.h */,
+				42BBCC9E146C89DF00D2A5F8 /* Ray.cpp */,
+				42BBCC9F146C89DF00D2A5F8 /* Ray.h */,
+				42BBCCA0146C89DF00D2A5F8 /* Rectangle.cpp */,
+				42BBCCA1146C89DF00D2A5F8 /* Rectangle.h */,
+				42BBCCA2146C89DF00D2A5F8 /* Ref.cpp */,
+				42BBCCA3146C89DF00D2A5F8 /* Ref.h */,
+				42BBCCA4146C89DF00D2A5F8 /* RenderState.cpp */,
+				42BBCCA5146C89DF00D2A5F8 /* RenderState.h */,
+				42BBCCA6146C89DF00D2A5F8 /* RenderTarget.cpp */,
+				42BBCCA7146C89DF00D2A5F8 /* RenderTarget.h */,
+				42BBCCA8146C89DF00D2A5F8 /* Scene.cpp */,
+				42BBCCA9146C89DF00D2A5F8 /* Scene.h */,
+				42BBCCAA146C89DF00D2A5F8 /* SpriteBatch.cpp */,
+				42BBCCAB146C89DF00D2A5F8 /* SpriteBatch.h */,
+				42BBCCAC146C89DF00D2A5F8 /* Technique.cpp */,
+				42BBCCAD146C89DF00D2A5F8 /* Technique.h */,
+				42BBCCAE146C89DF00D2A5F8 /* Texture.cpp */,
+				42BBCCAF146C89DF00D2A5F8 /* Texture.h */,
+				42BBCCB0146C89DF00D2A5F8 /* Transform.cpp */,
+				42BBCCB1146C89DF00D2A5F8 /* Transform.h */,
+				42BBCCB2146C89DF00D2A5F8 /* Vector2.cpp */,
+				42BBCCB3146C89DF00D2A5F8 /* Vector2.h */,
+				42BBCCB4146C89DF00D2A5F8 /* Vector3.cpp */,
+				42BBCCB5146C89DF00D2A5F8 /* Vector3.h */,
+				42BBCCB6146C89DF00D2A5F8 /* Vector4.cpp */,
+				42BBCCB7146C89DF00D2A5F8 /* Vector4.h */,
+				42BBCCB8146C89DF00D2A5F8 /* VertexAttributeBinding.cpp */,
+				42BBCCB9146C89DF00D2A5F8 /* VertexAttributeBinding.h */,
+				42BBCCBA146C89DF00D2A5F8 /* VertexFormat.cpp */,
+				42BBCCBB146C89DF00D2A5F8 /* VertexFormat.h */,
+				42BBCCBC146C89DF00D2A5F8 /* Viewport.cpp */,
+				42BBCCBD146C89DF00D2A5F8 /* Viewport.h */,
+			);
+			path = gameplay;
+			sourceTree = "<group>";
+		};
+		42CCD4AF146D811D00353661 /* Frameworks */ = {
+			isa = PBXGroup;
+			children = (
+				4234D99D14686C52003031B3 /* Cocoa.framework */,
+				4220A6E7146B122B00CAEB3A /* QuartzCore.framework */,
+				4299EFA8146AC94300FF4A73 /* OpenGL.framework */,
+				4299EFAA146AC94B00FF4A73 /* OpenAL.framework */,
+			);
+			name = Frameworks;
+			sourceTree = "<group>";
+		};
+/* End PBXGroup section */
+
+/* Begin PBXHeadersBuildPhase section */
+		4234D99814686C52003031B3 /* Headers */ = {
+			isa = PBXHeadersBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				42BBCCBF146C89DF00D2A5F8 /* Animation.h in Headers */,
+				42BBCCC1146C89DF00D2A5F8 /* AnimationClip.h in Headers */,
+				42BBCCC3146C89DF00D2A5F8 /* AnimationController.h in Headers */,
+				42BBCCC5146C89DF00D2A5F8 /* AnimationTarget.h in Headers */,
+				42BBCCC7146C89DF00D2A5F8 /* AnimationValue.h in Headers */,
+				42BBCCC9146C89DF00D2A5F8 /* AudioBuffer.h in Headers */,
+				42BBCCCB146C89DF00D2A5F8 /* AudioController.h in Headers */,
+				42BBCCCD146C89DF00D2A5F8 /* AudioListener.h in Headers */,
+				42BBCCCF146C89DF00D2A5F8 /* AudioSource.h in Headers */,
+				42BBCCD0146C89DF00D2A5F8 /* Base.h in Headers */,
+				42BBCCD2146C89DF00D2A5F8 /* BoundingBox.h in Headers */,
+				42BBCCD4146C89DF00D2A5F8 /* BoundingSphere.h in Headers */,
+				42BBCCD6146C89DF00D2A5F8 /* Camera.h in Headers */,
+				42BBCCD8146C89DF00D2A5F8 /* Curve.h in Headers */,
+				42BBCCDA146C89DF00D2A5F8 /* DepthStencilTarget.h in Headers */,
+				42BBCCDC146C89DF00D2A5F8 /* Effect.h in Headers */,
+				42BBCCDE146C89DF00D2A5F8 /* FileSystem.h in Headers */,
+				42BBCCE0146C89DF00D2A5F8 /* Font.h in Headers */,
+				42BBCCE2146C89DF00D2A5F8 /* FrameBuffer.h in Headers */,
+				42BBCCE4146C89DF00D2A5F8 /* Frustum.h in Headers */,
+				42BBCCE6146C89DF00D2A5F8 /* Game.h in Headers */,
+				42BBCCEA146C89DF00D2A5F8 /* gameplay.h in Headers */,
+				42BBCCEC146C89DF00D2A5F8 /* Input.h in Headers */,
+				42BBCCEE146C89DF00D2A5F8 /* Joint.h in Headers */,
+				42BBCCF0146C89DF00D2A5F8 /* Light.h in Headers */,
+				42BBCCF2146C89DF00D2A5F8 /* Material.h in Headers */,
+				42BBCCF4146C89DF00D2A5F8 /* MaterialParameter.h in Headers */,
+				42BBCCF6146C89DF00D2A5F8 /* Matrix.h in Headers */,
+				42BBCCF8146C89DF00D2A5F8 /* Mesh.h in Headers */,
+				42BBCCFA146C89DF00D2A5F8 /* MeshPart.h in Headers */,
+				42BBCCFC146C89DF00D2A5F8 /* MeshSkin.h in Headers */,
+				42BBCCFE146C89DF00D2A5F8 /* Model.h in Headers */,
+				42BBCD00146C89DF00D2A5F8 /* Node.h in Headers */,
+				42BBCD02146C89DF00D2A5F8 /* Package.h in Headers */,
+				42BBCD04146C89DF00D2A5F8 /* ParticleEmitter.h in Headers */,
+				42BBCD06146C89DF00D2A5F8 /* Pass.h in Headers */,
+				42BBCD08146C89DF00D2A5F8 /* Plane.h in Headers */,
+				42BBCD09146C89DF00D2A5F8 /* Platform.h in Headers */,
+				42BBCD0E146C89DF00D2A5F8 /* Properties.h in Headers */,
+				42BBCD10146C89DF00D2A5F8 /* Quaternion.h in Headers */,
+				42BBCD12146C89DF00D2A5F8 /* Ray.h in Headers */,
+				42BBCD14146C89DF00D2A5F8 /* Rectangle.h in Headers */,
+				42BBCD16146C89DF00D2A5F8 /* Ref.h in Headers */,
+				42BBCD18146C89DF00D2A5F8 /* RenderState.h in Headers */,
+				42BBCD1A146C89DF00D2A5F8 /* RenderTarget.h in Headers */,
+				42BBCD1C146C89DF00D2A5F8 /* Scene.h in Headers */,
+				42BBCD1E146C89DF00D2A5F8 /* SpriteBatch.h in Headers */,
+				42BBCD20146C89DF00D2A5F8 /* Technique.h in Headers */,
+				42BBCD22146C89DF00D2A5F8 /* Texture.h in Headers */,
+				42BBCD24146C89DF00D2A5F8 /* Transform.h in Headers */,
+				42BBCD26146C89DF00D2A5F8 /* Vector2.h in Headers */,
+				42BBCD28146C89DF00D2A5F8 /* Vector3.h in Headers */,
+				42BBCD2A146C89DF00D2A5F8 /* Vector4.h in Headers */,
+				42BBCD2C146C89DF00D2A5F8 /* VertexAttributeBinding.h in Headers */,
+				42BBCD2E146C89DF00D2A5F8 /* VertexFormat.h in Headers */,
+				42BBCD30146C89DF00D2A5F8 /* Viewport.h in Headers */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXHeadersBuildPhase section */
+
+/* Begin PBXNativeTarget section */
+		4234D99914686C52003031B3 /* gameplay */ = {
+			isa = PBXNativeTarget;
+			buildConfigurationList = 4234D9AB14686C52003031B3 /* Build configuration list for PBXNativeTarget "gameplay" */;
+			buildPhases = (
+				4234D99614686C52003031B3 /* Sources */,
+				4234D99714686C52003031B3 /* Frameworks */,
+				4234D99814686C52003031B3 /* Headers */,
+			);
+			buildRules = (
+			);
+			dependencies = (
+			);
+			name = gameplay;
+			productName = gameplay;
+			productReference = 4234D99A14686C52003031B3 /* libgameplay.a */;
+			productType = "com.apple.product-type.library.static";
+		};
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+		4234D98C14686BB6003031B3 /* Project object */ = {
+			isa = PBXProject;
+			attributes = {
+				LastUpgradeCheck = 0420;
+			};
+			buildConfigurationList = 4234D98F14686BB6003031B3 /* Build configuration list for PBXProject "gameplay" */;
+			compatibilityVersion = "Xcode 3.2";
+			developmentRegion = English;
+			hasScannedForEncodings = 0;
+			knownRegions = (
+				en,
+			);
+			mainGroup = 4234D98A14686BB6003031B3;
+			productRefGroup = 4234D99B14686C52003031B3 /* Products */;
+			projectDirPath = "";
+			projectRoot = "";
+			targets = (
+				4234D99914686C52003031B3 /* gameplay */,
+			);
+		};
+/* End PBXProject section */
+
+/* Begin PBXSourcesBuildPhase section */
+		4234D99614686C52003031B3 /* Sources */ = {
+			isa = PBXSourcesBuildPhase;
+			buildActionMask = 2147483647;
+			files = (
+				42BBCCBE146C89DF00D2A5F8 /* Animation.cpp in Sources */,
+				42BBCCC0146C89DF00D2A5F8 /* AnimationClip.cpp in Sources */,
+				42BBCCC2146C89DF00D2A5F8 /* AnimationController.cpp in Sources */,
+				42BBCCC4146C89DF00D2A5F8 /* AnimationTarget.cpp in Sources */,
+				42BBCCC6146C89DF00D2A5F8 /* AnimationValue.cpp in Sources */,
+				42BBCCC8146C89DF00D2A5F8 /* AudioBuffer.cpp in Sources */,
+				42BBCCCA146C89DF00D2A5F8 /* AudioController.cpp in Sources */,
+				42BBCCCC146C89DF00D2A5F8 /* AudioListener.cpp in Sources */,
+				42BBCCCE146C89DF00D2A5F8 /* AudioSource.cpp in Sources */,
+				42BBCCD1146C89DF00D2A5F8 /* BoundingBox.cpp in Sources */,
+				42BBCCD3146C89DF00D2A5F8 /* BoundingSphere.cpp in Sources */,
+				42BBCCD5146C89DF00D2A5F8 /* Camera.cpp in Sources */,
+				42BBCCD7146C89DF00D2A5F8 /* Curve.cpp in Sources */,
+				42BBCCD9146C89DF00D2A5F8 /* DepthStencilTarget.cpp in Sources */,
+				42BBCCDB146C89DF00D2A5F8 /* Effect.cpp in Sources */,
+				42BBCCDD146C89DF00D2A5F8 /* FileSystem.cpp in Sources */,
+				42BBCCDF146C89DF00D2A5F8 /* Font.cpp in Sources */,
+				42BBCCE1146C89DF00D2A5F8 /* FrameBuffer.cpp in Sources */,
+				42BBCCE3146C89DF00D2A5F8 /* Frustum.cpp in Sources */,
+				42BBCCE5146C89DF00D2A5F8 /* Game.cpp in Sources */,
+				42BBCCE7146C89DF00D2A5F8 /* gameplay-main-macosx.mm in Sources */,
+				42BBCCE8146C89DF00D2A5F8 /* gameplay-main-qnx.cpp in Sources */,
+				42BBCCE9146C89DF00D2A5F8 /* gameplay-main-win32.cpp in Sources */,
+				42BBCCEB146C89DF00D2A5F8 /* Input.cpp in Sources */,
+				42BBCCED146C89DF00D2A5F8 /* Joint.cpp in Sources */,
+				42BBCCEF146C89DF00D2A5F8 /* Light.cpp in Sources */,
+				42BBCCF1146C89DF00D2A5F8 /* Material.cpp in Sources */,
+				42BBCCF3146C89DF00D2A5F8 /* MaterialParameter.cpp in Sources */,
+				42BBCCF5146C89DF00D2A5F8 /* Matrix.cpp in Sources */,
+				42BBCCF7146C89DF00D2A5F8 /* Mesh.cpp in Sources */,
+				42BBCCF9146C89DF00D2A5F8 /* MeshPart.cpp in Sources */,
+				42BBCCFB146C89DF00D2A5F8 /* MeshSkin.cpp in Sources */,
+				42BBCCFD146C89DF00D2A5F8 /* Model.cpp in Sources */,
+				42BBCCFF146C89DF00D2A5F8 /* Node.cpp in Sources */,
+				42BBCD01146C89DF00D2A5F8 /* Package.cpp in Sources */,
+				42BBCD03146C89DF00D2A5F8 /* ParticleEmitter.cpp in Sources */,
+				42BBCD05146C89DF00D2A5F8 /* Pass.cpp in Sources */,
+				42BBCD07146C89DF00D2A5F8 /* Plane.cpp in Sources */,
+				42BBCD0A146C89DF00D2A5F8 /* PlatformMacOSX.mm in Sources */,
+				42BBCD0B146C89DF00D2A5F8 /* PlatformQNX.cpp in Sources */,
+				42BBCD0C146C89DF00D2A5F8 /* PlatformWin32.cpp in Sources */,
+				42BBCD0D146C89DF00D2A5F8 /* Properties.cpp in Sources */,
+				42BBCD0F146C89DF00D2A5F8 /* Quaternion.cpp in Sources */,
+				42BBCD11146C89DF00D2A5F8 /* Ray.cpp in Sources */,
+				42BBCD13146C89DF00D2A5F8 /* Rectangle.cpp in Sources */,
+				42BBCD15146C89DF00D2A5F8 /* Ref.cpp in Sources */,
+				42BBCD17146C89DF00D2A5F8 /* RenderState.cpp in Sources */,
+				42BBCD19146C89DF00D2A5F8 /* RenderTarget.cpp in Sources */,
+				42BBCD1B146C89DF00D2A5F8 /* Scene.cpp in Sources */,
+				42BBCD1D146C89DF00D2A5F8 /* SpriteBatch.cpp in Sources */,
+				42BBCD1F146C89DF00D2A5F8 /* Technique.cpp in Sources */,
+				42BBCD21146C89DF00D2A5F8 /* Texture.cpp in Sources */,
+				42BBCD23146C89DF00D2A5F8 /* Transform.cpp in Sources */,
+				42BBCD25146C89DF00D2A5F8 /* Vector2.cpp in Sources */,
+				42BBCD27146C89DF00D2A5F8 /* Vector3.cpp in Sources */,
+				42BBCD29146C89DF00D2A5F8 /* Vector4.cpp in Sources */,
+				42BBCD2B146C89DF00D2A5F8 /* VertexAttributeBinding.cpp in Sources */,
+				42BBCD2D146C89DF00D2A5F8 /* VertexFormat.cpp in Sources */,
+				42BBCD2F146C89DF00D2A5F8 /* Viewport.cpp in Sources */,
+			);
+			runOnlyForDeploymentPostprocessing = 0;
+		};
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+		4234D99114686BB6003031B3 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Debug;
+		};
+		4234D99214686BB6003031B3 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+			};
+			name = Release;
+		};
+		4234D9A914686C52003031B3 /* Debug */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				COPY_PHASE_STRIP = NO;
+				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_DYNAMIC_NO_PIC = NO;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_OPTIMIZATION_LEVEL = 0;
+				GCC_PRECOMPILE_PREFIX_HEADER = NO;
+				GCC_PREFIX_HEADER = "";
+				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 = NO;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
+				GCC_WARN_MISSING_PARENTHESES = NO;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = "../external-deps/libpng/include";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../external-deps/libpng/lib/macosx\"",
+				);
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				ONLY_ACTIVE_ARCH = YES;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = macosx;
+				SHARED_PRECOMPS_DIR = "";
+				USER_HEADER_SEARCH_PATHS = "$(inherited)";
+			};
+			name = Debug;
+		};
+		4234D9AA14686C52003031B3 /* Release */ = {
+			isa = XCBuildConfiguration;
+			buildSettings = {
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+				COPY_PHASE_STRIP = YES;
+				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+				FRAMEWORK_SEARCH_PATHS = "$(inherited)";
+				GCC_C_LANGUAGE_STANDARD = gnu99;
+				GCC_ENABLE_OBJC_EXCEPTIONS = YES;
+				GCC_PRECOMPILE_PREFIX_HEADER = NO;
+				GCC_PREFIX_HEADER = "";
+				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
+				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO;
+				GCC_WARN_ABOUT_RETURN_TYPE = YES;
+				GCC_WARN_CHECK_SWITCH_STATEMENTS = NO;
+				GCC_WARN_MISSING_PARENTHESES = NO;
+				GCC_WARN_UNUSED_VARIABLE = YES;
+				HEADER_SEARCH_PATHS = "../external-deps/libpng/include";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/../external-deps/libpng/lib/macosx\"",
+				);
+				MACOSX_DEPLOYMENT_TARGET = 10.7;
+				PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
+				PRODUCT_NAME = "$(TARGET_NAME)";
+				SDKROOT = macosx;
+				SHARED_PRECOMPS_DIR = "";
+				USER_HEADER_SEARCH_PATHS = "$(inherited)";
+			};
+			name = Release;
+		};
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+		4234D98F14686BB6003031B3 /* Build configuration list for PBXProject "gameplay" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				4234D99114686BB6003031B3 /* Debug */,
+				4234D99214686BB6003031B3 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+		4234D9AB14686C52003031B3 /* Build configuration list for PBXNativeTarget "gameplay" */ = {
+			isa = XCConfigurationList;
+			buildConfigurations = (
+				4234D9A914686C52003031B3 /* Debug */,
+				4234D9AA14686C52003031B3 /* Release */,
+			);
+			defaultConfigurationIsVisible = 0;
+			defaultConfigurationName = Release;
+		};
+/* End XCConfigurationList section */
+	};
+	rootObject = 4234D98C14686BB6003031B3 /* Project object */;
+}

+ 2 - 0
gameplay/res/shaders/bumped-specular.fsh

@@ -1,4 +1,6 @@
+#ifdef OPENGL_ES
 precision highp float;
+#endif
 
 // Uniforms
 uniform vec3 u_lightColor;                  // Light color.

+ 3 - 1
gameplay/res/shaders/bumped-specular.vsh

@@ -229,7 +229,9 @@ void main()
     gl_Position = u_worldViewProjectionMatrix * position;
 
     // Transform the normal, tangent and binormals to  view space.
-    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix);
+    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix[0].xyz,
+                                                u_inverseTransposeWorldViewMatrix[1].xyz,
+                                                u_inverseTransposeWorldViewMatrix[2].xyz);
     vec3 tangentVector  = normalize(inverseTransposeWorldViewMatrix * tangent);
     vec3 normalVector = normalize(inverseTransposeWorldViewMatrix * normal);
     vec3 binormalVector = normalize(inverseTransposeWorldViewMatrix * binormal);

+ 2 - 0
gameplay/res/shaders/bumped.fsh

@@ -1,4 +1,6 @@
+#ifdef OPENGL_ES
 precision highp float;
+#endif
 
 // Uniforms
 uniform vec3 u_lightColor;                   // Light color.

+ 2 - 0
gameplay/res/shaders/colored-specular.fsh

@@ -1,4 +1,6 @@
+#ifdef OPENGL_ES
 precision highp float;
+#endif
 
 // Uniforms
 uniform vec3 u_lightColor;                      // Light color

+ 3 - 1
gameplay/res/shaders/colored-specular.vsh

@@ -180,7 +180,9 @@ void main()
     gl_Position = u_worldViewProjectionMatrix * position;
 
     // Transform normal to view space.
-    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix);
+    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix[0].xyz,
+                                                u_inverseTransposeWorldViewMatrix[1].xyz,
+                                                u_inverseTransposeWorldViewMatrix[2].xyz);
     v_normalVector = inverseTransposeWorldViewMatrix * normal;
 
     // Compute the camera direction.

+ 2 - 0
gameplay/res/shaders/colored.fsh

@@ -1,4 +1,6 @@
+#ifdef OPENGL_ES
 precision highp float;
+#endif
 
 // Uniforms
 uniform vec3 u_lightColor;                      // Light color

+ 3 - 1
gameplay/res/shaders/colored.vsh

@@ -173,7 +173,9 @@ void main()
     gl_Position = u_worldViewProjectionMatrix * position;
 
     // Transform normal to view space.
-    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix);
+    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix[0].xyz,
+                                                u_inverseTransposeWorldViewMatrix[1].xyz,
+                                                u_inverseTransposeWorldViewMatrix[2].xyz);
     v_normalVector = inverseTransposeWorldViewMatrix * normal;
 
     // Apply light.

+ 2 - 0
gameplay/res/shaders/diffuse-specular.fsh

@@ -1,4 +1,6 @@
+#ifdef OPENGL_ES
 precision highp float;
+#endif
 
 // Uniforms
 uniform vec3 u_lightColor;                      // Light color

+ 3 - 1
gameplay/res/shaders/diffuse-specular.vsh

@@ -179,7 +179,9 @@ void main()
     gl_Position = u_worldViewProjectionMatrix * position;
 
     // Transform normal to view space.
-    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix);
+    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix[0].xyz,
+                                                u_inverseTransposeWorldViewMatrix[1].xyz,
+                                                u_inverseTransposeWorldViewMatrix[2].xyz);
     v_normalVector = inverseTransposeWorldViewMatrix * normal;
 
     // Compute the camera direction.

+ 2 - 0
gameplay/res/shaders/diffuse.fsh

@@ -1,4 +1,6 @@
+#ifdef OPENGL_ES
 precision highp float;
+#endif
 
 // Uniforms
 uniform vec3 u_lightColor;                      // Light color

+ 3 - 1
gameplay/res/shaders/diffuse.vsh

@@ -178,7 +178,9 @@ void main()
     gl_Position = u_worldViewProjectionMatrix * position;
 
     // Transform normal to view space.
-    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix);
+    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix[0].xyz,
+                                                u_inverseTransposeWorldViewMatrix[1].xyz,
+                                                u_inverseTransposeWorldViewMatrix[2].xyz);
     v_normalVector = inverseTransposeWorldViewMatrix * normal;
 
     // Apply light.

+ 2 - 0
gameplay/res/shaders/parallax-specular.fsh

@@ -1,4 +1,6 @@
+#ifdef OPENGL_ES
 precision highp float;
+#endif
 
 // Uniforms
 uniform vec3 u_lightColor;                      // Light color.

+ 3 - 1
gameplay/res/shaders/parallax-specular.vsh

@@ -99,7 +99,9 @@ void main()
     gl_Position = u_worldViewProjectionMatrix * a_position;
 
     // Transform the normal, tangent and binormals to  view space.
-    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix);
+    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix[0].xyz,
+                                                u_inverseTransposeWorldViewMatrix[1].xyz,
+                                                u_inverseTransposeWorldViewMatrix[2].xyz);
     vec3 tangentVector  = normalize(inverseTransposeWorldViewMatrix * a_tangent);
     vec3 normalVector = normalize(inverseTransposeWorldViewMatrix * a_normal);
     vec3 binormalVector = normalize(inverseTransposeWorldViewMatrix * a_binormal);

+ 2 - 0
gameplay/res/shaders/parallax.fsh

@@ -1,4 +1,6 @@
+#ifdef OPENGL_ES
 precision highp float;
+#endif
 
 // Uniforms
 uniform vec3 u_lightColor;                      // Light color.

+ 3 - 1
gameplay/res/shaders/parallax.vsh

@@ -99,7 +99,9 @@ void main()
     gl_Position = u_worldViewProjectionMatrix * a_position;
 
     // Transform the normal, tangent and binormals to  view space.
-    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix);
+    mat3 inverseTransposeWorldViewMatrix = mat3(u_inverseTransposeWorldViewMatrix[0].xyz,
+                                                u_inverseTransposeWorldViewMatrix[1].xyz,
+                                                u_inverseTransposeWorldViewMatrix[2].xyz);
     vec3 tangentVector  = normalize(inverseTransposeWorldViewMatrix * a_tangent);
     vec3 normalVector = inverseTransposeWorldViewMatrix * a_normal;
     vec3 binormalVector = inverseTransposeWorldViewMatrix * a_binormal;

+ 4 - 2
gameplay/res/shaders/solid.fsh

@@ -1,6 +1,8 @@
-precision mediump float;
+#ifdef OPENGL_ES
+precision highp float;
+#endif
 
-// Diffuse color
+// Uniforms
 uniform vec4 u_diffuseColor;        // Diffuse color
 
 void main()

+ 1 - 1
gameplay/res/shaders/solid.vsh

@@ -1,4 +1,4 @@
-// Uniform
+// Uniforms
 uniform mat4 u_worldViewProjectionMatrix;        // Matrix to transform a position to clip space.
 
 // Inputs

+ 2 - 0
gameplay/res/shaders/textured.fsh

@@ -1,4 +1,6 @@
+#ifdef OPENGL_ES
 precision highp float;
+#endif
 
 // Uniforms
 uniform sampler2D u_diffuseTexture;     // Diffuse texture

+ 2 - 1
gameplay/src/AnimationClip.cpp

@@ -12,7 +12,8 @@ namespace gameplay
 {
 
 AnimationClip::AnimationClip(const char* id, Animation* animation, unsigned long startTime, unsigned long endTime)
-    : _id(id), _animation(animation), _startTime(startTime), _endTime(endTime), _elapsedTime(0), _runningTime(0), _channelCount(animation->_channels.size()), _repeatCount(1.0f), _speed(1.0f), _isPlaying(false), _beginListeners(NULL), _endListeners(NULL)
+    : _id(id), _animation(animation), _startTime(startTime), _endTime(endTime), _elapsedTime(0), _runningTime(0), 
+       _channelCount(animation->_channels.size()), _repeatCount(1.0f), _speed(1.0f), _isPlaying(false), _beginListeners(NULL), _endListeners(NULL)
 {
     assert(0 <= startTime && startTime <= animation->_duration && 0 <= endTime && endTime <= animation->_duration);
 

+ 0 - 1
gameplay/src/AnimationController.cpp

@@ -57,7 +57,6 @@ Animation* AnimationController::createAnimation(const char* id, AnimationTarget*
 
 Animation* AnimationController::createAnimationFromTo(const char* id, AnimationTarget* target, int propertyId, float* from, float* to, Curve::InterpolationType type, unsigned long duration)
 {
-    const unsigned int keyCount = 2;
     const unsigned int propertyComponentCount = target->getAnimationPropertyComponentCount(propertyId);
     float* keyValues = new float[2 * propertyComponentCount];
 

+ 144 - 10
gameplay/src/AudioBuffer.cpp

@@ -31,7 +31,7 @@ AudioBuffer* AudioBuffer::create(const char* path)
     assert(path);
 
     // Search the cache for a stream from this file.
-    unsigned int bufferCount = __buffers.size();
+    unsigned int bufferCount = (unsigned int)__buffers.size();
     AudioBuffer* buffer = NULL;
     for (unsigned int i = 0; i < bufferCount; i++)
     {
@@ -44,7 +44,6 @@ AudioBuffer* AudioBuffer::create(const char* path)
     }
 
     ALuint alBuffer;
-    ALboolean loop = AL_TRUE;
     ALCenum al_error;
 
     // Load audio data into a buffer.
@@ -56,18 +55,47 @@ AudioBuffer* AudioBuffer::create(const char* path)
         alDeleteBuffers(1, &alBuffer);
         return NULL;
     }
-
-    std::string fullPath = FileSystem::getResourcePath();
-    fullPath += "/";
-    fullPath += path;
     
     // Load sound file.
-    alBuffer = alutCreateBufferFromFile(fullPath.c_str());
-    if (alBuffer == AL_NONE)
+    FILE* file = FileSystem::openFile(path, "rb");
+    if (!file)
     {
-        LOG_ERROR_VARG("AudioBuffer error (%d) loading file: %s", fullPath.c_str());
-        return NULL;
+        LOG_ERROR_VARG("Invalid audio buffer file: %s", path);
+        goto cleanup;
+    }
+    
+    // Read the file header
+    char header[12];
+    if (fread(header, 1, 12, file) != 12)
+    {
+        LOG_ERROR_VARG("Invalid audio buffer file: %s", path);
+        goto cleanup;
+    }
+    
+    // Check the file format
+    if (memcmp(header, "RIFF", 4) == 0)
+    {
+        if (!AudioBuffer::loadWav(file, alBuffer))
+        {
+            LOG_ERROR_VARG("Invalid wave file: %s", path);
+            goto cleanup;
+        }
+    }
+    else if(memcmp(header, "OGG", 3) == 0)
+    {
+        if (!AudioBuffer::loadOgg(file, alBuffer))
+        {
+            LOG_ERROR_VARG("Invalid ogg file: %s", path);
+            goto cleanup;
+        }
+    }
+    else
+    {
+        LOG_ERROR_VARG("Unsupported audio file: %s", path);
     }
+    
+    
+    fclose(file);
 
     buffer = new AudioBuffer(path, alBuffer);
 
@@ -75,6 +103,112 @@ AudioBuffer* AudioBuffer::create(const char* path)
     __buffers.push_back(buffer);
 
     return buffer;
+    
+cleanup:
+    
+    if (file)
+        fclose(file);
+    if (alBuffer)
+        alDeleteBuffers(1, &alBuffer);
+    return NULL;
+}
+    
+    
+bool AudioBuffer::loadWav(FILE* file, ALuint buffer)
+{
+    unsigned char stream[12];
+    
+    // Verify the wave fmt magic value meaning format.
+    if (fread(stream, 1, 8, file) != 8 || memcmp(stream, "fmt ", 4) != 0 )
+        return false;
+    
+    // Check for a valid pcm format.
+    if(fread(stream, 1, 2, file) != 2 || stream[1] != 0 || stream[0] != 1)
+    {
+        LOG_ERROR("Unsupported audio file, not PCM format.");
+        return false;
+    }
+    
+    // Get the channel count (16-bit little-endian)
+    int channels;
+    if (fread(stream, 1, 2, file) != 2)
+        return false;
+    channels  = stream[1]<<8;
+    channels |= stream[0];
+    
+    // Get the sample frequency (32-bit little-endian) 
+    ALuint frequency;
+    if (fread(stream, 1, 4, file) != 4)
+        return false;
+    frequency  = stream[3]<<24;
+    frequency |= stream[2]<<16;
+    frequency |= stream[1]<<8;
+    frequency |= stream[0];
+    
+    // The next 6 bytes hold the block size and bytes-per-second. 
+    // We don't need that info, so just read and ignore it. 
+    // We could use this later if we need to know the duration.
+    if (fread(stream, 1, 6, file) != 6)
+        return false;
+    
+    // Get the bit depth (16-bit little-endian)
+    int bits;
+    if (fread(stream, 1, 2, file) != 2)
+        return false;
+    bits  = stream[1]<<8;
+    bits |= stream[0];
+    
+    
+    // Now convert the given channel count and bit depth into an OpenAL format. 
+    ALuint format = 0;
+    if(bits == 8)
+    {
+        if(channels == 1)
+            format = AL_FORMAT_MONO8;
+        else if(channels == 2)
+            format = AL_FORMAT_STEREO8;
+    }
+    else if(bits == 16)
+    {
+        if(channels == 1)
+            format = AL_FORMAT_MONO16;
+        else if(channels == 2)
+            format = AL_FORMAT_STEREO16;
+    }
+    else
+    {
+        LOG_ERROR_VARG("Incompatible format: (%d, %d)", channels, bits);
+        return false;
+    }
+    
+    // Read the data chunk, which will hold the decoded sample data 
+    if (fread(stream, 1, 4, file) != 4 || memcmp(stream, "data", 4) != 0)
+    {
+        LOG_ERROR("WAV file has no data.");
+        return false;
+    }
+    
+    // Read how much data is remaining and buffer it up.
+    unsigned int dataSize;
+    fread(&dataSize, sizeof(int), 1, file);
+    unsigned char* data = new unsigned char[dataSize];
+    if (fread(data, sizeof(unsigned char), dataSize, file) != dataSize)
+    {
+        LOG_ERROR("WAV file missing data.");
+        SAFE_DELETE_ARRAY(data);
+        return false;
+    }
+    alBufferData(buffer, format, data, dataSize, frequency);
+    SAFE_DELETE_ARRAY(data);
+    return true;
+}
+    
+// TODO:
+bool AudioBuffer::loadOgg(FILE* file, ALuint buffer)
+{
+    LOG_ERROR("Ogg Vorbis not supported yet");
+    
+    return false;
 }
 
 }

+ 4 - 0
gameplay/src/AudioBuffer.h

@@ -41,6 +41,10 @@ private:
      * @return The buffer from a file.
      */
     static AudioBuffer* create(const char* path);
+    
+    static bool loadWav(FILE* file, ALuint buffer);
+    
+    static bool loadOgg(FILE* file, ALuint buffer);
 
     std::string _filePath;
     ALuint _alBuffer;

+ 34 - 8
gameplay/src/AudioController.cpp

@@ -3,17 +3,19 @@
  */
 
 #include "Base.h"
+#include "AudioController.h"
 #include "AudioListener.h"
 #include "AudioBuffer.h"
 #include "AudioSource.h"
-#include "AudioController.h"
+
 
 namespace gameplay
 {
 
 std::list<AudioSource*> AudioController::_playingSources;
 
-AudioController::AudioController()
+AudioController::AudioController() 
+    : _alcDevice(NULL), _alcContext(NULL)
 {
 }
 
@@ -23,19 +25,43 @@ AudioController::~AudioController()
 
 void AudioController::initialize()
 {    
-	alutInit(0, 0);
-
-	ALenum errorID = alutGetError();
-    if ( errorID != ALUT_ERROR_NO_ERROR)
+    _alcDevice = alcOpenDevice (NULL);
+    if (!_alcDevice)
     {
-        LOG_ERROR_VARG("AudioController::initialize() error. Unable to initialize alut: %s\n", alutGetErrorString(errorID));
+        LOG_ERROR("AudioController::initialize() error. Unable to open OpenAL device.\n");
         return;  
     }
+        
+	_alcContext = alcCreateContext(_alcDevice, NULL);
+    ALCenum alcErr = alcGetError(_alcDevice);
+	if (!_alcContext || alcErr != ALC_NO_ERROR)
+    {
+        alcCloseDevice (_alcDevice);
+        LOG_ERROR_VARG("AudioController::initialize() error. Unable to create OpenAL context. Error: %d\n", alcErr);
+        return;
+    }
+    
+    alcMakeContextCurrent(_alcContext);
+    alcErr = alcGetError(_alcDevice);
+    if (alcErr != ALC_NO_ERROR)
+    {
+        LOG_ERROR_VARG("AudioController::initialize() error. Unable to make OpenAL context current. Error: %d\n", alcErr);
+    }
 }
 
 void AudioController::finalize()
 {
-	alutExit();
+    alcMakeContextCurrent(NULL);
+    if (_alcContext)
+    {
+        alcDestroyContext(_alcContext);
+        _alcContext = NULL;
+    }
+    if (_alcDevice)
+    {
+        alcCloseDevice(_alcDevice);
+        _alcDevice = NULL;
+    }
 }
 
 void AudioController::pause()

+ 2 - 1
gameplay/src/AudioController.h

@@ -58,7 +58,8 @@ private:
      */
     void update(long elapsedTime);
 
-
+    ALCdevice* _alcDevice;
+    ALCcontext* _alcContext;
     static std::list<AudioSource*> _playingSources;     // List of currently running sources.
 };
 

+ 22 - 11
gameplay/src/Base.h

@@ -19,11 +19,11 @@
 #include <list>
 #include <stack>
 #include <map>
-#include <hash_map>
 #include <algorithm>
 #include <ctime>
 #include <limits>
 #include <functional>
+#include <assert.h>
 #include <string.h>
 #include <ctype.h>
 #include <stdint.h>
@@ -111,23 +111,28 @@ extern void printError(const char* format, ...);
 #define M_1_PI                      0.31830988618379067154
 #endif
 
-// Audio (OpenAL/alut)
+// Audio (OpenAL)
 #ifdef __QNX__
 #include <AL/al.h>
 #include <AL/alc.h>
-#include <AL/alut.h>
 #elif WIN32
 #include <al.h>
 #include <alc.h>
-#include <alut.h>
+#elif __APPLE__
+#include <OpenAL/al.h>
+#include <OpenAL/alc.h>
 #endif
 
-// Graphics (OpenGLES/OpenGL/png)
-#define WINDOW_VSYNC        1
-#define WINDOW_FULLSCREEN   0
+// Screen/Window
 #define WINDOW_WIDTH        1024
 #define WINDOW_HEIGHT       600
+#define WINDOW_VSYNC        1
+#define WINDOW_FULLSCREEN   0
 
+// Image
+#include <png.h>
+
+// Graphics (OpenGL)
 #ifdef __QNX__
     #include <EGL/egl.h>
     #include <GLES2/gl2.h>
@@ -137,14 +142,21 @@ extern void printError(const char* format, ...);
     extern PFNGLGENVERTEXARRAYSOESPROC glGenVertexArrays;
     extern PFNGLISVERTEXARRAYOESPROC glIsVertexArray;
     #define glClearDepth glClearDepthf
+   #define GL_ES
 #elif WIN32
     #define WIN32_LEAN_AND_MEAN
     #include <GL/glew.h>
     #include <GL/wglew.h>
+#elif __APPLE__
+#include <OpenGL/gl.h>
+#include <OpenGL/glext.h>
+#define glBindVertexArray glBindVertexArrayAPPLE
+#define glDeleteVertexArrays glDeleteVertexArraysAPPLE
+#define glGenVertexArrays glGenVertexArraysAPPLE
+#define glIsVertexArray glIsVertexArrayAPPLE
 #endif
-#include <png.h>
 
-// Attributes
+// Graphics (GLSL)
 #define VERTEX_ATTRIBUTE_POSITION_NAME              "a_position"
 #define VERTEX_ATTRIBUTE_NORMAL_NAME                "a_normal"
 #define VERTEX_ATTRIBUTE_COLOR_NAME                 "a_color"
@@ -217,8 +229,7 @@ extern GLenum __gl_error_code;
 #define GL_LAST_ERROR() __gl_error_code
 
 
-// Missing platform functionality and warnings.
-#ifdef WIN32
+#if defined(WIN32) || defined(__APPLE__)
 
     inline float fminf(float a, float b)
     {

+ 1 - 1
gameplay/src/Curve.cpp

@@ -234,7 +234,7 @@ void Curve::interpolateBezier(float s, Point* from, Point* to, float* dst) const
                 i++;
             }
             // Handle quaternion component.
-            float interpTime = from->time * eq1 + from->outValue[i] * eq2 + to->inValue[i] * eq3 + to->time * eq4;
+            //float interpTime = from->time * eq1 + from->outValue[i] * eq2 + to->inValue[i] * eq3 + to->time * eq4;
             interpolateQuaternion(s, (from->value + i), (to->value + i), (dst + i));
             i += 4;
             quaternionOffsetIndex++;

+ 17 - 3
gameplay/src/Effect.cpp

@@ -6,6 +6,8 @@
 #include "Effect.h"
 #include "FileSystem.h"
 
+#define GL_ES_DEFINE  "#define OPENGL_ES"
+
 namespace gameplay
 {
 
@@ -109,8 +111,15 @@ Effect* Effect::createFromSource(const char* vshPath, const char* vshSource, con
     GLint length;
     GLint success;
 
+    std::string definesStr = (defines == NULL) ? "" : defines;
+
     // Compile vertex shader.
-    shaderSource[0] = defines == NULL ? "" : defines;
+#ifdef GL_ES
+    if (defines)
+        definesStr += "\n";
+    definesStr+= GL_ES_DEFINE;
+#endif
+    shaderSource[0] = definesStr.c_str();
     shaderSource[1] = "\n";
     shaderSource[2] = vshSource;
     GL_ASSERT( vertexShader = glCreateShader(GL_VERTEX_SHADER) );
@@ -135,8 +144,13 @@ Effect* Effect::createFromSource(const char* vshPath, const char* vshSource, con
         return NULL;
     }
 
-    // Compile fragment shader.
-    shaderSource[0] = defines == NULL ? "" : defines;
+    // Compile the fragment shader.
+#ifdef GL_ES
+    if (defines)
+        definesStr += "\n";
+    definesStr+= GL_ES_DEFINE;
+#endif
+    shaderSource[0] = definesStr.c_str();
     shaderSource[1] = "\n";
     shaderSource[2] = fshSource;
     GL_ASSERT( fragmentShader = glCreateShader(GL_FRAGMENT_SHADER) );

+ 3 - 2
gameplay/src/FileSystem.cpp

@@ -34,14 +34,15 @@ FILE* FileSystem::openFile(const char* path, const char* mode)
     fullPath += path;
 
     FILE* fp = fopen(fullPath.c_str(), mode);
-
+    
+// Win32 doesnt support a asset or bundle definitions.
 #ifdef WIN32
-    // HACK: For testing purposes, search the gameplay-resources folder as well.
     if (fp == NULL)
     {
         fullPath = __resourcePath;
         fullPath += "../../gameplay/";
         fullPath += path;
+        
         fp = fopen(fullPath.c_str(), mode);
     }
 #endif

+ 0 - 1
gameplay/src/Font.cpp

@@ -25,7 +25,6 @@
 
 // Default font fragment shader
 #define FONT_FSH \
-    "precision mediump float;" \
     "varying vec2 vtexcoord;" \
     "varying vec4 vcolor;" \
     "uniform sampler2D texture;" \

+ 2 - 2
gameplay/src/Joint.cpp

@@ -31,13 +31,13 @@ void Joint::transformChanged()
 {
     Node::transformChanged();
 
-    const char* id = _id.c_str();
+    //const char* id = _id.c_str();
     _jointMatrixDirty = true;
 }
 
 void Joint::updateJointMatrix(const Matrix& bindShape, Vector4* matrixPalette)
 {
-    const char* id = _id.c_str();
+    //const char* id = _id.c_str();
 
     if (_jointMatrixDirty)
     {

+ 335 - 0
gameplay/src/PlatformMacOSX.mm

@@ -0,0 +1,335 @@
+/*
+ * PlatformMacOSX.cpp
+ */
+
+#ifdef __APPLE__
+
+#include "Base.h"
+#include "Platform.h"
+#include "FileSystem.h"
+#include "Game.h"
+#include "Input.h"
+
+#import <Cocoa/Cocoa.h>
+#import <QuartzCore/CVDisplayLink.h>
+#import <OpenGL/OpenGL.h>
+#import <mach/mach_time.h>
+
+using namespace std;
+using namespace gameplay;
+
+
+static const float ACCELEROMETER_X_FACTOR = 90.0f / WINDOW_WIDTH;
+static const float ACCELEROMETER_Y_FACTOR = 90.0f / WINDOW_HEIGHT;
+
+static long __timeStart;
+static long __timeAbsolute;
+static bool __vsync = WINDOW_VSYNC;
+static float __pitch;
+static float __roll;
+static int __lx, __ly;
+static bool __hasMouse = false;
+static bool __leftMouseDown = false;
+static bool __rightMouseDown = false;
+static bool __shiftDown = false;
+
+long getMachTimeInMilliseconds()
+{
+    static const int64_t kOneMillion = 1000 * 1000;
+    static mach_timebase_info_data_t s_timebase_info;
+    
+    if (s_timebase_info.denom == 0) 
+        (void) mach_timebase_info(&s_timebase_info);
+    
+    // mach_absolute_time() returns billionth of seconds, so divide by one million to get milliseconds
+    return (long)((mach_absolute_time() * s_timebase_info.numer) / (kOneMillion * s_timebase_info.denom));
+}
+
+@class View;
+
+@interface View : NSOpenGLView <NSWindowDelegate> 
+{
+    CVDisplayLinkRef displayLink;
+    
+    Game* _game;
+}
+@end
+
+
+@implementation View
+
+
+-(void)windowWillClose:(NSNotification*)note 
+{
+    _game->exit();
+    [[NSApplication sharedApplication] terminate:self];
+}
+
+- (CVReturn) getFrameForTime:(const CVTimeStamp*)outputTime
+{
+    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+    
+    [self performSelectorOnMainThread:@selector(update) withObject:nil waitUntilDone:NO];
+    
+    [pool release];
+    return kCVReturnSuccess;
+}
+
+
+-(void) update
+{
+    [[self openGLContext] makeCurrentContext];
+    CGLLockContext((CGLContextObj)[[self openGLContext] CGLContextObj]);
+    _game->frame();
+    CGLFlushDrawable((CGLContextObj)[[self openGLContext] CGLContextObj]);
+    CGLUnlockContext((CGLContextObj)[[self openGLContext] CGLContextObj]);  
+}
+
+static CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime, 
+                                      CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext)
+{
+    CVReturn result = [(View*)displayLinkContext getFrameForTime:outputTime];
+    return result;
+}
+
+- (id) initWithFrame: (NSRect) frame
+{    
+    _game = Game::getInstance();
+    __timeStart = getMachTimeInMilliseconds();
+    NSOpenGLPixelFormatAttribute attrs[] = 
+    {
+        NSOpenGLPFAAccelerated,
+        NSOpenGLPFADoubleBuffer,
+        NSOpenGLPFAColorSize, 32,
+        NSOpenGLPFADepthSize, 24,
+        NSOpenGLPFAAlphaSize, 8,
+        NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersionLegacy,
+        0
+    };
+    
+    NSOpenGLPixelFormat* pf = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
+    if (!pf)
+        NSLog(@"OpenGL pixel format not supported.");
+    
+    self = [super initWithFrame:frame pixelFormat:[pf autorelease]];  
+    
+    return self;
+}
+
+- (void) prepareOpenGL
+{
+    [super prepareOpenGL];
+    
+    NSString* bundlePath = [[NSBundle mainBundle] bundlePath];
+    NSString* path = [bundlePath stringByAppendingString:@"/Contents/Resources/"];
+    FileSystem::setResourcePath([path cStringUsingEncoding:NSASCIIStringEncoding]);
+    _game->run(WINDOW_WIDTH, WINDOW_HEIGHT);
+    
+    [[self window] setLevel: NSFloatingWindowLevel];
+    [[self window] makeKeyAndOrderFront: self];
+    [[self window] setTitle: [NSString stringWithUTF8String: ""]];
+    
+    // Make all the OpenGL calls to setup rendering and build the necessary rendering objects
+    [[self openGLContext] makeCurrentContext];
+    // Synchronize buffer swaps with vertical refresh rate
+    GLint swapInt = __vsync ? 1 : 0;
+    [[self openGLContext] setValues:&swapInt forParameter:NSOpenGLCPSwapInterval];
+    
+    // Create a display link capable of being used with all active displays
+    CVDisplayLinkCreateWithActiveCGDisplays(&displayLink);
+    
+    // Set the renderer output callback function
+    CVDisplayLinkSetOutputCallback(displayLink, &MyDisplayLinkCallback, self);
+    
+    CGLContextObj cglContext = (CGLContextObj)[[self openGLContext] CGLContextObj];
+    CGLPixelFormatObj cglPixelFormat = (CGLPixelFormatObj)[[self pixelFormat] CGLPixelFormatObj];
+    CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext(displayLink, cglContext, cglPixelFormat);
+    
+    // Activate the display link
+    CVDisplayLinkStart(displayLink);
+}
+
+- (void) dealloc
+{       
+    _game->exit();
+    
+    // Release the display link
+    CVDisplayLinkRelease(displayLink);
+    
+    [super dealloc];
+}
+
+- (void) mouseDown: (NSEvent*) theEvent
+{
+    NSPoint point = [theEvent locationInWindow];
+    _game->touch(point.x, WINDOW_HEIGHT - point.y, Input::TOUCHEVENT_PRESS);
+    __leftMouseDown = true;
+}
+
+- (void) mouseUp: (NSEvent*) theEvent
+{
+    NSPoint point = [theEvent locationInWindow];
+    __leftMouseDown = false;
+    _game->touch(point.x, WINDOW_HEIGHT - point.y, Input::TOUCHEVENT_RELEASE);
+}
+
+- (void) mouseDragged: (NSEvent*) theEvent
+{
+    NSPoint point = [theEvent locationInWindow];
+    if (__leftMouseDown)
+    {
+        gameplay::Game::getInstance()->touch(point.x, WINDOW_HEIGHT - point.y, gameplay::Input::TOUCHEVENT_MOVE);
+    }
+}
+
+- (void) rightMouseDown: (NSEvent*) theEvent
+{
+    __rightMouseDown = true;
+     NSPoint point = [theEvent locationInWindow];
+    __lx = point.x;
+    __ly = WINDOW_HEIGHT - point.y;
+}
+
+- (void) rightMouseUp: (NSEvent*) theEvent
+{
+   __rightMouseDown = false;
+}
+
+- (void) rightMouseDragged: (NSEvent*) theEvent
+{
+    NSPoint point = [theEvent locationInWindow];
+    if (__rightMouseDown)
+    {
+        // Update the pitch and roll by adding the scaled deltas.
+        __roll += -(float)(point.x - __lx) * ACCELEROMETER_X_FACTOR;
+        __pitch -= (float)(point.y - (WINDOW_HEIGHT - __ly)) * ACCELEROMETER_Y_FACTOR;
+    
+        // Clamp the values to the valid range.
+        __roll = fmaxf(fminf(__roll, 90.0), -90.0);
+        __pitch = fmaxf(fminf(__pitch, 90.0), -90.0);
+    
+        // Update the last X/Y values.
+        __lx = point.x;
+        __ly = (WINDOW_HEIGHT - point.y);
+    }
+}
+
+- (void) mouseEntered:(NSEvent *)theEvent
+{
+    __hasMouse = true;
+}
+
+- (void) mouseExited:(NSEvent *)theEvent
+{
+    __leftMouseDown = false;
+    __rightMouseDown = false;
+    __hasMouse = false;
+}
+
+@end
+
+
+namespace gameplay
+{
+
+extern void printError(const char* format, ...)
+{
+    va_list argptr;
+    va_start(argptr, format);
+    vfprintf(stderr, format, argptr);
+    fprintf(stderr, "\n");
+    va_end(argptr);
+}
+    
+    
+Platform::Platform(Game* game)
+: _game(game)
+{
+}
+
+Platform::Platform(const Platform& copy)
+{
+    // hidden
+}
+
+Platform::~Platform()
+{
+}
+
+Platform* Platform::create(Game* game)
+{
+    Platform* platform = new Platform(game);
+    
+    return platform;
+}
+
+int Platform::enterMessagePump()
+{
+    NSAutoreleasePool *pool = [NSAutoreleasePool new];
+    NSApplication* NSApp = [NSApplication sharedApplication];
+    NSRect screenBounds = [[NSScreen mainScreen] frame];
+    NSRect viewBounds = NSMakeRect(0, 0, 1024, 600);
+    
+    View* view = [[View alloc] initWithFrame:viewBounds];
+    
+    NSRect centered = NSMakeRect(NSMidX(screenBounds) - NSMidX(viewBounds),
+                                 NSMidY(screenBounds) - NSMidY(viewBounds),
+                                 viewBounds.size.width, 
+                                 viewBounds.size.height);
+    
+    NSWindow *window = [[NSWindow alloc]
+                        initWithContentRect:centered
+                        styleMask:NSTitledWindowMask | NSClosableWindowMask
+                        backing:NSBackingStoreBuffered
+                        defer:NO];
+    
+    [window setContentView:view];
+    [window setDelegate:view];
+    [view release];
+    
+    [NSApp run];
+    
+    [pool release];
+    return EXIT_SUCCESS;
+}
+    
+long Platform::getAbsoluteTime()
+{
+    __timeAbsolute = getMachTimeInMilliseconds();
+    return __timeAbsolute;
+}
+
+void Platform::setAbsoluteTime(long time)
+{
+    __timeAbsolute = time;
+}
+
+bool Platform::isVsync()
+{
+    return __vsync;
+}
+
+void Platform::setVsync(bool enable)
+{
+    __vsync = enable;
+}
+
+int Platform::getOrientationAngle()
+{
+    return 0;
+}
+
+bool Platform::isAccelerometerSupported()
+{
+    return true;
+}
+
+void Platform::getAccelerometerPitchAndRoll(float* pitch, float* roll)
+{
+    *pitch = __pitch;
+    *roll = __roll;
+}
+    
+}
+
+#endif

+ 2 - 3
gameplay/src/Properties.cpp

@@ -2,10 +2,9 @@
  * Properties.cpp
  */
 
+#include "Base.h"
 #include "Properties.h"
 #include "FileSystem.h"
-#include <xtree>
-#include <sstream>
 
 namespace gameplay
 {
@@ -363,7 +362,7 @@ Properties::Type Properties::getType(const char* name) const
 
     // Parse the value to determine the format
     unsigned int commaCount = 0;
-    unsigned int length = strlen(value);
+    //unsigned int length = strlen(value);
     char* valuePtr = const_cast<char*>(value);
     while (valuePtr = strchr(valuePtr, ','))
     {

+ 1 - 1
gameplay/src/RenderState.cpp

@@ -408,7 +408,7 @@ RenderState::Blend parseBlend(const char* value)
 {
     // Conver the string to uppercase for comparison
     std::string upper(value);
-    std::transform(upper.begin(), upper.end(), upper.begin(), std::toupper);
+    transform(upper.begin(), upper.end(), upper.begin(), toupper);
     if (upper == "ZERO")
         return RenderState::BLEND_ZERO;
     if (upper == "ONE")

+ 0 - 1
gameplay/src/SpriteBatch.cpp

@@ -34,7 +34,6 @@
 
 // Default sprite fragment shader
 #define SPRITE_FSH \
-    "precision mediump float;" \
     "varying vec2 vtexcoord;" \
     "varying vec4 vcolor;" \
     "uniform sampler2D texture;" \

+ 0 - 2
gameplay/src/Texture.h

@@ -27,8 +27,6 @@ public:
         ALPHA = GL_ALPHA,
         RGB888 = GL_RGB,
         RGBA8888 = GL_RGBA,
-        LUMINANCE = GL_LUMINANCE,
-        LUMINANCE_ALPHA = GL_LUMINANCE_ALPHA,
         DEPTH = GL_DEPTH_COMPONENT
     };
 

+ 24 - 0
gameplay/src/gameplay-main-macosx.mm

@@ -0,0 +1,24 @@
+#ifndef GAMEPLAYMAINMACOSX_H_
+#define GAMEPLAYMAINMACOSX_H_
+
+#ifdef __APPLE__
+
+#include "gameplay.h"
+using namespace gameplay;
+
+
+/**
+ * Main entry point.
+ */
+int main(int argc, char** argv)
+{
+    Game* game = Game::getInstance();
+    assert(game != NULL);
+    Platform* platform = Platform::create(game);
+    return platform->enterMessagePump();
+}
+
+
+#endif
+
+#endif

+ 3 - 4
gameplay/src/gameplay-main-qnx.h → gameplay/src/gameplay-main-qnx.cpp

@@ -1,11 +1,11 @@
-#ifndef GAMEPLAYMAINQNX__H
-#define GAMEPLAYMAINQNX__H
+#ifndef GAMEPLAYMAINQNX_H_
+#define GAMEPLAYMAINQNX_H_
 
 #ifdef __QNX__
 
 #include "gameplay.h"
-using namespace gameplay;
 
+using namespace gameplay;
 
 /**
  * Main entry point.
@@ -20,7 +20,6 @@ int main(int argc, char** argv)
     return result;
 }
 
-
 #endif
 
 #endif

+ 1 - 1
gameplay/src/gameplay-main-win32.h → gameplay/src/gameplay-main-win32.cpp

@@ -1,5 +1,5 @@
 #ifndef GAMEPLAYMAINWIN32_H_
-#define GAMEPLAYMAINMWIN32_H_
+#define GAMEPLAYMAINWIN32_H_
 
 #ifdef WIN32
 

+ 0 - 10
gameplay/src/gameplay-main.h

@@ -1,10 +0,0 @@
-#ifndef GAMEPLAYMAIN__H
-#define GAMEPLAYMAIN__H
-
-#ifdef __QNX__
-#include "gameplay-main-qnx.h"
-#elif WIN32
-#include "gameplay-main-win32.h"
-#endif
-
-#endif