From 2b2c645e35ff93e1fb27a9517ced9b6c895996b8 Mon Sep 17 00:00:00 2001 From: Reuben Chao Date: Fri, 20 Feb 2015 17:20:13 +0800 Subject: [PATCH] fix compile error --- .../proj_mac.xcodeproj/project.pbxproj | 649 +++++++++--------- .../UserInterfaceState.xcuserstate | Bin 75378 -> 92143 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 10 +- external/kazmath/vec2.h | 5 - sample/sample_ocean/OceanDelegate.cpp | 49 +- tiny3d_main/TinyCamera.cpp | 105 +-- tiny3d_main/TinyCamera.h | 33 +- tiny3d_main/TinyGPUProgram.h | 3 +- tiny3d_main/TinyImage.cpp | 5 +- tiny3d_main/TinyMaterial.cpp | 5 +- tiny3d_main/TinyMovableObject.h | 3 +- tiny3d_main/TinyMovableObjectFactory.cpp | 2 +- tiny3d_main/TinyNode.h | 69 +- tiny3d_main/TinyPlatform.h | 3 +- tiny3d_main/TinyRenderOperation.cpp | 3 + tiny3d_main/TinyRenderOperation.h | 7 +- tiny3d_main/TinyRenderSystem.cpp | 10 +- tiny3d_main/TinyRenderSystem.h | 5 +- tiny3d_main/TinyRenderTarget.h | 3 +- tiny3d_main/TinyRoot.cpp | 7 +- tiny3d_main/TinyRoot.h | 1 + tiny3d_main/TinySceneManager.cpp | 20 +- tiny3d_main/TinySceneManager.h | 7 +- tiny3d_main/TinySceneNode.cpp | 11 + tiny3d_main/TinySceneNode.h | 9 +- tiny3d_main/TinySubEntity.cpp | 2 +- tiny3d_main/TinySubEntity.h | 2 +- tiny3d_main/TinyVertexIndexData.h | 1 + tiny3d_main/TinyViewPort.h | 3 +- 29 files changed, 542 insertions(+), 490 deletions(-) diff --git a/build/proj_mac/proj_mac.xcodeproj/project.pbxproj b/build/proj_mac/proj_mac.xcodeproj/project.pbxproj index 82c8a84..a1403ac 100644 --- a/build/proj_mac/proj_mac.xcodeproj/project.pbxproj +++ b/build/proj_mac/proj_mac.xcodeproj/project.pbxproj @@ -7,133 +7,100 @@ objects = { /* Begin PBXBuildFile section */ - 1B0760C51A7F66E4007103F3 /* aabb.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760AB1A7F66E4007103F3 /* aabb.c */; }; - 1B0760C61A7F66E4007103F3 /* mat4stack.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760AE1A7F66E4007103F3 /* mat4stack.c */; }; - 1B0760C71A7F66E4007103F3 /* matrix.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760B01A7F66E4007103F3 /* matrix.c */; }; - 1B0760C81A7F66E4007103F3 /* mat3.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760B31A7F66E4007103F3 /* mat3.c */; }; - 1B0760C91A7F66E4007103F3 /* mat4.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760B51A7F66E4007103F3 /* mat4.c */; }; - 1B0760CA1A7F66E4007103F3 /* plane.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760B71A7F66E4007103F3 /* plane.c */; }; - 1B0760CB1A7F66E4007103F3 /* quaternion.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760B91A7F66E4007103F3 /* quaternion.c */; }; - 1B0760CC1A7F66E4007103F3 /* ray2.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760BB1A7F66E4007103F3 /* ray2.c */; }; - 1B0760CD1A7F66E4007103F3 /* utility.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760BD1A7F66E4007103F3 /* utility.c */; }; - 1B0760CE1A7F66E4007103F3 /* vec2.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760BF1A7F66E4007103F3 /* vec2.c */; }; - 1B0760CF1A7F66E4007103F3 /* vec3.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760C11A7F66E4007103F3 /* vec3.c */; }; - 1B0760D01A7F66E4007103F3 /* vec4.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760C31A7F66E4007103F3 /* vec4.c */; }; - 1B4BB8571A81C3C300E97FB4 /* TinyCamera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB8561A81C3C300E97FB4 /* TinyCamera.cpp */; }; - 1B4BB87E1A81C52500E97FB4 /* TinyDelegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB85A1A81C52500E97FB4 /* TinyDelegate.cpp */; }; - 1B4BB87F1A81C52500E97FB4 /* TinyGPUProgram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB85E1A81C52500E97FB4 /* TinyGPUProgram.cpp */; }; - 1B4BB8801A81C52500E97FB4 /* TinyGPUProgramManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB8601A81C52500E97FB4 /* TinyGPUProgramManager.cpp */; }; - 1B4BB8811A81C52500E97FB4 /* TinyInputManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB8621A81C52500E97FB4 /* TinyInputManager.cpp */; }; - 1B4BB8821A81C52500E97FB4 /* TinyLight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB8641A81C52500E97FB4 /* TinyLight.cpp */; }; - 1B4BB8831A81C52500E97FB4 /* TinyMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB8661A81C52500E97FB4 /* TinyMath.cpp */; }; - 1B4BB8841A81C52500E97FB4 /* TinyMovableObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB86A1A81C52500E97FB4 /* TinyMovableObject.cpp */; }; - 1B4BB8851A81C52500E97FB4 /* TinyObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB86C1A81C52500E97FB4 /* TinyObject.cpp */; }; - 1B4BB8861A81C52500E97FB4 /* TinyResourceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB8711A81C52500E97FB4 /* TinyResourceManager.cpp */; }; - 1B4BB8871A81C52500E97FB4 /* TinyRoot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB8731A81C52500E97FB4 /* TinyRoot.cpp */; }; - 1B4BB8881A81C52500E97FB4 /* TinyTextureManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB8791A81C52500E97FB4 /* TinyTextureManager.cpp */; }; - 1B4BB8891A81C52500E97FB4 /* TinyViewPort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B4BB87B1A81C52500E97FB4 /* TinyViewPort.cpp */; }; - 1B4F26111A7FEAD200DABC42 /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1B4F26091A7FEAD200DABC42 /* AppDelegate.mm */; }; 1B4F26121A7FEAD200DABC42 /* Contents.json in Resources */ = {isa = PBXBuildFile; fileRef = 1B4F260A1A7FEAD200DABC42 /* Contents.json */; }; 1B4F26131A7FEAD200DABC42 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1B4F260B1A7FEAD200DABC42 /* Info.plist */; }; - 1B4F26141A7FEAD200DABC42 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B4F260C1A7FEAD200DABC42 /* main.m */; }; 1B4F26151A7FEAD200DABC42 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1B4F260D1A7FEAD200DABC42 /* MainMenu.xib */; }; - 1B4F26161A7FEAD200DABC42 /* OpenGLView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1B4F260F1A7FEAD200DABC42 /* OpenGLView.mm */; }; - 1B8F75C71A876409000D25F8 /* TinyNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B8F75C51A876409000D25F8 /* TinyNode.cpp */; }; - 1B8F75CA1A89100F000D25F8 /* TinySubEntity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B8F75C81A89100F000D25F8 /* TinySubEntity.cpp */; }; - 1B8F75CD1A89103A000D25F8 /* TinySubMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B8F75CB1A89103A000D25F8 /* TinySubMesh.cpp */; }; - 1B9FE3741A96518700496A2A /* OceanDelegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE3731A96518700496A2A /* OceanDelegate.cpp */; }; - 1BA22F0F1A82154A0060733E /* TinyInputObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F0D1A82154A0060733E /* TinyInputObject.cpp */; }; - 1BA22F121A8215E50060733E /* TinyMouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F101A8215E50060733E /* TinyMouse.cpp */; }; - 1BA22F151A8216180060733E /* TinyKeyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F131A8216180060733E /* TinyKeyboard.cpp */; }; - 1BA22F171A8216900060733E /* TinyEntity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F161A8216900060733E /* TinyEntity.cpp */; }; - 1BA22F1A1A8217540060733E /* TinyMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F181A8217540060733E /* TinyMaterial.cpp */; }; - 1BA22F1C1A8217760060733E /* TinyMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F1B1A8217760060733E /* TinyMesh.cpp */; }; - 1BA22F1E1A82179C0060733E /* TinyRenderable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F1D1A82179C0060733E /* TinyRenderable.cpp */; }; - 1BA22F201A8217B70060733E /* TinyRenderQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F1F1A8217B70060733E /* TinyRenderQueue.cpp */; }; - 1BA22F221A8217D10060733E /* TinyRenderTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F211A8217D10060733E /* TinyRenderTarget.cpp */; }; - 1BA22F251A8217EA0060733E /* TinyRenderWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F231A8217EA0060733E /* TinyRenderWindow.cpp */; }; - 1BA22F281A8218040060733E /* TinyRenderTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F261A8218040060733E /* TinyRenderTexture.cpp */; }; - 1BA22F2A1A8218210060733E /* TinySceneManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F291A8218210060733E /* TinySceneManager.cpp */; }; - 1BA22F2C1A8218350060733E /* TinySceneNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F2B1A8218350060733E /* TinySceneNode.cpp */; }; - 1BA22F2E1A8218490060733E /* TinySchedulerManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F2D1A8218490060733E /* TinySchedulerManager.cpp */; }; - 1BA22F301A82185D0060733E /* TinyTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F2F1A82185D0060733E /* TinyTexture.cpp */; }; - 1BA22F3C1A82685B0060733E /* TinyRenderSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA22F3A1A82685B0060733E /* TinyRenderSystem.cpp */; }; - 1BA6453F1A8DD9090094A70D /* TinyRenderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BA6453D1A8DD9090094A70D /* TinyRenderOperation.cpp */; }; - 1BC0D6C01A8DED4400FC82E7 /* TinyVertexIndexData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BC0D6BE1A8DED4400FC82E7 /* TinyVertexIndexData.cpp */; }; - 1BC0D6C31A8DF07500FC82E7 /* TinyMeshManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BC0D6C11A8DF07500FC82E7 /* TinyMeshManager.cpp */; }; - 1BC0D6C61A8DF09D00FC82E7 /* TinyMaterialManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BC0D6C41A8DF09D00FC82E7 /* TinyMaterialManager.cpp */; }; - 1BC0D6CF1A958ECB00FC82E7 /* TinyResourceManager_mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1BC0D6CE1A958ECB00FC82E7 /* TinyResourceManager_mac.mm */; }; - 1BC0D6D21A95C80200FC82E7 /* TinyImage_mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1BC0D6D01A95C80200FC82E7 /* TinyImage_mac.mm */; }; - 1BC0D6D71A95CD1500FC82E7 /* TinyImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BC0D6D51A95CD1500FC82E7 /* TinyImage.cpp */; }; - 1BC0D6D91A96139F00FC82E7 /* TinyPlatform_mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1BC0D6D81A96139F00FC82E7 /* TinyPlatform_mac.mm */; }; - 1BC0D6DC1A961A1B00FC82E7 /* TinyMacRenderWindow.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1BC0D6DA1A961A1B00FC82E7 /* TinyMacRenderWindow.mm */; }; - 1BC845231A8C9CC200E57381 /* TinyMovableObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BC845211A8C9CC200E57381 /* TinyMovableObjectFactory.cpp */; }; - 1BC845261A8C9D4700E57381 /* TinyEntityFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BC845241A8C9D4700E57381 /* TinyEntityFactory.cpp */; }; - 1BC845291A8C9D8100E57381 /* TinyHardwareBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1BC845271A8C9D8100E57381 /* TinyHardwareBuffer.cpp */; }; + 1B9FE3F21A965B7A00496A2A /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1B4F26091A7FEAD200DABC42 /* AppDelegate.mm */; }; + 1B9FE3F31A965B7A00496A2A /* OpenGLView.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1B4F260F1A7FEAD200DABC42 /* OpenGLView.mm */; }; + 1B9FE3F41A965B7A00496A2A /* TinyResourceManager_mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1BC0D6CE1A958ECB00FC82E7 /* TinyResourceManager_mac.mm */; }; + 1B9FE3F51A965B7A00496A2A /* TinyImage_mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1BC0D6D01A95C80200FC82E7 /* TinyImage_mac.mm */; }; + 1B9FE3F61A965B7A00496A2A /* TinyPlatform_mac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1BC0D6D81A96139F00FC82E7 /* TinyPlatform_mac.mm */; }; + 1B9FE3F71A965B7A00496A2A /* TinyMacRenderWindow.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1BC0D6DA1A961A1B00FC82E7 /* TinyMacRenderWindow.mm */; }; + 1B9FE4201A965B8A00496A2A /* aabb.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760AB1A7F66E4007103F3 /* aabb.c */; }; + 1B9FE4211A965B8A00496A2A /* mat4stack.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760AE1A7F66E4007103F3 /* mat4stack.c */; }; + 1B9FE4221A965B8A00496A2A /* matrix.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760B01A7F66E4007103F3 /* matrix.c */; }; + 1B9FE4231A965B8A00496A2A /* mat3.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760B31A7F66E4007103F3 /* mat3.c */; }; + 1B9FE4241A965B8A00496A2A /* mat4.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760B51A7F66E4007103F3 /* mat4.c */; }; + 1B9FE4251A965B8A00496A2A /* plane.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760B71A7F66E4007103F3 /* plane.c */; }; + 1B9FE4261A965B8A00496A2A /* quaternion.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760B91A7F66E4007103F3 /* quaternion.c */; }; + 1B9FE4271A965B8A00496A2A /* ray2.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760BB1A7F66E4007103F3 /* ray2.c */; }; + 1B9FE4281A965B8A00496A2A /* utility.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760BD1A7F66E4007103F3 /* utility.c */; }; + 1B9FE4291A965B8A00496A2A /* vec2.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760BF1A7F66E4007103F3 /* vec2.c */; }; + 1B9FE42A1A965B8A00496A2A /* vec3.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760C11A7F66E4007103F3 /* vec3.c */; }; + 1B9FE42B1A965B8A00496A2A /* vec4.c in Sources */ = {isa = PBXBuildFile; fileRef = 1B0760C31A7F66E4007103F3 /* vec4.c */; }; + 1B9FE42C1A965B8A00496A2A /* OceanDelegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE3731A96518700496A2A /* OceanDelegate.cpp */; }; + 1B9FE42D1A965B9900496A2A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 1B4F260C1A7FEAD200DABC42 /* main.m */; }; + 1B9FE42F1A965BD700496A2A /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B9FE42E1A965BD700496A2A /* OpenGL.framework */; }; + 1B9FE4311A965BDC00496A2A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B9FE4301A965BDC00496A2A /* Cocoa.framework */; }; + 1B9FE4871A965D4700496A2A /* TinyCamera.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4321A965D4700496A2A /* TinyCamera.cpp */; }; + 1B9FE4881A965D4700496A2A /* TinyDelegate.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4351A965D4700496A2A /* TinyDelegate.cpp */; }; + 1B9FE4891A965D4700496A2A /* TinyEntity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4371A965D4700496A2A /* TinyEntity.cpp */; }; + 1B9FE48A1A965D4700496A2A /* TinyEntityFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4391A965D4700496A2A /* TinyEntityFactory.cpp */; }; + 1B9FE48B1A965D4700496A2A /* TinyGPUProgram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE43B1A965D4700496A2A /* TinyGPUProgram.cpp */; }; + 1B9FE48C1A965D4700496A2A /* TinyGPUProgramManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE43D1A965D4700496A2A /* TinyGPUProgramManager.cpp */; }; + 1B9FE48D1A965D4700496A2A /* TinyHardwareBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE43F1A965D4700496A2A /* TinyHardwareBuffer.cpp */; }; + 1B9FE48E1A965D4700496A2A /* TinyImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4411A965D4700496A2A /* TinyImage.cpp */; }; + 1B9FE48F1A965D4700496A2A /* TinyInputManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4431A965D4700496A2A /* TinyInputManager.cpp */; }; + 1B9FE4901A965D4700496A2A /* TinyInputObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4451A965D4700496A2A /* TinyInputObject.cpp */; }; + 1B9FE4911A965D4700496A2A /* TinyKeyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4481A965D4700496A2A /* TinyKeyboard.cpp */; }; + 1B9FE4921A965D4700496A2A /* TinyLight.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE44A1A965D4700496A2A /* TinyLight.cpp */; }; + 1B9FE4931A965D4700496A2A /* TinyMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE44C1A965D4700496A2A /* TinyMaterial.cpp */; }; + 1B9FE4941A965D4700496A2A /* TinyMaterialManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE44E1A965D4700496A2A /* TinyMaterialManager.cpp */; }; + 1B9FE4951A965D4700496A2A /* TinyMath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4501A965D4700496A2A /* TinyMath.cpp */; }; + 1B9FE4961A965D4700496A2A /* TinyMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4531A965D4700496A2A /* TinyMesh.cpp */; }; + 1B9FE4971A965D4700496A2A /* TinyMeshManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4551A965D4700496A2A /* TinyMeshManager.cpp */; }; + 1B9FE4981A965D4700496A2A /* TinyMouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4571A965D4700496A2A /* TinyMouse.cpp */; }; + 1B9FE4991A965D4700496A2A /* TinyMovableObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4591A965D4700496A2A /* TinyMovableObject.cpp */; }; + 1B9FE49A1A965D4700496A2A /* TinyMovableObjectFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE45B1A965D4700496A2A /* TinyMovableObjectFactory.cpp */; }; + 1B9FE49B1A965D4700496A2A /* TinyNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE45D1A965D4700496A2A /* TinyNode.cpp */; }; + 1B9FE49C1A965D4700496A2A /* TinyObject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE45F1A965D4700496A2A /* TinyObject.cpp */; }; + 1B9FE49D1A965D4700496A2A /* TinyRenderable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4621A965D4700496A2A /* TinyRenderable.cpp */; }; + 1B9FE49E1A965D4700496A2A /* TinyRenderOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4641A965D4700496A2A /* TinyRenderOperation.cpp */; }; + 1B9FE49F1A965D4700496A2A /* TinyRenderQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4661A965D4700496A2A /* TinyRenderQueue.cpp */; }; + 1B9FE4A01A965D4700496A2A /* TinyRenderSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4681A965D4700496A2A /* TinyRenderSystem.cpp */; }; + 1B9FE4A11A965D4700496A2A /* TinyRenderTarget.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE46A1A965D4700496A2A /* TinyRenderTarget.cpp */; }; + 1B9FE4A21A965D4700496A2A /* TinyRenderTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE46C1A965D4700496A2A /* TinyRenderTexture.cpp */; }; + 1B9FE4A31A965D4700496A2A /* TinyRenderWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE46E1A965D4700496A2A /* TinyRenderWindow.cpp */; }; + 1B9FE4A41A965D4700496A2A /* TinyResourceManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4701A965D4700496A2A /* TinyResourceManager.cpp */; }; + 1B9FE4A51A965D4700496A2A /* TinyRoot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4721A965D4700496A2A /* TinyRoot.cpp */; }; + 1B9FE4A61A965D4700496A2A /* TinySceneManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4741A965D4700496A2A /* TinySceneManager.cpp */; }; + 1B9FE4A71A965D4700496A2A /* TinySceneNode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4761A965D4700496A2A /* TinySceneNode.cpp */; }; + 1B9FE4A81A965D4700496A2A /* TinySchedulerManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4781A965D4700496A2A /* TinySchedulerManager.cpp */; }; + 1B9FE4A91A965D4700496A2A /* TinySubEntity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE47B1A965D4700496A2A /* TinySubEntity.cpp */; }; + 1B9FE4AA1A965D4700496A2A /* TinySubMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE47D1A965D4700496A2A /* TinySubMesh.cpp */; }; + 1B9FE4AB1A965D4700496A2A /* TinyTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE47F1A965D4700496A2A /* TinyTexture.cpp */; }; + 1B9FE4AC1A965D4700496A2A /* TinyTextureManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4811A965D4700496A2A /* TinyTextureManager.cpp */; }; + 1B9FE4AD1A965D4700496A2A /* TinyVertexIndexData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4831A965D4700496A2A /* TinyVertexIndexData.cpp */; }; + 1B9FE4AE1A965D4700496A2A /* TinyViewPort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B9FE4851A965D4700496A2A /* TinyViewPort.cpp */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 1B0760701A7F2626007103F3 /* proj_mac.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = proj_mac.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 1B0760AB1A7F66E4007103F3 /* aabb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = aabb.c; path = ../../external/kazmath/aabb.c; sourceTree = ""; }; - 1B0760AC1A7F66E4007103F3 /* aabb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aabb.h; path = ../../external/kazmath/aabb.h; sourceTree = ""; }; + 1B0760AB1A7F66E4007103F3 /* aabb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = aabb.c; sourceTree = ""; }; + 1B0760AC1A7F66E4007103F3 /* aabb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aabb.h; sourceTree = ""; }; 1B0760AE1A7F66E4007103F3 /* mat4stack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mat4stack.c; sourceTree = ""; }; 1B0760AF1A7F66E4007103F3 /* mat4stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mat4stack.h; sourceTree = ""; }; 1B0760B01A7F66E4007103F3 /* matrix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = matrix.c; sourceTree = ""; }; 1B0760B11A7F66E4007103F3 /* matrix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = matrix.h; sourceTree = ""; }; - 1B0760B21A7F66E4007103F3 /* kazmath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = kazmath.h; path = ../../external/kazmath/kazmath.h; sourceTree = ""; }; - 1B0760B31A7F66E4007103F3 /* mat3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mat3.c; path = ../../external/kazmath/mat3.c; sourceTree = ""; }; - 1B0760B41A7F66E4007103F3 /* mat3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mat3.h; path = ../../external/kazmath/mat3.h; sourceTree = ""; }; - 1B0760B51A7F66E4007103F3 /* mat4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mat4.c; path = ../../external/kazmath/mat4.c; sourceTree = ""; }; - 1B0760B61A7F66E4007103F3 /* mat4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mat4.h; path = ../../external/kazmath/mat4.h; sourceTree = ""; }; - 1B0760B71A7F66E4007103F3 /* plane.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = plane.c; path = ../../external/kazmath/plane.c; sourceTree = ""; }; - 1B0760B81A7F66E4007103F3 /* plane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = plane.h; path = ../../external/kazmath/plane.h; sourceTree = ""; }; - 1B0760B91A7F66E4007103F3 /* quaternion.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = quaternion.c; path = ../../external/kazmath/quaternion.c; sourceTree = ""; }; - 1B0760BA1A7F66E4007103F3 /* quaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = quaternion.h; path = ../../external/kazmath/quaternion.h; sourceTree = ""; }; - 1B0760BB1A7F66E4007103F3 /* ray2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ray2.c; path = ../../external/kazmath/ray2.c; sourceTree = ""; }; - 1B0760BC1A7F66E4007103F3 /* ray2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ray2.h; path = ../../external/kazmath/ray2.h; sourceTree = ""; }; - 1B0760BD1A7F66E4007103F3 /* utility.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = utility.c; path = ../../external/kazmath/utility.c; sourceTree = ""; }; - 1B0760BE1A7F66E4007103F3 /* utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = utility.h; path = ../../external/kazmath/utility.h; sourceTree = ""; }; - 1B0760BF1A7F66E4007103F3 /* vec2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vec2.c; path = ../../external/kazmath/vec2.c; sourceTree = ""; }; - 1B0760C01A7F66E4007103F3 /* vec2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vec2.h; path = ../../external/kazmath/vec2.h; sourceTree = ""; }; - 1B0760C11A7F66E4007103F3 /* vec3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vec3.c; path = ../../external/kazmath/vec3.c; sourceTree = ""; }; - 1B0760C21A7F66E4007103F3 /* vec3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vec3.h; path = ../../external/kazmath/vec3.h; sourceTree = ""; }; - 1B0760C31A7F66E4007103F3 /* vec4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = vec4.c; path = ../../external/kazmath/vec4.c; sourceTree = ""; }; - 1B0760C41A7F66E4007103F3 /* vec4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vec4.h; path = ../../external/kazmath/vec4.h; sourceTree = ""; }; - 1B4BB8561A81C3C300E97FB4 /* TinyCamera.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyCamera.cpp; path = ../../tiny3d_main/TinyCamera.cpp; sourceTree = ""; }; - 1B4BB8591A81C52500E97FB4 /* TinyCamera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyCamera.h; path = ../../tiny3d_main/TinyCamera.h; sourceTree = ""; }; - 1B4BB85A1A81C52500E97FB4 /* TinyDelegate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyDelegate.cpp; path = ../../tiny3d_main/TinyDelegate.cpp; sourceTree = ""; }; - 1B4BB85B1A81C52500E97FB4 /* TinyDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyDelegate.h; path = ../../tiny3d_main/TinyDelegate.h; sourceTree = ""; }; - 1B4BB85C1A81C52500E97FB4 /* TinyEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyEntity.h; path = ../../tiny3d_main/TinyEntity.h; sourceTree = ""; }; - 1B4BB85E1A81C52500E97FB4 /* TinyGPUProgram.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyGPUProgram.cpp; path = ../../tiny3d_main/TinyGPUProgram.cpp; sourceTree = ""; }; - 1B4BB85F1A81C52500E97FB4 /* TinyGPUProgram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyGPUProgram.h; path = ../../tiny3d_main/TinyGPUProgram.h; sourceTree = ""; }; - 1B4BB8601A81C52500E97FB4 /* TinyGPUProgramManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyGPUProgramManager.cpp; path = ../../tiny3d_main/TinyGPUProgramManager.cpp; sourceTree = ""; }; - 1B4BB8611A81C52500E97FB4 /* TinyGPUProgramManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyGPUProgramManager.h; path = ../../tiny3d_main/TinyGPUProgramManager.h; sourceTree = ""; }; - 1B4BB8621A81C52500E97FB4 /* TinyInputManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyInputManager.cpp; path = ../../tiny3d_main/TinyInputManager.cpp; sourceTree = ""; }; - 1B4BB8631A81C52500E97FB4 /* TinyInputManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyInputManager.h; path = ../../tiny3d_main/TinyInputManager.h; sourceTree = ""; }; - 1B4BB8641A81C52500E97FB4 /* TinyLight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyLight.cpp; path = ../../tiny3d_main/TinyLight.cpp; sourceTree = ""; }; - 1B4BB8651A81C52500E97FB4 /* TinyLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyLight.h; path = ../../tiny3d_main/TinyLight.h; sourceTree = ""; }; - 1B4BB8661A81C52500E97FB4 /* TinyMath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyMath.cpp; path = ../../tiny3d_main/TinyMath.cpp; sourceTree = ""; }; - 1B4BB8671A81C52500E97FB4 /* TinyMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyMath.h; path = ../../tiny3d_main/TinyMath.h; sourceTree = ""; }; - 1B4BB8691A81C52500E97FB4 /* TinyMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyMesh.h; path = ../../tiny3d_main/TinyMesh.h; sourceTree = ""; }; - 1B4BB86A1A81C52500E97FB4 /* TinyMovableObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyMovableObject.cpp; path = ../../tiny3d_main/TinyMovableObject.cpp; sourceTree = ""; }; - 1B4BB86B1A81C52500E97FB4 /* TinyMovableObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyMovableObject.h; path = ../../tiny3d_main/TinyMovableObject.h; sourceTree = ""; }; - 1B4BB86C1A81C52500E97FB4 /* TinyObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyObject.cpp; path = ../../tiny3d_main/TinyObject.cpp; sourceTree = ""; }; - 1B4BB86D1A81C52500E97FB4 /* TinyObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyObject.h; path = ../../tiny3d_main/TinyObject.h; sourceTree = ""; }; - 1B4BB86E1A81C52500E97FB4 /* TinyRenderable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyRenderable.h; path = ../../tiny3d_main/TinyRenderable.h; sourceTree = ""; }; - 1B4BB86F1A81C52500E97FB4 /* TinyRenderQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyRenderQueue.h; path = ../../tiny3d_main/TinyRenderQueue.h; sourceTree = ""; }; - 1B4BB8701A81C52500E97FB4 /* TinyRenderTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyRenderTarget.h; path = ../../tiny3d_main/TinyRenderTarget.h; sourceTree = ""; }; - 1B4BB8711A81C52500E97FB4 /* TinyResourceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyResourceManager.cpp; path = ../../tiny3d_main/TinyResourceManager.cpp; sourceTree = ""; }; - 1B4BB8721A81C52500E97FB4 /* TinyResourceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyResourceManager.h; path = ../../tiny3d_main/TinyResourceManager.h; sourceTree = ""; }; - 1B4BB8731A81C52500E97FB4 /* TinyRoot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyRoot.cpp; path = ../../tiny3d_main/TinyRoot.cpp; sourceTree = ""; }; - 1B4BB8741A81C52500E97FB4 /* TinyRoot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyRoot.h; path = ../../tiny3d_main/TinyRoot.h; sourceTree = ""; }; - 1B4BB8751A81C52500E97FB4 /* TinySceneManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinySceneManager.h; path = ../../tiny3d_main/TinySceneManager.h; sourceTree = ""; }; - 1B4BB8761A81C52500E97FB4 /* TinySceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinySceneNode.h; path = ../../tiny3d_main/TinySceneNode.h; sourceTree = ""; }; - 1B4BB8771A81C52500E97FB4 /* TinySchedulerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinySchedulerManager.h; path = ../../tiny3d_main/TinySchedulerManager.h; sourceTree = ""; }; - 1B4BB8781A81C52500E97FB4 /* TinyTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyTexture.h; path = ../../tiny3d_main/TinyTexture.h; sourceTree = ""; }; - 1B4BB8791A81C52500E97FB4 /* TinyTextureManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyTextureManager.cpp; path = ../../tiny3d_main/TinyTextureManager.cpp; sourceTree = ""; }; - 1B4BB87A1A81C52500E97FB4 /* TinyTextureManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyTextureManager.h; path = ../../tiny3d_main/TinyTextureManager.h; sourceTree = ""; }; - 1B4BB87B1A81C52500E97FB4 /* TinyViewPort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyViewPort.cpp; path = ../../tiny3d_main/TinyViewPort.cpp; sourceTree = ""; }; - 1B4BB87C1A81C52500E97FB4 /* TinyViewPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyViewPort.h; path = ../../tiny3d_main/TinyViewPort.h; sourceTree = ""; }; + 1B0760B21A7F66E4007103F3 /* kazmath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kazmath.h; sourceTree = ""; }; + 1B0760B31A7F66E4007103F3 /* mat3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mat3.c; sourceTree = ""; }; + 1B0760B41A7F66E4007103F3 /* mat3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mat3.h; sourceTree = ""; }; + 1B0760B51A7F66E4007103F3 /* mat4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mat4.c; sourceTree = ""; }; + 1B0760B61A7F66E4007103F3 /* mat4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mat4.h; sourceTree = ""; }; + 1B0760B71A7F66E4007103F3 /* plane.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = plane.c; sourceTree = ""; }; + 1B0760B81A7F66E4007103F3 /* plane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = plane.h; sourceTree = ""; }; + 1B0760B91A7F66E4007103F3 /* quaternion.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = quaternion.c; sourceTree = ""; }; + 1B0760BA1A7F66E4007103F3 /* quaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quaternion.h; sourceTree = ""; }; + 1B0760BB1A7F66E4007103F3 /* ray2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ray2.c; sourceTree = ""; }; + 1B0760BC1A7F66E4007103F3 /* ray2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ray2.h; sourceTree = ""; }; + 1B0760BD1A7F66E4007103F3 /* utility.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utility.c; sourceTree = ""; }; + 1B0760BE1A7F66E4007103F3 /* utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utility.h; sourceTree = ""; }; + 1B0760BF1A7F66E4007103F3 /* vec2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vec2.c; sourceTree = ""; }; + 1B0760C01A7F66E4007103F3 /* vec2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vec2.h; sourceTree = ""; }; + 1B0760C11A7F66E4007103F3 /* vec3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vec3.c; sourceTree = ""; }; + 1B0760C21A7F66E4007103F3 /* vec3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vec3.h; sourceTree = ""; }; + 1B0760C31A7F66E4007103F3 /* vec4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vec4.c; sourceTree = ""; }; + 1B0760C41A7F66E4007103F3 /* vec4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vec4.h; sourceTree = ""; }; 1B4F26081A7FEAD200DABC42 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; 1B4F26091A7FEAD200DABC42 /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AppDelegate.mm; sourceTree = SOURCE_ROOT; }; 1B4F260A1A7FEAD200DABC42 /* Contents.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Contents.json; sourceTree = SOURCE_ROOT; }; @@ -142,64 +109,99 @@ 1B4F260D1A7FEAD200DABC42 /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = SOURCE_ROOT; }; 1B4F260E1A7FEAD200DABC42 /* OpenGLView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenGLView.h; sourceTree = SOURCE_ROOT; }; 1B4F260F1A7FEAD200DABC42 /* OpenGLView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = OpenGLView.mm; sourceTree = SOURCE_ROOT; }; - 1B8F75C51A876409000D25F8 /* TinyNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyNode.cpp; path = ../../tiny3d_main/TinyNode.cpp; sourceTree = ""; }; - 1B8F75C61A876409000D25F8 /* TinyNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyNode.h; path = ../../tiny3d_main/TinyNode.h; sourceTree = ""; }; - 1B8F75C81A89100F000D25F8 /* TinySubEntity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinySubEntity.cpp; path = ../../tiny3d_main/TinySubEntity.cpp; sourceTree = ""; }; - 1B8F75C91A89100F000D25F8 /* TinySubEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinySubEntity.h; path = ../../tiny3d_main/TinySubEntity.h; sourceTree = ""; }; - 1B8F75CB1A89103A000D25F8 /* TinySubMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinySubMesh.cpp; path = ../../tiny3d_main/TinySubMesh.cpp; sourceTree = ""; }; - 1B8F75CC1A89103A000D25F8 /* TinySubMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinySubMesh.h; path = ../../tiny3d_main/TinySubMesh.h; sourceTree = ""; }; - 1B9FE3731A96518700496A2A /* OceanDelegate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OceanDelegate.cpp; path = ../../sample/sample_ocean/OceanDelegate.cpp; sourceTree = ""; }; - 1BA22F0D1A82154A0060733E /* TinyInputObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyInputObject.cpp; path = ../../tiny3d_main/TinyInputObject.cpp; sourceTree = ""; }; - 1BA22F0E1A82154A0060733E /* TinyInputObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyInputObject.h; path = ../../tiny3d_main/TinyInputObject.h; sourceTree = ""; }; - 1BA22F101A8215E50060733E /* TinyMouse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyMouse.cpp; path = ../../tiny3d_main/TinyMouse.cpp; sourceTree = ""; }; - 1BA22F111A8215E50060733E /* TinyMouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyMouse.h; path = ../../tiny3d_main/TinyMouse.h; sourceTree = ""; }; - 1BA22F131A8216180060733E /* TinyKeyboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyKeyboard.cpp; path = ../../tiny3d_main/TinyKeyboard.cpp; sourceTree = ""; }; - 1BA22F141A8216180060733E /* TinyKeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyKeyboard.h; path = ../../tiny3d_main/TinyKeyboard.h; sourceTree = ""; }; - 1BA22F161A8216900060733E /* TinyEntity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyEntity.cpp; path = ../../tiny3d_main/TinyEntity.cpp; sourceTree = ""; }; - 1BA22F181A8217540060733E /* TinyMaterial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyMaterial.cpp; path = ../../tiny3d_main/TinyMaterial.cpp; sourceTree = ""; }; - 1BA22F191A8217540060733E /* TinyMaterial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyMaterial.h; path = ../../tiny3d_main/TinyMaterial.h; sourceTree = ""; }; - 1BA22F1B1A8217760060733E /* TinyMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyMesh.cpp; path = ../../tiny3d_main/TinyMesh.cpp; sourceTree = ""; }; - 1BA22F1D1A82179C0060733E /* TinyRenderable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyRenderable.cpp; path = ../../tiny3d_main/TinyRenderable.cpp; sourceTree = ""; }; - 1BA22F1F1A8217B70060733E /* TinyRenderQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyRenderQueue.cpp; path = ../../tiny3d_main/TinyRenderQueue.cpp; sourceTree = ""; }; - 1BA22F211A8217D10060733E /* TinyRenderTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyRenderTarget.cpp; path = ../../tiny3d_main/TinyRenderTarget.cpp; sourceTree = ""; }; - 1BA22F231A8217EA0060733E /* TinyRenderWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyRenderWindow.cpp; path = ../../tiny3d_main/TinyRenderWindow.cpp; sourceTree = ""; }; - 1BA22F241A8217EA0060733E /* TinyRenderWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyRenderWindow.h; path = ../../tiny3d_main/TinyRenderWindow.h; sourceTree = ""; }; - 1BA22F261A8218040060733E /* TinyRenderTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyRenderTexture.cpp; path = ../../tiny3d_main/TinyRenderTexture.cpp; sourceTree = ""; }; - 1BA22F271A8218040060733E /* TinyRenderTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyRenderTexture.h; path = ../../tiny3d_main/TinyRenderTexture.h; sourceTree = ""; }; - 1BA22F291A8218210060733E /* TinySceneManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinySceneManager.cpp; path = ../../tiny3d_main/TinySceneManager.cpp; sourceTree = ""; }; - 1BA22F2B1A8218350060733E /* TinySceneNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinySceneNode.cpp; path = ../../tiny3d_main/TinySceneNode.cpp; sourceTree = ""; }; - 1BA22F2D1A8218490060733E /* TinySchedulerManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinySchedulerManager.cpp; path = ../../tiny3d_main/TinySchedulerManager.cpp; sourceTree = ""; }; - 1BA22F2F1A82185D0060733E /* TinyTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyTexture.cpp; path = ../../tiny3d_main/TinyTexture.cpp; sourceTree = ""; }; - 1BA22F3A1A82685B0060733E /* TinyRenderSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyRenderSystem.cpp; path = ../../tiny3d_main/TinyRenderSystem.cpp; sourceTree = ""; }; - 1BA22F3B1A82685B0060733E /* TinyRenderSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyRenderSystem.h; path = ../../tiny3d_main/TinyRenderSystem.h; sourceTree = ""; }; - 1BA6453D1A8DD9090094A70D /* TinyRenderOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyRenderOperation.cpp; path = ../../tiny3d_main/TinyRenderOperation.cpp; sourceTree = ""; }; - 1BA6453E1A8DD9090094A70D /* TinyRenderOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyRenderOperation.h; path = ../../tiny3d_main/TinyRenderOperation.h; sourceTree = ""; }; - 1BC0D6BD1A8DED4400FC82E7 /* TinyCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyCommon.h; path = ../../tiny3d_main/TinyCommon.h; sourceTree = ""; }; - 1BC0D6BE1A8DED4400FC82E7 /* TinyVertexIndexData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyVertexIndexData.cpp; path = ../../tiny3d_main/TinyVertexIndexData.cpp; sourceTree = ""; }; - 1BC0D6BF1A8DED4400FC82E7 /* TinyVertexIndexData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyVertexIndexData.h; path = ../../tiny3d_main/TinyVertexIndexData.h; sourceTree = ""; }; - 1BC0D6C11A8DF07500FC82E7 /* TinyMeshManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyMeshManager.cpp; path = ../../tiny3d_main/TinyMeshManager.cpp; sourceTree = ""; }; - 1BC0D6C21A8DF07500FC82E7 /* TinyMeshManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyMeshManager.h; path = ../../tiny3d_main/TinyMeshManager.h; sourceTree = ""; }; - 1BC0D6C41A8DF09D00FC82E7 /* TinyMaterialManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyMaterialManager.cpp; path = ../../tiny3d_main/TinyMaterialManager.cpp; sourceTree = ""; }; - 1BC0D6C51A8DF09D00FC82E7 /* TinyMaterialManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyMaterialManager.h; path = ../../tiny3d_main/TinyMaterialManager.h; sourceTree = ""; }; + 1B9FE3731A96518700496A2A /* OceanDelegate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OceanDelegate.cpp; sourceTree = ""; }; + 1B9FE42E1A965BD700496A2A /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; + 1B9FE4301A965BDC00496A2A /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 1B9FE4321A965D4700496A2A /* TinyCamera.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyCamera.cpp; sourceTree = ""; }; + 1B9FE4331A965D4700496A2A /* TinyCamera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyCamera.h; sourceTree = ""; }; + 1B9FE4341A965D4700496A2A /* TinyCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyCommon.h; sourceTree = ""; }; + 1B9FE4351A965D4700496A2A /* TinyDelegate.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyDelegate.cpp; sourceTree = ""; }; + 1B9FE4361A965D4700496A2A /* TinyDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyDelegate.h; sourceTree = ""; }; + 1B9FE4371A965D4700496A2A /* TinyEntity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyEntity.cpp; sourceTree = ""; }; + 1B9FE4381A965D4700496A2A /* TinyEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyEntity.h; sourceTree = ""; }; + 1B9FE4391A965D4700496A2A /* TinyEntityFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyEntityFactory.cpp; sourceTree = ""; }; + 1B9FE43A1A965D4700496A2A /* TinyEntityFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyEntityFactory.h; sourceTree = ""; }; + 1B9FE43B1A965D4700496A2A /* TinyGPUProgram.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyGPUProgram.cpp; sourceTree = ""; }; + 1B9FE43C1A965D4700496A2A /* TinyGPUProgram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyGPUProgram.h; sourceTree = ""; }; + 1B9FE43D1A965D4700496A2A /* TinyGPUProgramManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyGPUProgramManager.cpp; sourceTree = ""; }; + 1B9FE43E1A965D4700496A2A /* TinyGPUProgramManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyGPUProgramManager.h; sourceTree = ""; }; + 1B9FE43F1A965D4700496A2A /* TinyHardwareBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyHardwareBuffer.cpp; sourceTree = ""; }; + 1B9FE4401A965D4700496A2A /* TinyHardwareBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyHardwareBuffer.h; sourceTree = ""; }; + 1B9FE4411A965D4700496A2A /* TinyImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyImage.cpp; sourceTree = ""; }; + 1B9FE4421A965D4700496A2A /* TinyImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyImage.h; sourceTree = ""; }; + 1B9FE4431A965D4700496A2A /* TinyInputManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyInputManager.cpp; sourceTree = ""; }; + 1B9FE4441A965D4700496A2A /* TinyInputManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyInputManager.h; sourceTree = ""; }; + 1B9FE4451A965D4700496A2A /* TinyInputObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyInputObject.cpp; sourceTree = ""; }; + 1B9FE4461A965D4700496A2A /* TinyInputObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyInputObject.h; sourceTree = ""; }; + 1B9FE4471A965D4700496A2A /* TinyIteratorWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyIteratorWrapper.h; sourceTree = ""; }; + 1B9FE4481A965D4700496A2A /* TinyKeyboard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyKeyboard.cpp; sourceTree = ""; }; + 1B9FE4491A965D4700496A2A /* TinyKeyboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyKeyboard.h; sourceTree = ""; }; + 1B9FE44A1A965D4700496A2A /* TinyLight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyLight.cpp; sourceTree = ""; }; + 1B9FE44B1A965D4700496A2A /* TinyLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyLight.h; sourceTree = ""; }; + 1B9FE44C1A965D4700496A2A /* TinyMaterial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyMaterial.cpp; sourceTree = ""; }; + 1B9FE44D1A965D4700496A2A /* TinyMaterial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyMaterial.h; sourceTree = ""; }; + 1B9FE44E1A965D4700496A2A /* TinyMaterialManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyMaterialManager.cpp; sourceTree = ""; }; + 1B9FE44F1A965D4700496A2A /* TinyMaterialManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyMaterialManager.h; sourceTree = ""; }; + 1B9FE4501A965D4700496A2A /* TinyMath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyMath.cpp; sourceTree = ""; }; + 1B9FE4511A965D4700496A2A /* TinyMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyMath.h; sourceTree = ""; }; + 1B9FE4521A965D4700496A2A /* TinyMemoryAlloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyMemoryAlloc.h; sourceTree = ""; }; + 1B9FE4531A965D4700496A2A /* TinyMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyMesh.cpp; sourceTree = ""; }; + 1B9FE4541A965D4700496A2A /* TinyMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyMesh.h; sourceTree = ""; }; + 1B9FE4551A965D4700496A2A /* TinyMeshManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyMeshManager.cpp; sourceTree = ""; }; + 1B9FE4561A965D4700496A2A /* TinyMeshManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyMeshManager.h; sourceTree = ""; }; + 1B9FE4571A965D4700496A2A /* TinyMouse.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyMouse.cpp; sourceTree = ""; }; + 1B9FE4581A965D4700496A2A /* TinyMouse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyMouse.h; sourceTree = ""; }; + 1B9FE4591A965D4700496A2A /* TinyMovableObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyMovableObject.cpp; sourceTree = ""; }; + 1B9FE45A1A965D4700496A2A /* TinyMovableObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyMovableObject.h; sourceTree = ""; }; + 1B9FE45B1A965D4700496A2A /* TinyMovableObjectFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyMovableObjectFactory.cpp; sourceTree = ""; }; + 1B9FE45C1A965D4700496A2A /* TinyMovableObjectFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyMovableObjectFactory.h; sourceTree = ""; }; + 1B9FE45D1A965D4700496A2A /* TinyNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyNode.cpp; sourceTree = ""; }; + 1B9FE45E1A965D4700496A2A /* TinyNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyNode.h; sourceTree = ""; }; + 1B9FE45F1A965D4700496A2A /* TinyObject.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyObject.cpp; sourceTree = ""; }; + 1B9FE4601A965D4700496A2A /* TinyObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyObject.h; sourceTree = ""; }; + 1B9FE4611A965D4700496A2A /* TinyPlatform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyPlatform.h; sourceTree = ""; }; + 1B9FE4621A965D4700496A2A /* TinyRenderable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyRenderable.cpp; sourceTree = ""; }; + 1B9FE4631A965D4700496A2A /* TinyRenderable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyRenderable.h; sourceTree = ""; }; + 1B9FE4641A965D4700496A2A /* TinyRenderOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyRenderOperation.cpp; sourceTree = ""; }; + 1B9FE4651A965D4700496A2A /* TinyRenderOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyRenderOperation.h; sourceTree = ""; }; + 1B9FE4661A965D4700496A2A /* TinyRenderQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyRenderQueue.cpp; sourceTree = ""; }; + 1B9FE4671A965D4700496A2A /* TinyRenderQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyRenderQueue.h; sourceTree = ""; }; + 1B9FE4681A965D4700496A2A /* TinyRenderSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyRenderSystem.cpp; sourceTree = ""; }; + 1B9FE4691A965D4700496A2A /* TinyRenderSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyRenderSystem.h; sourceTree = ""; }; + 1B9FE46A1A965D4700496A2A /* TinyRenderTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyRenderTarget.cpp; sourceTree = ""; }; + 1B9FE46B1A965D4700496A2A /* TinyRenderTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyRenderTarget.h; sourceTree = ""; }; + 1B9FE46C1A965D4700496A2A /* TinyRenderTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyRenderTexture.cpp; sourceTree = ""; }; + 1B9FE46D1A965D4700496A2A /* TinyRenderTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyRenderTexture.h; sourceTree = ""; }; + 1B9FE46E1A965D4700496A2A /* TinyRenderWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyRenderWindow.cpp; sourceTree = ""; }; + 1B9FE46F1A965D4700496A2A /* TinyRenderWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyRenderWindow.h; sourceTree = ""; }; + 1B9FE4701A965D4700496A2A /* TinyResourceManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyResourceManager.cpp; sourceTree = ""; }; + 1B9FE4711A965D4700496A2A /* TinyResourceManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyResourceManager.h; sourceTree = ""; }; + 1B9FE4721A965D4700496A2A /* TinyRoot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyRoot.cpp; sourceTree = ""; }; + 1B9FE4731A965D4700496A2A /* TinyRoot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyRoot.h; sourceTree = ""; }; + 1B9FE4741A965D4700496A2A /* TinySceneManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinySceneManager.cpp; sourceTree = ""; }; + 1B9FE4751A965D4700496A2A /* TinySceneManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinySceneManager.h; sourceTree = ""; }; + 1B9FE4761A965D4700496A2A /* TinySceneNode.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinySceneNode.cpp; sourceTree = ""; }; + 1B9FE4771A965D4700496A2A /* TinySceneNode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinySceneNode.h; sourceTree = ""; }; + 1B9FE4781A965D4700496A2A /* TinySchedulerManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinySchedulerManager.cpp; sourceTree = ""; }; + 1B9FE4791A965D4700496A2A /* TinySchedulerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinySchedulerManager.h; sourceTree = ""; }; + 1B9FE47A1A965D4700496A2A /* TinySingleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinySingleton.h; sourceTree = ""; }; + 1B9FE47B1A965D4700496A2A /* TinySubEntity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinySubEntity.cpp; sourceTree = ""; }; + 1B9FE47C1A965D4700496A2A /* TinySubEntity.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinySubEntity.h; sourceTree = ""; }; + 1B9FE47D1A965D4700496A2A /* TinySubMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinySubMesh.cpp; sourceTree = ""; }; + 1B9FE47E1A965D4700496A2A /* TinySubMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinySubMesh.h; sourceTree = ""; }; + 1B9FE47F1A965D4700496A2A /* TinyTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyTexture.cpp; sourceTree = ""; }; + 1B9FE4801A965D4700496A2A /* TinyTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyTexture.h; sourceTree = ""; }; + 1B9FE4811A965D4700496A2A /* TinyTextureManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyTextureManager.cpp; sourceTree = ""; }; + 1B9FE4821A965D4700496A2A /* TinyTextureManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyTextureManager.h; sourceTree = ""; }; + 1B9FE4831A965D4700496A2A /* TinyVertexIndexData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyVertexIndexData.cpp; sourceTree = ""; }; + 1B9FE4841A965D4700496A2A /* TinyVertexIndexData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyVertexIndexData.h; sourceTree = ""; }; + 1B9FE4851A965D4700496A2A /* TinyViewPort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TinyViewPort.cpp; sourceTree = ""; }; + 1B9FE4861A965D4700496A2A /* TinyViewPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyViewPort.h; sourceTree = ""; }; 1BC0D6CE1A958ECB00FC82E7 /* TinyResourceManager_mac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = TinyResourceManager_mac.mm; sourceTree = SOURCE_ROOT; }; 1BC0D6D01A95C80200FC82E7 /* TinyImage_mac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = TinyImage_mac.mm; sourceTree = SOURCE_ROOT; }; - 1BC0D6D11A95C80200FC82E7 /* TinyHardwareBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyHardwareBuffer.h; path = ../../tiny3d_main/TinyHardwareBuffer.h; sourceTree = SOURCE_ROOT; }; - 1BC0D6D51A95CD1500FC82E7 /* TinyImage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyImage.cpp; path = ../../tiny3d_main/TinyImage.cpp; sourceTree = ""; }; - 1BC0D6D61A95CD1500FC82E7 /* TinyImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyImage.h; path = ../../tiny3d_main/TinyImage.h; sourceTree = ""; }; 1BC0D6D81A96139F00FC82E7 /* TinyPlatform_mac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = TinyPlatform_mac.mm; sourceTree = SOURCE_ROOT; }; 1BC0D6DA1A961A1B00FC82E7 /* TinyMacRenderWindow.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = TinyMacRenderWindow.mm; sourceTree = SOURCE_ROOT; }; 1BC0D6DB1A961A1B00FC82E7 /* TinyMacRenderWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyMacRenderWindow.h; sourceTree = SOURCE_ROOT; }; - 1BC8451B1A89F35800E57381 /* TinyPlatform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TinyPlatform.h; path = ../../tiny3d_main/TinyPlatform.h; sourceTree = SOURCE_ROOT; }; - 1BC8451E1A8A173300E57381 /* TinyIteratorWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyIteratorWrapper.h; path = ../../tiny3d_main/TinyIteratorWrapper.h; sourceTree = ""; }; - 1BC8451F1A8A173300E57381 /* TinyMemoryAlloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyMemoryAlloc.h; path = ../../tiny3d_main/TinyMemoryAlloc.h; sourceTree = ""; }; - 1BC845201A8A173300E57381 /* TinySingleton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinySingleton.h; path = ../../tiny3d_main/TinySingleton.h; sourceTree = ""; }; - 1BC845211A8C9CC200E57381 /* TinyMovableObjectFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyMovableObjectFactory.cpp; path = ../../tiny3d_main/TinyMovableObjectFactory.cpp; sourceTree = ""; }; - 1BC845221A8C9CC200E57381 /* TinyMovableObjectFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyMovableObjectFactory.h; path = ../../tiny3d_main/TinyMovableObjectFactory.h; sourceTree = ""; }; - 1BC845241A8C9D4700E57381 /* TinyEntityFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyEntityFactory.cpp; path = ../../tiny3d_main/TinyEntityFactory.cpp; sourceTree = ""; }; - 1BC845251A8C9D4700E57381 /* TinyEntityFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyEntityFactory.h; path = ../../tiny3d_main/TinyEntityFactory.h; sourceTree = ""; }; - 1BC845271A8C9D8100E57381 /* TinyHardwareBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TinyHardwareBuffer.cpp; path = ../../tiny3d_main/TinyHardwareBuffer.cpp; sourceTree = ""; }; - 1BC845281A8C9D8100E57381 /* TinyHardwareBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyHardwareBuffer.h; path = ../../tiny3d_main/TinyHardwareBuffer.h; sourceTree = ""; }; - 1BC8452D1A8CB68100E57381 /* TinyCamera.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = TinyCamera.cpp; path = ../../tiny3d_main/TinyCamera.cpp; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -207,6 +209,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 1B9FE4311A965BDC00496A2A /* Cocoa.framework in Frameworks */, + 1B9FE42F1A965BD700496A2A /* OpenGL.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -216,6 +220,8 @@ 1B0760671A7F2626007103F3 = { isa = PBXGroup; children = ( + 1B9FE4301A965BDC00496A2A /* Cocoa.framework */, + 1B9FE42E1A965BD700496A2A /* OpenGL.framework */, 1B0760721A7F2626007103F3 /* proj_mac */, 1B0760961A7F6641007103F3 /* tiny3d_main */, 1B0760A91A7F669F007103F3 /* external */, @@ -255,96 +261,94 @@ 1B0760961A7F6641007103F3 /* tiny3d_main */ = { isa = PBXGroup; children = ( - 1BC0D6D51A95CD1500FC82E7 /* TinyImage.cpp */, - 1BC0D6D61A95CD1500FC82E7 /* TinyImage.h */, - 1B4BB8561A81C3C300E97FB4 /* TinyCamera.cpp */, - 1B4BB8591A81C52500E97FB4 /* TinyCamera.h */, - 1BC0D6BD1A8DED4400FC82E7 /* TinyCommon.h */, - 1B4BB85A1A81C52500E97FB4 /* TinyDelegate.cpp */, - 1B4BB85B1A81C52500E97FB4 /* TinyDelegate.h */, - 1BA22F161A8216900060733E /* TinyEntity.cpp */, - 1B4BB85C1A81C52500E97FB4 /* TinyEntity.h */, - 1BC845241A8C9D4700E57381 /* TinyEntityFactory.cpp */, - 1BC845251A8C9D4700E57381 /* TinyEntityFactory.h */, - 1B4BB85E1A81C52500E97FB4 /* TinyGPUProgram.cpp */, - 1B4BB85F1A81C52500E97FB4 /* TinyGPUProgram.h */, - 1B4BB8601A81C52500E97FB4 /* TinyGPUProgramManager.cpp */, - 1B4BB8611A81C52500E97FB4 /* TinyGPUProgramManager.h */, - 1BC845271A8C9D8100E57381 /* TinyHardwareBuffer.cpp */, - 1BC0D6D11A95C80200FC82E7 /* TinyHardwareBuffer.h */, - 1BC845281A8C9D8100E57381 /* TinyHardwareBuffer.h */, - 1B4BB8621A81C52500E97FB4 /* TinyInputManager.cpp */, - 1B4BB8631A81C52500E97FB4 /* TinyInputManager.h */, - 1BA22F0D1A82154A0060733E /* TinyInputObject.cpp */, - 1BA22F0E1A82154A0060733E /* TinyInputObject.h */, - 1BC8451E1A8A173300E57381 /* TinyIteratorWrapper.h */, - 1BA22F131A8216180060733E /* TinyKeyboard.cpp */, - 1BA22F141A8216180060733E /* TinyKeyboard.h */, - 1B4BB8641A81C52500E97FB4 /* TinyLight.cpp */, - 1B4BB8651A81C52500E97FB4 /* TinyLight.h */, - 1BA22F181A8217540060733E /* TinyMaterial.cpp */, - 1BA22F191A8217540060733E /* TinyMaterial.h */, - 1BC0D6C41A8DF09D00FC82E7 /* TinyMaterialManager.cpp */, - 1BC0D6C51A8DF09D00FC82E7 /* TinyMaterialManager.h */, - 1B4BB8661A81C52500E97FB4 /* TinyMath.cpp */, - 1B4BB8671A81C52500E97FB4 /* TinyMath.h */, - 1BC8451F1A8A173300E57381 /* TinyMemoryAlloc.h */, - 1BA22F1B1A8217760060733E /* TinyMesh.cpp */, - 1B4BB8691A81C52500E97FB4 /* TinyMesh.h */, - 1BC0D6C11A8DF07500FC82E7 /* TinyMeshManager.cpp */, - 1BC0D6C21A8DF07500FC82E7 /* TinyMeshManager.h */, - 1BA22F101A8215E50060733E /* TinyMouse.cpp */, - 1BA22F111A8215E50060733E /* TinyMouse.h */, - 1B4BB86A1A81C52500E97FB4 /* TinyMovableObject.cpp */, - 1B4BB86B1A81C52500E97FB4 /* TinyMovableObject.h */, - 1BC845211A8C9CC200E57381 /* TinyMovableObjectFactory.cpp */, - 1BC845221A8C9CC200E57381 /* TinyMovableObjectFactory.h */, - 1B8F75C51A876409000D25F8 /* TinyNode.cpp */, - 1B8F75C61A876409000D25F8 /* TinyNode.h */, - 1B4BB86C1A81C52500E97FB4 /* TinyObject.cpp */, - 1B4BB86D1A81C52500E97FB4 /* TinyObject.h */, - 1BC8451B1A89F35800E57381 /* TinyPlatform.h */, - 1BA22F1D1A82179C0060733E /* TinyRenderable.cpp */, - 1B4BB86E1A81C52500E97FB4 /* TinyRenderable.h */, - 1BA6453D1A8DD9090094A70D /* TinyRenderOperation.cpp */, - 1BA6453E1A8DD9090094A70D /* TinyRenderOperation.h */, - 1BA22F1F1A8217B70060733E /* TinyRenderQueue.cpp */, - 1B4BB86F1A81C52500E97FB4 /* TinyRenderQueue.h */, - 1BA22F3A1A82685B0060733E /* TinyRenderSystem.cpp */, - 1BA22F3B1A82685B0060733E /* TinyRenderSystem.h */, - 1BA22F211A8217D10060733E /* TinyRenderTarget.cpp */, - 1B4BB8701A81C52500E97FB4 /* TinyRenderTarget.h */, - 1BA22F261A8218040060733E /* TinyRenderTexture.cpp */, - 1BA22F271A8218040060733E /* TinyRenderTexture.h */, - 1BA22F231A8217EA0060733E /* TinyRenderWindow.cpp */, - 1BA22F241A8217EA0060733E /* TinyRenderWindow.h */, - 1B4BB8711A81C52500E97FB4 /* TinyResourceManager.cpp */, - 1B4BB8721A81C52500E97FB4 /* TinyResourceManager.h */, - 1B4BB8731A81C52500E97FB4 /* TinyRoot.cpp */, - 1B4BB8741A81C52500E97FB4 /* TinyRoot.h */, - 1BA22F291A8218210060733E /* TinySceneManager.cpp */, - 1B4BB8751A81C52500E97FB4 /* TinySceneManager.h */, - 1BA22F2B1A8218350060733E /* TinySceneNode.cpp */, - 1B4BB8761A81C52500E97FB4 /* TinySceneNode.h */, - 1BA22F2D1A8218490060733E /* TinySchedulerManager.cpp */, - 1B4BB8771A81C52500E97FB4 /* TinySchedulerManager.h */, - 1BC845201A8A173300E57381 /* TinySingleton.h */, - 1B8F75C81A89100F000D25F8 /* TinySubEntity.cpp */, - 1B8F75C91A89100F000D25F8 /* TinySubEntity.h */, - 1B8F75CB1A89103A000D25F8 /* TinySubMesh.cpp */, - 1B8F75CC1A89103A000D25F8 /* TinySubMesh.h */, - 1BA22F2F1A82185D0060733E /* TinyTexture.cpp */, - 1B4BB8781A81C52500E97FB4 /* TinyTexture.h */, - 1B4BB8791A81C52500E97FB4 /* TinyTextureManager.cpp */, - 1B4BB87A1A81C52500E97FB4 /* TinyTextureManager.h */, - 1BC0D6BE1A8DED4400FC82E7 /* TinyVertexIndexData.cpp */, - 1BC0D6BF1A8DED4400FC82E7 /* TinyVertexIndexData.h */, - 1B4BB87B1A81C52500E97FB4 /* TinyViewPort.cpp */, - 1B4BB87C1A81C52500E97FB4 /* TinyViewPort.h */, - 1BC8452D1A8CB68100E57381 /* TinyCamera.cpp */, + 1B9FE4321A965D4700496A2A /* TinyCamera.cpp */, + 1B9FE4331A965D4700496A2A /* TinyCamera.h */, + 1B9FE4341A965D4700496A2A /* TinyCommon.h */, + 1B9FE4351A965D4700496A2A /* TinyDelegate.cpp */, + 1B9FE4361A965D4700496A2A /* TinyDelegate.h */, + 1B9FE4371A965D4700496A2A /* TinyEntity.cpp */, + 1B9FE4381A965D4700496A2A /* TinyEntity.h */, + 1B9FE4391A965D4700496A2A /* TinyEntityFactory.cpp */, + 1B9FE43A1A965D4700496A2A /* TinyEntityFactory.h */, + 1B9FE43B1A965D4700496A2A /* TinyGPUProgram.cpp */, + 1B9FE43C1A965D4700496A2A /* TinyGPUProgram.h */, + 1B9FE43D1A965D4700496A2A /* TinyGPUProgramManager.cpp */, + 1B9FE43E1A965D4700496A2A /* TinyGPUProgramManager.h */, + 1B9FE43F1A965D4700496A2A /* TinyHardwareBuffer.cpp */, + 1B9FE4401A965D4700496A2A /* TinyHardwareBuffer.h */, + 1B9FE4411A965D4700496A2A /* TinyImage.cpp */, + 1B9FE4421A965D4700496A2A /* TinyImage.h */, + 1B9FE4431A965D4700496A2A /* TinyInputManager.cpp */, + 1B9FE4441A965D4700496A2A /* TinyInputManager.h */, + 1B9FE4451A965D4700496A2A /* TinyInputObject.cpp */, + 1B9FE4461A965D4700496A2A /* TinyInputObject.h */, + 1B9FE4471A965D4700496A2A /* TinyIteratorWrapper.h */, + 1B9FE4481A965D4700496A2A /* TinyKeyboard.cpp */, + 1B9FE4491A965D4700496A2A /* TinyKeyboard.h */, + 1B9FE44A1A965D4700496A2A /* TinyLight.cpp */, + 1B9FE44B1A965D4700496A2A /* TinyLight.h */, + 1B9FE44C1A965D4700496A2A /* TinyMaterial.cpp */, + 1B9FE44D1A965D4700496A2A /* TinyMaterial.h */, + 1B9FE44E1A965D4700496A2A /* TinyMaterialManager.cpp */, + 1B9FE44F1A965D4700496A2A /* TinyMaterialManager.h */, + 1B9FE4501A965D4700496A2A /* TinyMath.cpp */, + 1B9FE4511A965D4700496A2A /* TinyMath.h */, + 1B9FE4521A965D4700496A2A /* TinyMemoryAlloc.h */, + 1B9FE4531A965D4700496A2A /* TinyMesh.cpp */, + 1B9FE4541A965D4700496A2A /* TinyMesh.h */, + 1B9FE4551A965D4700496A2A /* TinyMeshManager.cpp */, + 1B9FE4561A965D4700496A2A /* TinyMeshManager.h */, + 1B9FE4571A965D4700496A2A /* TinyMouse.cpp */, + 1B9FE4581A965D4700496A2A /* TinyMouse.h */, + 1B9FE4591A965D4700496A2A /* TinyMovableObject.cpp */, + 1B9FE45A1A965D4700496A2A /* TinyMovableObject.h */, + 1B9FE45B1A965D4700496A2A /* TinyMovableObjectFactory.cpp */, + 1B9FE45C1A965D4700496A2A /* TinyMovableObjectFactory.h */, + 1B9FE45D1A965D4700496A2A /* TinyNode.cpp */, + 1B9FE45E1A965D4700496A2A /* TinyNode.h */, + 1B9FE45F1A965D4700496A2A /* TinyObject.cpp */, + 1B9FE4601A965D4700496A2A /* TinyObject.h */, + 1B9FE4611A965D4700496A2A /* TinyPlatform.h */, + 1B9FE4621A965D4700496A2A /* TinyRenderable.cpp */, + 1B9FE4631A965D4700496A2A /* TinyRenderable.h */, + 1B9FE4641A965D4700496A2A /* TinyRenderOperation.cpp */, + 1B9FE4651A965D4700496A2A /* TinyRenderOperation.h */, + 1B9FE4661A965D4700496A2A /* TinyRenderQueue.cpp */, + 1B9FE4671A965D4700496A2A /* TinyRenderQueue.h */, + 1B9FE4681A965D4700496A2A /* TinyRenderSystem.cpp */, + 1B9FE4691A965D4700496A2A /* TinyRenderSystem.h */, + 1B9FE46A1A965D4700496A2A /* TinyRenderTarget.cpp */, + 1B9FE46B1A965D4700496A2A /* TinyRenderTarget.h */, + 1B9FE46C1A965D4700496A2A /* TinyRenderTexture.cpp */, + 1B9FE46D1A965D4700496A2A /* TinyRenderTexture.h */, + 1B9FE46E1A965D4700496A2A /* TinyRenderWindow.cpp */, + 1B9FE46F1A965D4700496A2A /* TinyRenderWindow.h */, + 1B9FE4701A965D4700496A2A /* TinyResourceManager.cpp */, + 1B9FE4711A965D4700496A2A /* TinyResourceManager.h */, + 1B9FE4721A965D4700496A2A /* TinyRoot.cpp */, + 1B9FE4731A965D4700496A2A /* TinyRoot.h */, + 1B9FE4741A965D4700496A2A /* TinySceneManager.cpp */, + 1B9FE4751A965D4700496A2A /* TinySceneManager.h */, + 1B9FE4761A965D4700496A2A /* TinySceneNode.cpp */, + 1B9FE4771A965D4700496A2A /* TinySceneNode.h */, + 1B9FE4781A965D4700496A2A /* TinySchedulerManager.cpp */, + 1B9FE4791A965D4700496A2A /* TinySchedulerManager.h */, + 1B9FE47A1A965D4700496A2A /* TinySingleton.h */, + 1B9FE47B1A965D4700496A2A /* TinySubEntity.cpp */, + 1B9FE47C1A965D4700496A2A /* TinySubEntity.h */, + 1B9FE47D1A965D4700496A2A /* TinySubMesh.cpp */, + 1B9FE47E1A965D4700496A2A /* TinySubMesh.h */, + 1B9FE47F1A965D4700496A2A /* TinyTexture.cpp */, + 1B9FE4801A965D4700496A2A /* TinyTexture.h */, + 1B9FE4811A965D4700496A2A /* TinyTextureManager.cpp */, + 1B9FE4821A965D4700496A2A /* TinyTextureManager.h */, + 1B9FE4831A965D4700496A2A /* TinyVertexIndexData.cpp */, + 1B9FE4841A965D4700496A2A /* TinyVertexIndexData.h */, + 1B9FE4851A965D4700496A2A /* TinyViewPort.cpp */, + 1B9FE4861A965D4700496A2A /* TinyViewPort.h */, ); name = tiny3d_main; - path = proj_mac; + path = ../../tiny3d_main; sourceTree = ""; }; 1B0760A91A7F669F007103F3 /* external */ = { @@ -353,7 +357,7 @@ 1B0760AA1A7F66C7007103F3 /* kazmath */, ); name = external; - path = proj_mac; + path = ../../external; sourceTree = ""; }; 1B0760AA1A7F66C7007103F3 /* kazmath */ = { @@ -382,7 +386,7 @@ 1B0760C31A7F66E4007103F3 /* vec4.c */, 1B0760C41A7F66E4007103F3 /* vec4.h */, ); - name = kazmath; + path = kazmath; sourceTree = ""; }; 1B0760AD1A7F66E4007103F3 /* GL */ = { @@ -393,8 +397,7 @@ 1B0760B01A7F66E4007103F3 /* matrix.c */, 1B0760B11A7F66E4007103F3 /* matrix.h */, ); - name = GL; - path = ../../external/kazmath/GL; + path = GL; sourceTree = ""; }; 1B0760E21A7F6F37007103F3 /* samples */ = { @@ -403,7 +406,7 @@ 1B0760E41A7F719E007103F3 /* sample_ocean */, ); name = samples; - path = proj_mac; + path = ../../sample; sourceTree = ""; }; 1B0760E41A7F719E007103F3 /* sample_ocean */ = { @@ -411,7 +414,7 @@ children = ( 1B9FE3731A96518700496A2A /* OceanDelegate.cpp */, ); - name = sample_ocean; + path = sample_ocean; sourceTree = ""; }; /* End PBXGroup section */ @@ -484,66 +487,66 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1BA22F281A8218040060733E /* TinyRenderTexture.cpp in Sources */, - 1BA22F1C1A8217760060733E /* TinyMesh.cpp in Sources */, - 1BA22F301A82185D0060733E /* TinyTexture.cpp in Sources */, - 1BA22F171A8216900060733E /* TinyEntity.cpp in Sources */, - 1B8F75CD1A89103A000D25F8 /* TinySubMesh.cpp in Sources */, - 1BC0D6D21A95C80200FC82E7 /* TinyImage_mac.mm in Sources */, - 1B4BB87E1A81C52500E97FB4 /* TinyDelegate.cpp in Sources */, - 1BA22F0F1A82154A0060733E /* TinyInputObject.cpp in Sources */, - 1B0760CA1A7F66E4007103F3 /* plane.c in Sources */, - 1B0760CE1A7F66E4007103F3 /* vec2.c in Sources */, - 1BA6453F1A8DD9090094A70D /* TinyRenderOperation.cpp in Sources */, - 1B0760C91A7F66E4007103F3 /* mat4.c in Sources */, - 1B0760CF1A7F66E4007103F3 /* vec3.c in Sources */, - 1B4BB8831A81C52500E97FB4 /* TinyMath.cpp in Sources */, - 1B4BB8881A81C52500E97FB4 /* TinyTextureManager.cpp in Sources */, - 1B4BB8821A81C52500E97FB4 /* TinyLight.cpp in Sources */, - 1BC0D6DC1A961A1B00FC82E7 /* TinyMacRenderWindow.mm in Sources */, - 1BA22F121A8215E50060733E /* TinyMouse.cpp in Sources */, - 1B4F26161A7FEAD200DABC42 /* OpenGLView.mm in Sources */, - 1BA22F221A8217D10060733E /* TinyRenderTarget.cpp in Sources */, - 1BA22F201A8217B70060733E /* TinyRenderQueue.cpp in Sources */, - 1B0760C81A7F66E4007103F3 /* mat3.c in Sources */, - 1B0760D01A7F66E4007103F3 /* vec4.c in Sources */, - 1B9FE3741A96518700496A2A /* OceanDelegate.cpp in Sources */, - 1BC0D6C61A8DF09D00FC82E7 /* TinyMaterialManager.cpp in Sources */, - 1B4BB8801A81C52500E97FB4 /* TinyGPUProgramManager.cpp in Sources */, - 1B4BB8871A81C52500E97FB4 /* TinyRoot.cpp in Sources */, - 1BC0D6D71A95CD1500FC82E7 /* TinyImage.cpp in Sources */, - 1B0760C51A7F66E4007103F3 /* aabb.c in Sources */, - 1B4BB87F1A81C52500E97FB4 /* TinyGPUProgram.cpp in Sources */, - 1B4BB8851A81C52500E97FB4 /* TinyObject.cpp in Sources */, - 1B4BB8891A81C52500E97FB4 /* TinyViewPort.cpp in Sources */, - 1BA22F1E1A82179C0060733E /* TinyRenderable.cpp in Sources */, - 1BA22F2C1A8218350060733E /* TinySceneNode.cpp in Sources */, - 1B4F26111A7FEAD200DABC42 /* AppDelegate.mm in Sources */, - 1BA22F2A1A8218210060733E /* TinySceneManager.cpp in Sources */, - 1BC0D6C31A8DF07500FC82E7 /* TinyMeshManager.cpp in Sources */, - 1BA22F3C1A82685B0060733E /* TinyRenderSystem.cpp in Sources */, - 1BC0D6D91A96139F00FC82E7 /* TinyPlatform_mac.mm in Sources */, - 1BA22F1A1A8217540060733E /* TinyMaterial.cpp in Sources */, - 1B4BB8841A81C52500E97FB4 /* TinyMovableObject.cpp in Sources */, - 1BC845291A8C9D8100E57381 /* TinyHardwareBuffer.cpp in Sources */, - 1BA22F251A8217EA0060733E /* TinyRenderWindow.cpp in Sources */, - 1BA22F151A8216180060733E /* TinyKeyboard.cpp in Sources */, - 1B0760CC1A7F66E4007103F3 /* ray2.c in Sources */, - 1B0760C61A7F66E4007103F3 /* mat4stack.c in Sources */, - 1B0760C71A7F66E4007103F3 /* matrix.c in Sources */, - 1BA22F2E1A8218490060733E /* TinySchedulerManager.cpp in Sources */, - 1B4BB8571A81C3C300E97FB4 /* TinyCamera.cpp in Sources */, - 1B8F75CA1A89100F000D25F8 /* TinySubEntity.cpp in Sources */, - 1B0760CD1A7F66E4007103F3 /* utility.c in Sources */, - 1B8F75C71A876409000D25F8 /* TinyNode.cpp in Sources */, - 1BC0D6C01A8DED4400FC82E7 /* TinyVertexIndexData.cpp in Sources */, - 1B4F26141A7FEAD200DABC42 /* main.m in Sources */, - 1BC845261A8C9D4700E57381 /* TinyEntityFactory.cpp in Sources */, - 1B4BB8861A81C52500E97FB4 /* TinyResourceManager.cpp in Sources */, - 1BC0D6CF1A958ECB00FC82E7 /* TinyResourceManager_mac.mm in Sources */, - 1B0760CB1A7F66E4007103F3 /* quaternion.c in Sources */, - 1BC845231A8C9CC200E57381 /* TinyMovableObjectFactory.cpp in Sources */, - 1B4BB8811A81C52500E97FB4 /* TinyInputManager.cpp in Sources */, + 1B9FE4A91A965D4700496A2A /* TinySubEntity.cpp in Sources */, + 1B9FE48B1A965D4700496A2A /* TinyGPUProgram.cpp in Sources */, + 1B9FE4901A965D4700496A2A /* TinyInputObject.cpp in Sources */, + 1B9FE42D1A965B9900496A2A /* main.m in Sources */, + 1B9FE4AD1A965D4700496A2A /* TinyVertexIndexData.cpp in Sources */, + 1B9FE4201A965B8A00496A2A /* aabb.c in Sources */, + 1B9FE4211A965B8A00496A2A /* mat4stack.c in Sources */, + 1B9FE4221A965B8A00496A2A /* matrix.c in Sources */, + 1B9FE49A1A965D4700496A2A /* TinyMovableObjectFactory.cpp in Sources */, + 1B9FE4971A965D4700496A2A /* TinyMeshManager.cpp in Sources */, + 1B9FE48E1A965D4700496A2A /* TinyImage.cpp in Sources */, + 1B9FE4231A965B8A00496A2A /* mat3.c in Sources */, + 1B9FE4991A965D4700496A2A /* TinyMovableObject.cpp in Sources */, + 1B9FE4981A965D4700496A2A /* TinyMouse.cpp in Sources */, + 1B9FE4241A965B8A00496A2A /* mat4.c in Sources */, + 1B9FE4A41A965D4700496A2A /* TinyResourceManager.cpp in Sources */, + 1B9FE49E1A965D4700496A2A /* TinyRenderOperation.cpp in Sources */, + 1B9FE48D1A965D4700496A2A /* TinyHardwareBuffer.cpp in Sources */, + 1B9FE4961A965D4700496A2A /* TinyMesh.cpp in Sources */, + 1B9FE4AB1A965D4700496A2A /* TinyTexture.cpp in Sources */, + 1B9FE4251A965B8A00496A2A /* plane.c in Sources */, + 1B9FE48A1A965D4700496A2A /* TinyEntityFactory.cpp in Sources */, + 1B9FE48F1A965D4700496A2A /* TinyInputManager.cpp in Sources */, + 1B9FE4261A965B8A00496A2A /* quaternion.c in Sources */, + 1B9FE4AC1A965D4700496A2A /* TinyTextureManager.cpp in Sources */, + 1B9FE4951A965D4700496A2A /* TinyMath.cpp in Sources */, + 1B9FE49C1A965D4700496A2A /* TinyObject.cpp in Sources */, + 1B9FE4A01A965D4700496A2A /* TinyRenderSystem.cpp in Sources */, + 1B9FE4941A965D4700496A2A /* TinyMaterialManager.cpp in Sources */, + 1B9FE4271A965B8A00496A2A /* ray2.c in Sources */, + 1B9FE4281A965B8A00496A2A /* utility.c in Sources */, + 1B9FE4291A965B8A00496A2A /* vec2.c in Sources */, + 1B9FE4A21A965D4700496A2A /* TinyRenderTexture.cpp in Sources */, + 1B9FE42A1A965B8A00496A2A /* vec3.c in Sources */, + 1B9FE4881A965D4700496A2A /* TinyDelegate.cpp in Sources */, + 1B9FE42B1A965B8A00496A2A /* vec4.c in Sources */, + 1B9FE4911A965D4700496A2A /* TinyKeyboard.cpp in Sources */, + 1B9FE4AE1A965D4700496A2A /* TinyViewPort.cpp in Sources */, + 1B9FE4A51A965D4700496A2A /* TinyRoot.cpp in Sources */, + 1B9FE4931A965D4700496A2A /* TinyMaterial.cpp in Sources */, + 1B9FE49F1A965D4700496A2A /* TinyRenderQueue.cpp in Sources */, + 1B9FE42C1A965B8A00496A2A /* OceanDelegate.cpp in Sources */, + 1B9FE48C1A965D4700496A2A /* TinyGPUProgramManager.cpp in Sources */, + 1B9FE4A31A965D4700496A2A /* TinyRenderWindow.cpp in Sources */, + 1B9FE3F21A965B7A00496A2A /* AppDelegate.mm in Sources */, + 1B9FE4871A965D4700496A2A /* TinyCamera.cpp in Sources */, + 1B9FE4A71A965D4700496A2A /* TinySceneNode.cpp in Sources */, + 1B9FE4AA1A965D4700496A2A /* TinySubMesh.cpp in Sources */, + 1B9FE49B1A965D4700496A2A /* TinyNode.cpp in Sources */, + 1B9FE4891A965D4700496A2A /* TinyEntity.cpp in Sources */, + 1B9FE49D1A965D4700496A2A /* TinyRenderable.cpp in Sources */, + 1B9FE4921A965D4700496A2A /* TinyLight.cpp in Sources */, + 1B9FE4A11A965D4700496A2A /* TinyRenderTarget.cpp in Sources */, + 1B9FE4A81A965D4700496A2A /* TinySchedulerManager.cpp in Sources */, + 1B9FE4A61A965D4700496A2A /* TinySceneManager.cpp in Sources */, + 1B9FE3F31A965B7A00496A2A /* OpenGLView.mm in Sources */, + 1B9FE3F41A965B7A00496A2A /* TinyResourceManager_mac.mm in Sources */, + 1B9FE3F51A965B7A00496A2A /* TinyImage_mac.mm in Sources */, + 1B9FE3F61A965B7A00496A2A /* TinyPlatform_mac.mm in Sources */, + 1B9FE3F71A965B7A00496A2A /* TinyMacRenderWindow.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/build/proj_mac/proj_mac.xcodeproj/project.xcworkspace/xcuserdata/reuben.xcuserdatad/UserInterfaceState.xcuserstate b/build/proj_mac/proj_mac.xcodeproj/project.xcworkspace/xcuserdata/reuben.xcuserdatad/UserInterfaceState.xcuserstate index 951bb11af0ae587d418dec68ee0dc407362eefb7..82ebb89fe60418757bddcc491a43e9fd553bca0b 100644 GIT binary patch literal 92143 zcmdRX2Vhgx{{KDqo_n*Cn{*_I%(6%K1Vw1eD4UkOVrWBK=%Q&E0&))V7DXpv+-KKKV6n9~bXG|Mcbzw;_NoUAcHJflK6)xIC^uH-H<+4dMoKL%5;bFfN}f;D&P}xRKm= zZUQ%no5D@y%D8f_f~(=?aC14rE#y{mtGLzN8g4DOmD|Q`=kDX~=XP*Axd*w2xJS9i zxEHyXxFg(A?ihERJI$Tp&T;Q??{gn;pK@Pum$;v~Uyv2qP!x(rF(?+5t*qXd+KvQRgajdD;QGyn}m1!xo+izXl^Dnf2F8_hv;(T!*xQV>D&(E_v(EkaAt z3Un)4gKkHg&}Os+ZAIJAZnOvOMUSHA(DUd8^dfo*y^P*L@1pbQGxP=e8hwMlMHkWc z=tuNB&+~fTz#I8!K8BCwoAWLBmV5`kBj1Vd%=hB6`5Zo%@6Gq&`||zxJib3alpn^A z;z#q7_(Hyjck`wEY<>W`Az(N{BC{^ z|1f`mf0TcMf0BQie};d7Kgu8DkMpnbXZSbyxA;%^Px%Y{XZ+{<5B!h(PyEmPFZ}NU zkMadU&bo26y^(yg(bpG!Zu;MaG!9$utV4>>=GUjb_;uiy~2aSv%+)2^TG?li^5C75#gwC zLO3m)5k3|^5k3_z2%ia`3ttFd3f~Bqg&%~Ug{Zp=qgUqiL(@sOhAM*Cc3CG^v_QO_t_bO%F}BCP&j((@!%{Ge|Q` zldl=68KoJg8LzosFxlgl8^MK|-%|n{~ngg1HnkO`eHBW1v*Sw%PsyU{4RdYgf zT60G8rsgfpyPEej=QST`E@(c}e5LtX^PT3B=10v>n%^|PYdI~_idspl*BZ1It*njK z#%P;puhKTxw$R3D+h{vzJ8HXXh_B-tl+8?#QYJb!IspE85C+c)Mz0Rz&=%RGdI)|=_ zu9>d6uC*>s*Iw5_*G1P=m!wP9rRy?u-F4UKdg^-Vdh7b=`s)VhhUkXshU-S?#^}cC zChDBJLS2!rL|3XS*H!4MbspUe-Avsa-CP~f&DSl~Ez#YiTcKO2Tcum4Td%uAcc<=N z-A3J3-8S70-A>&e-Co@zx_!FGbdT$v(jC%0t9wrOlJ1D^W!)>f*L0_Juj}5>y{&sk z_kr$1-6y(FbzkVd)P1YFsJpEDLHCR9SKS}FKlOqh>$Q5F-lR9{ZTcv^UGLCet#77p zrEjfor*E(CtnZ>v)Ft`ri6HeSiI6{SbYDez<2KAq)ZeAQTYr!KUj0V>CjDmp z7X4oRgZhW`59<%<59^=SKcjy||Em6k{-pjL{k!`2^zZAx)PJS_TK|pyTm41-cls;( zKlFbZI0G{92Ekx4$OfySnW4F%g`u;di=nF_%h1ix-O$(2&yZ&rVHjx`Wf*N3V;E}~ zXBclNF_apn7^WI#7-kw~8E!BvHY_nLH7ql%GpsjkFx+O?YS?DjZn)3zh+&^$zu|!4 zS;KRN=M5(fuNh7mP8;4gd|>#{@U`I^!?%WuhTjcW41XB@G#ZRXqseGCUS(`*yxQ2z z*wNU@*xA^{m}$&1b~AQ2_BHl1<{A4NM;b>NM;pf&-NwnrVq=N1##n2dZk%D9X`E%e z!8qHv#JJSB%(%|D-nhZI#kkeD&A8pT&$!?CnDKGrLE{s~myAb@M~%mf$Bi!=UopOF zJZF5{_>S>i5 zbW^q|$CPX8Z5n3EHx-zMo31yxOp{E7rb<(lX_~3pbfamWNih-A&8AySx0>!W-DSGl zbdPDLX_x5%(_^N`O$SX+m|ij+F&#A>Grewl!}O-8aPfZt0-otd!rao_%G}xT1Ht$TgF)2mdTc4i^o!9skIQxe9HpMLd#0aD$8oiJ(hbd8!Zo5 zc3bvX4qBeDJZX8#a@2Cna@_K=lzYk9@?d$0JX9VgPmm|dPWgJdOfHuzcKKXumpS)i_AU`TUCqFO0AipS|l26NLzd@PPP_XJ=Pj)t#!I}zIB0hp>>gUm36gsjdiVcqji&YvvrGgt96@oyY*q~Bi4P^ zr>)OepS8YfJz+g*ea-r=^*!tR)(@;-S--Y^WBt|ooAr0=6`Rhcw;60ko5R+`c9pHE zt-Y;-t)nf?mTt?i<=ApXuQKeB+qNYd9h?*HSD{4{H;;1E2OQY6Ct&3V8wIOO-)csLAqIO2@ih4Bav8czR z4o1Bg^-|Q4sH0J5qh61CBkIklkE1?``ZVfN)b~-Bqq%4l%|{E-mS{QJ8r>|qd31~D z&e2_>yGCb4cZ=>GeNA+~=)CCu(F3AKMURdi6FoM1a&&QYNpxv+ZS?f$8PPMN7e+6N zUL3t7dQJ4&=ylQSqc=xyiQXE$E&8G8hoc{fJ{C^+=9`#rV=l&g7jq@% zkC;DWxmaVYDb^f&RczDPt7ALFc8u*5+c`EPHZwLWwp(nU*uJs-V)J50#Ey&|6?^Ua#-4~h8+$JHeC$WDAIE+b`*rM<*gsj5XcAGuQ z9&LBnueLX{x3aglcd&P~r`S{NY4&t`hP}J}I(x3Yw|$I#f_Q-)G-tf5`rb{c-zK_UG&`*pJ&!*w5Nu zx4&cm!2YTIEBi(JkM`dkoI`RL9kL_V(Ztch(bCb%k>SX6WI4Jyx;w6MTLcN}mWbiC*|<~Z&+;W+6y<2dVh%W=+e-tm#+ zW5*|sPaWSlzI9x5eCN32_|@^7XqI# zH8;6e*Q`FdeY*C_&CJTl$xTnsPEB>n(RsPOM^#o&^;EeE-MN*8wdL-L8Xx6Yt_9cO ze$LK0xF+0HTvP69t{K-{5fw?%C|X6Q=oN!vyq{~ywc=WHalnY3YsbYw7DFOIl9CN< ziAodr-QFqp2&6RJH7TdEqNcjCtjt~Q%udWn?vvRkxob{ZQZ}&KE4gbgV6$sVa!zu3 zW=gM&jNZ8u>FuQzMU^x9RJ+REPPrAlFr>Q3UF|ON3lIeBamr2nH|16I0hM|RtKII3 zL6t>tf0sah7;+s;BPvR#)w=VFKpCZzOMykX1zg^%um&3M@YDi{4X>;$o8+p_^NcL@ zlujxGVh%qez+!g5TRv4MbJubmc5*3PDwoEka~WJFm&JACx^vekX2qh&idC^GQA)HD zqr@uqom>x4bWg4qm(AsHxuE(!Twlcjs=i8Ts&r6RDR+U=?^QNZ#mDyYcwoBVs;KE* zR9aJ6?HTBrRasl(lx1M5prmrfVAu50Vi&wK4qgEM2D&D>%bapo%CpZjf;2m#rnIcI zW>&9ix2pgq7d0bG-7^@RABw&gqT?WlT(_sRxFQH)JcY@1PpU00rV96Q$B31>J=6jK zqfcp>d#J0XWCHxj1fnQ1r*q0N!%Hh>4RRIcyDPvh*qX+d_*6WK8^d+j#En+2-o%Yn zno-qQb4L#MOORLNF87>LU2Y=h+RQn*>y_q88>O8Oppcu)**0@UoLgz3wA{=Ub0tbE zrL___0bl}cMTWnrFoRsh6{R(`Med<-J!gNw(f^#{D!D3d8dp7*d2a>S@@V!?w`cs| zg4|NDvC0Zp^{mZsm1p$ef+6bM$Hzl0H#3BX8-RzlN?cseij4sjZsg`o99%G{w#Eha z*Q>hPHERoZBd2g42qfyCjFI`=0;e41zp#$_7H&SJ?<2d2Th4XZ$}Q%Wa7(#mN=K!W z(pl-UmAi>s!QIT=qI6aAl*vjl)oIJoh2UTDusQ=uYvTO|5noVKU0YaFTMgdO&?VWf zn!=Jk;N-9}1@1B!ce#uF08Y7C1IT$EPp#X}>N@T&uETb2J-30ojk}$@gS%6SR}z#& zB}qwEQnqtogelo>}Dr>nT#LVK{^fX2pIsg5J+| zPp+(XgGJW3t4k}2+2u4a<+}?Zbok<_|AO8XbU8r0tKpi0oIwROu9{j;=-brLy^#ZO zz)>yqYOg*h4d1Hl;&yYkP22-Y+9qy~l1{@uy>z6j4D`{<6L{&v+&*gjk0=?Nxcy3| z(tdPRb>$RixvS6z_BeN#>#&VG$UVV5$vwp#QnHk8N_XWN;Y%G{pOL#r!`V39rJYQPawiU7W}!iWDdcY^D%89-iz+pnYlU}){fv%8&@ zg>IMs>a*M%e$n1kdMR-}n76rixDFd3uxVkvX3tLS(lT*wmzJ|rk~6xrOixLjJJ)yN zhulYggpZZpbqE)@&;6?SLg}Nl_ucU|_bq+n38mX6?xNDS?v3xcALtvGm42I4romMH zI@J7%L>kS1<9_F^aDQ-rA`T(MBLQKhzcN4>s0>mDD?^l_$}lBgDcFf5t_RX09nvEM z{M2#nkVP2|@qDD>RIXPh!A~c|_9AMd)Uo`2;3@h+$nbqdlmJ?UNtqkeF%mtuIBsyQ&Pzkopv_3h>n&mj`Za z6ZXa&(1@$b<1Xr3U0GY@3n=Jn)ZAxCsD(1ZZ%C*$iesjD8nuI|NPE-)bwr&YWHUuU zH1|v5QAQ~fl`*H_vM#7AiXQ`IoJUosGJ5#L_)cxqaEuaB61cEG95b9P@N%-63fSLX zb495r9r!|N%GgaPLm8*UjT~Ii2a2jQs5`m_T??dopzBai)C*oOD80cAj7{!S<|_8U z--99T#Pw{aCJfGMl$G(y1TdBOe(tjA?wZm<*I;+88*=p2yb1_ylVMT1=DUk)%Usor z(OlHqOKmgCe`J)9hE|5qHlf1E2D>=LW80BE!Kf+nFtDpvis0?0I+ z^k7k0Ui7W&WK_j<*nx^s2`WWX&{R~0%25TXR7#XmWr{LYDO1Xo3Z+u1+QG%4YUDvR z@OwI%0Y7I!GMlDUD>d-DR=E{^uB1VOmY=<=t1GMjWva2lm3}{ftEscn*ZgTu&9yW` z(aO=2J&So_41FOeV?&=m(t~jYgv8_f!1uzq(9yZmPF<}28R{5+ zv`d+*+(;AjNMGJf7~z4fy@YCa?Id?ag0EEYB+%+9p|IFF!&iDIuw?4}rRLNGTId$k zPU;QqNzJVI!m6ralYO)wM2`f~-iP)pigHU`*m?{-1+^S{934bYpeGfg%vTmD3%8;} z=rDR3J)k)K( zGdhZnDT|e5%JOsQ74#}Pfli{=;Js7mG&+OMqSw(I=nZhKeDo%I3!Q`izdg=JX+-`& zSaE1qszK~xu!Y+4iovzzlW0p|gSx)ni`K#tSG5aD#cDMUfd519Q0C2py(>VSYSNO~ zy#q@t+zf6^O=-Cs=#*Chu#aBd+aP=haAl#gM0O}k<*O9V$~SY$BPN4?bW2Ex>`Jm= z^B#KNDchls81A0wuOoe{umyd9KBOV1p$njdNw#rLZF9RZyhR7pV!cE4y_IGHJMcSSh3SU4YMCR{!m@^qYGi~06e6kY?ilIpdBY`7Qr%F_}^7CI2bytOVAZV8f~_0 zbqi*BpmFxM*?bp19nu%ym5=8W_(VR5Pv%qjR6b4Fq-<8UC|i|n%68>G<$h%cq%S@b zMC!ry;IHAY<$LhgLBiSz;yK{IZz|s?-zq;-QDrKOZ!$pj#A;BcbhXrja<`($Rb52a zf?mwtfIfr;`1m0g?o!O8uE0iV_7^TR1XfwFrO zKSJ4~v>!gGuBYP1@Dn)O7Je*0jvue=RUT9x+QLr+ZCti$+E~XRa-gRgcLB_M zDvH&A`Wt?juRv21e62U1hrZs|U0Lp~sh*{J8$THx-^3Ryk0{H1EKlL9xeoX7Q~5H! zoUh<3`6_;zvQOEs98exr9#bAy4&KLm_!_>JpUz$8XY#X@CzL0Z=ao}RKjpM?Mrl8u z)*ZR78W$}X#xb5$ZlRFrr5=8v5hZv*U_F@o!aKBerv)yQ8om%1=DnuA_j=ES^`&QQ z>P9%@eDA5*$Wm21sjRdxzOZYF+XaIqpP&o*Wt?p*zldMVFX5LePbr6#!^+cJ`Q`jg zVA(e-&nVA=JwHcR!7;SDv>b*yKHTATxu;FYTV8L@3Cd~{`jr;BdzF>3Q3n`N$W6Z5 zEBLOsUI#a%jC^-w`DofFr)MV49X&feDTTJoXZa2MZJdF>oxg*>lfR3sBBd87QdH& zkj+}^%!c()>a{~%rPZ7HhiD?D^Oy#&@lkw&-^V`yLy_Y^fcL)0KL+mhfbt5s+fjcZ zcpAOJ8PI9|DgF>Tr<_nuDx6au|L;}{lWI%LiW2-~Bh8cbW}HmiXZh#CXa3Fn^Hj=k zMFG3>MgAqH+yRsjv^I4b33j&4{1FQGx332iQMW2uhT+{QxAPkY9T+lq_nA_BL1k@q zAvAYI?$i9sV6U&BbNmVZDY_jp30nDa@VnYw1~GZMTj7+m$_XaVDgHFn{ouWu`BUDq zg+EIp)$7U|%JQI=A}cK!d?PE#KRM#h@$W-{%)iaQ!@tYFr@W<{Q{GnI*~)*wf5@Nb zKT_URK2knWK7|?DK=)*I_&p}Sw75k5*H{+U+5AE6ihKide|GVOk1u!_H*Mv=;s2!R=nv)NO^-7vN6Jn&Wzw zULVB8wL;IJdwL1k%8$xVG*i$4uCKCSCE@s|)qBqfeT9BP9%m5xqjSPQVGy(})s>Ys z%;0FzF&K0YJwdU%qO{h-DAOG+Xdu`-jw+Uf>b*q}0_XXKApE*8L>LMrh6(vX0g&l0 zjD+Keqqu_6aOSkEsM=jIvdRTNYsM8)s{3iqJu# z3)4aPkWzm3bP@O2m_U0l;vuy5#|XB8-4n7SkO*a@cL{P2o0Td zQu=o;XA~9)3)vj^U){1t$_&g~&6Dov^+-2!fxwX&jvm z)&A6~%F>D&kGlH`Qg4L03nWDdrQou@ zY{lpS3(bP~Q#Y*X1lG@@gU!Df`@Xxq-1n-g>I2^7$*UMtT2bnk1sD$c+Z%O#VeBE{ zaVWZlhlNLkeZqd>fbgjB7(vkl#Sj!rkewh0L7?rc?h_6QPY6#6PYH*F!@|=9H6Y7Y{j%-C>%tqto5EYdIpJ-BS`gHdpjHI6CMb@eHrs`Fh4+N_g%5-eh4Tcp zC8!-i?Fs5kP#1!_Qge`t+%>M!GMZ1khc;xp$6IO86j@h?gZaxIwQB21m$xgV3)eXI zf|^SwcnYDJ0`FAcnNSIzWS9;`jrtee(#g)t@mkgp?^|_5Spfbja0(=RD||;aevu&f zd5ORvAK10H1GaJVa@pWY_)++2BSD?ipo(r1e%Vat!wmDcAk04mD02d;1k7V0_yq}T zfhyJzl&}dyw)M}5rq_C#AV&>G^;@ZlpvINyX62PX_jaLAG^ArAC<6Tu%30~90 zRvblHwh@%P2}5K^p^9qa>l}TC>}&j(Ua$l50EW1csw_W)uZH<8bT(WM+#H*6OE!h^ zd;Uy0h>p?-N+c*9TF~_q9(g%eqbeQ8;Wn(<^4}FocMEQd+tDOOTe1eP3g654 zB<+AZQAs-zl(`9m5qAq-oJ6)bSx$La*v0X&^cS=Eke)2BVsd4?`WYS{3n@5*>#zl< z;xwF2P>SX0Ot=erj~?0!_OE;ww5*3PGOr*ndtmQ;fT0+wf#aTN$tDaT{yMr{0%Z)&Rj0UN zTA@_fUGa(04-bI(BhJJ93CboYcQYP{2NBeVpz*;v&1X8zamob|(kY#D4RTl1#?LIB z6c9r3C`PHbQ!b7WC4UH|**(6D{+SR&ogKu(WAXKHLIRJ&%3p{ygtOrxASeFZ^-l;vZ4jj8SG8PIiFLAuW-s&Or~2@kFzXb3?=H{cnMxg z&~SoA5HymYQCsnHd=p-QZzgCoL1PFSOVBu_{n)XUmF0b0h4f@w4s;*x>Y=od1Quz{ z;Vv3pSv8QxU+cq_G|d+|oR32(+*2%139M1sJet|!Q~4R6ES!H%}z z9Ry7xsEFE;i=fi~b9VF)RmQ^v6^6B=0~kuy&G=FL7(w7MlQ-jo_z8lF2`XuX9X*Yo z3D)-W_=VsXj^J0Q9UaBT@NxVyK~o5tN>CX=?kG8 zYe&gmJ33dVI-ecAhhZ!gSd^R>AK^Oel~3Z2@W=QQ{3*VGKf|BnFYuT6EBrP727ik$ z;_vV!{5`&mf51QDpYYH8Ec`3}4gZd>;6L!6A}1n|7X=ZEq9}iR$^;0PHZE#72ApJ#SUUev6I+Y z>>_p*NA zqFbCS7Kf` zalW`fTqrIQ7mG{8rQ$MixpeO zyj#3SyjR>PZW1?(Tg0v6HgUUnpLoBxL)u{-O3q)?j>jwK@cpq z5p*9x5F2(8w40#41U*F1BLwXy=uv_mCkUMADS{3Y^bA4I5%dBmjr!H(6el30@ek)!SzY{Ns z-;0;UAH*NUpTwWVU&LR<-^Aa=E8-vGpAsh_iI)TkOQIx68c8eZB)w#ijFL$*OBP9% ztddQNlA@&;DOR#e4ylQBmDE(aT52XWms&_IrB+gFDNbr5wUydQ?WGPL=w% z{iOlYKxvRPSQ;V?m4-?AQh_vF8X=98MoFWkG16FRoHSmVAWf8<()E%{nj{rUMUq>Z zEEP*7QmHgWnktn^L>NniiA0!0gvmrG zB| zM}(IMOelmCL^w@^HwcUbg!hT?5fMHm!WTsNnh4(!;Rho8LWJLm@F&3nfle122(}O$ zMX;UVrUbVjIF8`<1Uf97KyV6yP6u}*xCg=61otL5kKlm>4<)#O;86sRBX}agE`r?z zmk>OaK#7T~37$^y4FumvFd=vmfyxfAAb2IgYYD!M;JXOkNbnYdw-cy`@NR-1B6vT6 zq5(fi@Y4i8Pw)|fj}v@?;8O&@PVhN`-zE4%f`ufUMC?Vx-bBnJ;vgapBjRu( zjw0eXB07m!NW@|yP9xh`5(PdJqo~@o^$PMZ{-__yQ4+67dxxzDC3|M0|sYZxiu-B7Q=|&x!ao5x*ni z4@CThh*yY&h$Iq8MQqXxcXi*R7DB$(!QMiVwt zBBIYhmDA~NDQo6f2RJL3;4VgRK79W7pAfR{;9D@+2N_w|&YASjksa=;E_T-h6W-4V zFLuh~{$0YMevwyERSP>MzJV}3g&Jr^2N}hs|9~067D@ORbC}VD4gQEnHhOfS06x^C z?y?5!_IXBiMTCr(Q7Um4)xu{Z2e~R>tQrywjxvI`G-B8mx|nr`iGyOntBlf0IJX=r zvk7pG5Q{m@h^>aBq>&;rF;vty3NoDIzeKgH3kzND&>}2h)3((Odsd9TyIC zx$}(HZH-70^-^r#feDamt4n7Fi*$hgyOQ`8dD=O zA+|f^e4h}F{VWH3iVk-ETxCHkqtP=$_y6+-Q6AuM8Ve)4(hzZEA%vPRLVFs~8`KMrV1gCF8Aj8bk%5z^kNDL0U$t={P7hXwvGE+gjl;*x z)%GLU{^FP<4?AU-Pm=#%L;tHN$c$oGEqv54m~IC~cV8otO9)+BQ>h0eLaJ0vS4QeU zBulBVRiY-DQF<(L%A`W&yV=nSZ?vUdR(yGoH)k-q2P58h2PSFFHH^xWPWdUHsr(-> zdN^xe>niI#c`}>_s+Slwy_iggB3O6~hX4X!fzV*rr0K(GKHUh@4=r~5#YRXt9Kc9D z8%e`(xh72t_T{0B%JY#s0PmkB1Qawu7C(ZKd@+)OK@FT5EZA5^iT7AQ1Rqs z6pux)b@A05VT-jQM(^cDB<6bgvX*^yOt30T8KGArC>YBvUUv%(`W1}c$q06}bxRjY z%)^MCYQ$-yP>&9q$!0P-XPojNUj%MsvQ|Hs6XaQQ8I9K?X!9WnEL3~*8O1jv7=!!4 z=LBcKsYJD5&#r~wA3R>sEMYXyMX(`iu+&+>XuacHFRfv-_0Qk$`VRWP!n z{-L^C#pHP}lCc-2{K>%qV?Cqt!9O%cRp)$RL*ku`@cBlB#0D$Vpjf|=5&F0hHdrtA zPOGI|W(AxB3)bc~M(fjv_j}%N;0mcbb~19GHKODW(P2O#5TwMtjM5kXw>mNZ_md}%5#j?rAF9ZU@~rayHj(7 zQMw$#ng))~SJSWQ8&&P93f&;oyu#@H*oep!DA{o6E&Yu{kW+a-!tiqhI}~3P8k+py zU^4yclt=lJO6F)FQl2bn7v%vpqc{Tv@ zx4SG{X;wF{&Km;bzJ$r8)$SSa|Af3DeMaTx3=Fr`ulbdUr;VgZsGV|eIJrq)tXdl-Z0?jBSK)A%^MOwThqO zsjLXtQ_;3&q#TXddk9Ts`S9WIki?>G&&XW$5A7HQOgRF>q_ztqdvzn?NQffY=3B6V zBrz(@BUlcoMKC)i6spQ}My+K8JuT>1QYgLdj9%*q<}{z}2dl9sBh$ zwbk@%?859&)n&CpkEgt_vSM;+aj-PKnKbPhF(3*ty>L-DXiG)gpV90PL1*^bV31c0 zVPrZrqA?1M8Sqi3%IaD0MM9N@!D<}NXmx4Cm_CqJkfr+$;DtorF^pt<1huGEiXmhs zGBSyc2#JA`sn!whcwq?HLPj<@g5jgL`fZO5XtRXTOKn8<3>7o9FbI*boKZ}V;QGP$ zE|iB%r?l0KOlAZ}AHE52nBlK>1|!$45snZNPlAe7wuZsJH;0kDrV-h*-mFiZnFdzj zTEeLGXhbv#5sbP*_!P64(drq&HDku;J=z*#i8nEF*%2hy7aAsbw8XSpc!ER7Np|f@ zMlLs!>jhm?@F^qhI!2{W1OrIuiQS-Va|ff>FLE<=Y9ArnJK?JEdl}*WjVSBF7^b>M zR{uDJb}OSc&?z7IpQwKR{)P+v&cNWED(wy?%-{&xNXUW(N2)!H-p~lng_&Q6nR#m; zVZ`#C@}d7@D@DI4(f_@!!5Vyw2{pVC=_NExvyomF>@;6c+I*Rj86UYBLBMWRa9i;jBQ>!Rfv}$5 z0uJJatkUa@+Vv5n=FQQdRygAnyjpKFYLlGuWS=uPc9hSksmBKkV8#w#hB1sjw*h{K zw$>jo;zbeK^%)L%tq*)fEp>5Eu$Z4PN|Phl#D^W`YrkNGN+P&=K|NcrSl=>gQySrG zp_Uo05WdXFlr^G1zp&(c^kKiFd-`U2%qDYs>=q!w&t@=&@ zv`tQgZxjyx7_Bai(OVqJau&XyGw7p_A@0$QkzCq{I2O__`Uf=i4m|3vW5kw6ZfF9g z@6%}TL492=qqU+Dxu_w*XvGrNUh){tTN)8-LKA!a?O5GlMrCE>B%=bcIyxZT1s+w^ z6)>8so${0a!Kl;lC(ZtTpHEB6a0gU$qnSu+BRJ;r8bw%g6BxPmky|ytqXjuZz&5FF z5~F!rp^y^cRz_!M1Z!Jg_6(u4 zmQi}35&5%Tt*&kb1kRvzw=*hx{#R_^@8`05--n>Phsp9_BL+c#<+Su`+JmacpqRLY z5r4Q51BTG>-9n7W4l4?Ojc2 z(X0d*-Kt*>5FBwHWy~FH#23PZF1RlV27Y`fWDTBVRG(}_R0yTYKJpc0TF)>lhazaq zq2FW@BG-$I;?qv~;s1$T1c~r(e6qdwbod^LV6!;R1bH@s)6?L?89@tml2LoU5lv*M zIn;dC|~_`6Z<(M{_6kAQN6$CZ~+@!L8kHzljdY2ysloc#J-*=)l=gtoEq%o-!p2b zB3J|#z}^x(7AE9`lI~|l=}aRig|W*pXQ6ag7^T-ESU~%Rwt*|9=NX+hBN(v)Pud32 z(lA=*{#R`L?-#f1QG!8Mr#CWb-ie$o1b93+N+i3gO{8VNWRc@qKxeCn3jGJ*l#S-V**& z-&acYfe~Nu&au8Fll$WcZbYbGeixiW^=%oMPa`5bDGTeHOt+ACwk)QupzO3T!*?hxcV-%C;*9ewVZ1*crlT|_j7r_H9z9CD{PD6-Rr!um9Bif13KoW4IEMx~? zU&W~5M&z@QHKa>N3xWE_$n>?0nBY2AsaMfgDnh>+SU-~s`~{`@WlRQhBtwkv8^VH=bqgaTJLMJsL1hIxglCo~ z!AZBY;Ma7QlRnxKq9A)RoPL#lJv>rMzgoXWzgEAF2sR=_5h0ogFxc^gZuSzg543 zK9hVAznEXbFIApW4k?F~r?={N>UV(pVu2$O9M>`g6dhq1C<7Q_hCjneW zQpVgdvy)QOGXfzW(LWXz@^Sq^fP_bqG$%p}3fWSH+>ms5%=AB1{<1PN=8m47nv@v` z_pJV<2337Te-t3$$tJCd5Jw@~sE{Of^Yd#KtB~-#HVT=Z9tioG{`IgNzM+2;;LZ`D z9TD17xDJfNWaEt2Cykp8>g&=nDM>}lOwI~K{6PN+W%5J)dHqNFkBQKU2%U-0g$P}@ z>Oa+A093Gtcp@ZF)c>+Ql-=0v(KgH;5;OdUa7q6YmEe2*W&IEOABm7egk&P55FvG| z{%8F!OoB8br2qFNSaG-c`@9aS1Sv^=Q#N3Ot|3D)=nV!YK_(Hhyb`FsvHQgSET)U3 zbe}E^HiNyP)igK^O&C&lB3u)IG__=RmX#qTC;O3F8rn99)XvbJA@v}_bpc4l<125v zYYcVMq{J-$0vX~BDGiF3YDi;Hy$C#5o|zaG?~5V%uQJz4POd|`#?Y%lrm_t=3@Mig zy#tUc?tiT8Hm{;m{NnXD3;`s=0K-7TAOk$Qs4o%v5h0HV{kIy18isLkh5{lCAn@>X z;As$j$lrf046eKQ{L+`(suHASrbA3fOAib)h6#pAAWFSJXecxkff(=*rXfTaO2rt) zVnY0UJSj~=>#j59GwxCnDR;@q z0rAB!+n|JnBZm0^2akdpMTF55ZVclt@q!`y8)ic(iJ1_jQxYKpreyh7Zn@#suz)KK zs{n8f5ylZ=JO!M<0K5L&qW=yrAjmsrc2+VNC_FjVn-LAS8}11Uc&}k20B$CNlL*&S zK$lm4^PZW~kLfR!M*XzZ)IfpnH|z$uumRPu$FLV5A0k2_5sE0JTZNoA`R4^LejF?; zs4giTatY+7^q|~ic+~J@gRoB-4l&a&CPE2?g*Z)}s8~oeRjQ&VCk6=og5elIg}43V zhL?fESBWr%2vaFknF_V;WRJaP_NYQ~rPEYb7h1nF z{Mew{elq+FkiQZEjCwkSoWayKY2}^o9P);-bc&fwQ)ZISV2qqmY)F4b$*AGtjPQiJ zSwy&jV$N1E*S@*w?&Z^&m!zdpqe%?(5~IZ!9ZqUvj4>AA97LE)gc~W`JSKH=-_xJ< zoiIB+GbNLHM|wv3Tqtc46X{=>{vd8_Zj1{H+s4=yVA~Uc5Me%rUEoz_+x+I&G1E>@ z1|v*M2f!hzN@*<`S*C1 z!fJ}UM#Wus%j!N?ri1W_wEoIWNvDpTmJ;YX#!_Piz#69*ry9$Q0`sFKx?fXsj08jq z8v>2;iTK5?t z%x^Q^54;V6A_7W?`_w7|N(d+<`foGtF+!|2K4g5D2=^0V2Zi2Agk4JeF*(rA_o*x^ zf~T7sP#4tI_^2}4Dc?I=-xB^)*z#KXt7QlEFZG|^AMAbKD`jw9YftG7Zf8yF?m^d9 z(|70^(IrZp8}hCP-c72zVXk^>NA?1{Q!U>hhs*XqgtH!)! z_1+PyA7jE~q@>Lq3n@2ImECVMCyZyP9f#{IjAxCngEVgvVLuTLP-z}j?PfW5+k{2_r}YB2TjpaL^wq84m0ac$vt)KJ=MBXQfWz<5>&$&e>b6Ua3BURBx=0rX+R{?x7?-;9MspHN7zb@v}#^i7!xnVec@g)2?#8bn%e+5pT!(gsidj3RxmGPmwzlkEjdRHPI@ zfmxqD4p8-(0u+Rm7R68Nh+=GK(#5YdASvaWkK?KVB!AkrhIeZbrSB78%HZz%|&hz##dr3>BjiDM8>b&_$6OHZRz4=)a#C8+J_De+go?>2BF-hy6;2YW*W>zBg zxfI%L)(tF7$4w^zv|d^^y=FQEfMC%OyMCg8KdXT2i+1M}c43hw86p=rabj9v!EZWe zf=ADXkFKTKtfO#x6>dYypv*y&Rk&2OuSrb}ti#Q5<_-;V*wNexAiEH3B-lhD&5XmIt&ZP0 z5{k_9^h{ddXF~4}u`44z1J>CeyUfYvj0TZ2%~^olonV<@D@C@c$m_nld~#6S*x5AK zK_Z}OG&!giH}^942`hbHb3Xv=PjEEBF%&SCNuTu7?w)DPyi+o$%cQ0RMnv;a^9aBT zyYS|b=23t-hF}N5O(^D7D&~@1-{-GC3sEsSB^mh4%u1src5+rSNT2CX24<(Z2#~`% zquFhq49M`@>Z=KEMv20Q!82FR@hgOzrrknt+yyh}}5%uQk}!boWpcxga=V%}-q+n^#JG(QB0j}V+la1upK zRuR`ef6w6&%fZa4$!BHKCOM0ijsA3Fe%ySBvKg*wG#@rUtwtl9N^ly0`g$r)&mF&< z@Gf{A(o5!-!|Lx9^Q*wxNrE#7&ZMkmsjRJ^aO3g|V35fvnJ{()KTM%TZB{bWQ7LuC z^Sb%%24#N7{4M~$PcV2S9X#V}Rp2#i+nIjIQ`yT<#{%i;K@xvr{vs@&Uz)!HxNiu) zj^LgYt{3BT^0Q-B-O1J&h8Lq}L(B|R;AQhK4RZLa`8TG(9D;M}6u3_0%H4YA-*m*{ z?IkU|MH7xQi`Js!;w3$7b ztd>{+4ZFY=yT!rygAg>Jj=y;oBV9#rvIU0h>SM2krA=7&+FIHHd*B^|2p&w?8^RP< z^hoaa#VSf_Y7!_eg=QK5+`|%Yq2v3oC6gu9lExStMsR)|W9zSKmHip3N|InI=VR;| zORunuWm|H9vEBp^CwK&9Y$VfL{B@fu+0F!Q(8kPGrw%Fp9AFt>2|MMn4720|9)OJ| zcnrlG>&08Mdemd8py?1{b60DAty%lCYp5Af0ib6w_4`sS#c36}-mboC_Jc1_?Tu8+$V(aMq zb7lDgX01u-RKDO*yk(JPIpBr2u$wF^7-y3SF0PYro+o9{``*o=x~k2x#&R1Vg*S=Y zEq5@aQi7+{A+4zybY&phhe^t+)6^!*cFI$@Ue0o#<$i`#MsRr@(u#ZMyc2bt={%#( z>i1gqh1J%6%K^~VV+2Z0i-vsjzUTEoT7kb%G(c&ZKa&7+j|Zl23gNiC;~A z8PHzR+(46TT_Uu+WBD*F=6TCUfcXi*vk9IA-4KC7~rp21q9Ac?=UTm-oA zi~61A5?czeIt3uT8D{PCCr=(3twN>*8165YKf*Hhr_6D2GEeY)f)`N67OIS`FDR*; z*+)f5hR#?0M^cKvFPF8l3E;xoh-{WEj4`Mqmeet};_ha*mds{Ib@OmJR&Lsmi1O8P zGhnU-!OIAy(`L-3&FkKKaqajgnO7wys!bc6M$~cFR_+u|Sh=&@1@PhtzL{V;YQ}8T zyuN7U15+MSIZIU!4J6Syoj*p(sd83WxNdTHfV-C9RRq%sGiDR!^&|J)95qRW%S@z2 zojSFygUgZog@wzL`vcrSf}vhoPvJIr&A83yC%<6a!JvS4s4z09gUgpkg@qd}j{&%G z1m8|D9aLi&RKvhX%;r1?enK3CqF848Uk-Y71wkZHLZ-g;NdP_ojjav#C>*Fi12Ja*uhPco)p zQsqOsL%uhxwl>O}KwDb~-bwH-s;vi@wmL2UIpt>+B@3bk6y|i}Grf+p9r7N)3+wRm zUim@5e3;-p1n;Go52~1JrgP$!3KcU2%#C8gf@ahy?lJi(sUFiVTG-)#3qyAFb2kyy9Vx zXLMoiV6iHH zEPoE5_4;P{3;9a`{F>mW2&MyA>>I!iy^xVYyF9wfo0Oq8I?3r&<~nElUjCWtGThFP z{EPf6;Qmf9sFO}&@pGy!$X$J_lVSYq-R*|`EU)xd-b!oNu#0ZhTA_ZmLjC#z z!7ozKmsHSoC$lpTf2=M#J28+#_d@C*tyWsO)|1_8w|cAAqXZuVIIqiX==9*Fk!(bl zmgrw$YYQu_TEjEe)(VxY6)M-438oWR%qFnwHr(~viV0qqgOL^VidnR%_LorBc&mE! zBwW{IO|^P!S7>?EIV>y2<`u7Uk1S`P>0skN#a&|!TfADctx&vLp?Ez_@EOY6SygEp zQaayt@Fk`+$UwAs1?z^PgAZ?jl@_nz>C8XNipA2G1vD$g^$XNHP&mV z&~Xbmj1P3Im6ot!O~!h?)my^8P4GK)%Q3%bW7Fp687OR3_@PRyVQW}xg%xU8>okJF zOWvovec+XMXll1s&?aW86Fye3CqexZXel$Sa~hO+uJuO1RR}&$@JAH)V-m2}RU2olBz0C^A>wVS-8Z?33);&yu?+CsWU;?pQ+Zi^iN}=0&K4aQ%J=h@96V@jg(q)2w2tcx5dv??; zFH+qiJ!d@le;B@?191Pq^~A6h>R3wXi$8I$r)B64+7t{+xj zva(q{eSK@a92VsV>yNF_u^pd+)t>u_7XZqGAKFpr}}4Nn&CWV@xsMe|AMM z;`6>=yT0ptp6hodf#tr>Iro{_nc3N0wMMOFIK8YYEvw2X!+mL93K!3rHooS)1E)09 z&dGGy@Wa}wt<=>Su*m(G+D2__s-LQytSVnnzlCvAm*$yY2Pt$esIIGS@Y#_Z)lTM- zD#$8z!AOfzGaVC?OxZdWTuV`Vsv9eHE9!+ubrW?{E+1`@Ra#kPx|W-NO|Npb!TB$j zab^5{Yp4U%%ByZg?ori&YF>F$x06){S!GmeR?$?msjtSh9%_C$lv^ZRl~Xr2XXVuG z!_HsbS*^VCR&>#NsCzPMZ&_7YR#_>dRxypbxYYU@&qkP1_3%>8?l~VUv~N|1sg+mX ziXL*Xnpfb|LuFMpS!JyZS=~IObgb&tCOyWvdnwN%F1%tvs4k`#!3#o-RTudJoO+C! z7vR+6WtFY0s-cWo(=_IiutT@(%bWYpbP57({j%N^z`Ngi&>Yakr>e^kl&>LrX<^inTXFEcldy{xLonEA*2FZWpl{b~xa z(4A-Mwd&8l`ljBj-a>TSWL14x)j)~P(OkfvRvk-tfAb?ZE3zgZosg*as1GW^6?OQb zKBP`C2j?uSTnYtOYu|bI2Ik-jUTst-s!tbLwiNXl0!x!sZn8?b!CB>D3T&xM;5XlP zVr88;O64XE<-FCyvGB=~`l4ES<*n$#T~lY8WAl<#4GYEg^!Aq%yPIPxxB**zTYZm_ zihRyg-&a2{kK`?@8W)T-QwpD^9%UZM{lhVb`l#zbM)}Sw+2?D@F4&ujbN-u9J3fP;P#YfGejpT-`QvQ(U9mtX<^5n$nsw!d6pORt3na7Rtcp3&4wi_|?vNw<%jUu6=Qm{?RKW8jZ&I zxwJJEHI*3BN>;U&Rm!DbRiG)>Nl)dkCdZo7=9Gjn-IZ5}KJ1n?HX6Inj#*n%hcVeG zf@D=YWz6=bG2?gq>05h;c}yqny5{NVqibRsCyo1O$Mn#6nwO`etO{n#{B7-7t&YQN z%nM!cs=lVF#*dLc*$Zg=H38;PI?Jk%f>D-qEF0HskZBZGUL46^inf}Lj8gPc1Zz5x zV~DKkDyx)hz$)`K;Dv*B2A4Ww8p*|3xz^h&v4b8t>)WTkprKvZ3vlwF zV_23;Vl2Fa=jWzfNUTk8P0sen~SL=9{D%C<=8_hg;U`zk2~9F%7J0CuIju=y+*DaLLRO7b#x>vVJUP5#qbU!}8@+O{%>kavN7wu` z7c^Hs+ZIC;VDDIQwH1BR3*`A=8dY$qBZq?c)!c!#RzuoA6>)I z7S}4z7DeW$Ev@C*g6meQ>9T4@p~!~q+HcXw6d8vT`8zwUT5I^+GH8w3isq4K$*S1} zBP~juT<%`y_tCk1cnZ^6YnAu*6uIBj*3#OUhx%GpneLD_Ulmyx>t{GO*&Gx%YQ5hB zYwK&3>nop>OY5rT+KSdgR?U-D^ObTfFqLa*y&5OFnNJTrxPy$NIptb9cMar^*I4WO z*~pq}{TP#H)vu`=cobFUeO?4No-xnt0@W8;oNp0|`c8$LW2Y6G<$7`4dFLfcUr z%&0uwER$8sl~GriMwK%<`TeztyHI!~jSyXwSND{IV^_Dr2i@8p+P+2RAFA!gsO*4O z$*R@LsB6sa5*E0$yQQg$=3{s_$HM1(+QHhWB8Q9C4rjPnS+!19tyhNIU@oUqSn2yQ z=Jj=TGTm9P+=*R~_!#X(#w+p|PdiB)&zO^C6{kYVWo*?J)0mT<4h(B@-V~yX=`Il$ z$HKc9?F{YL3|VyVe50Mqkn?2~2g=)(A$ORwZk_qI#1eLfo*bb#neP+&_-IADRJ-c4 zfv(oBVN^2TC98HTqwX<{D(khG+sm4h_i!}5q;9%2&Gg|2Mter9To@^O_i$dz#Svxqa70!eEfnFvre95)Vb0r=C!hRH=bHA$ zXXCr6y+wREvg)|3I-$guXo_#~+aJ{PE}7Qa%S+jLc_`aZLHj(=n%)~))Qhv)Z?#Vu z^0}-^l2xaaA(Kr*&N;kpU%Bz7A-Of2TVs^_ls~+Lq5V;-Tp}sDdtPg~Orqs7Ns6pG zql}np4zkqBHzA!&Bf6Vz+vVO<_8A3xvv)e>B1w^B>Wb^QNTTB+$yr%-P8l=ZyfCeE z!`Aql#&k8^mguY;=yE^d`(oXfS_MQ%7cjgBiNIBw}Pu1x)!=XM*8GgLDyCnM3(Jk)h$_dTgfuVyc!+*_CK|V zeJ%H6aEQdk66M`YPOeVMeZd9K^12XRk0OWdsq4kCePq>LS(U2{YremDNoPa%p&kt6 zq716sjL%7uvJ3jq;JR?#5DrUq0|<3G?<1cfs~+%1@>9H(JbAM&Qa6-gqjb@-Do<8D zR0e(|tGFut$s0IyBRDv%U{Uga{^*pi2@Z=;zRKME28{eePxEmpZv-T8m;A%a{9pe2 zxU}9!@BUC8WsW2N@ya_zc)xyJ_)tDvG`6UTJe=rMC)fXKqN3j_!U=Nz9~OSANUt$} z&Rt3IO>g^hHl1pDess69ZmjOJ=P9p^AQjt)qTS@okb=1=C14*GW2!mT~WxjHNRDy~c_uT8mmC@)TZ*!SzU z>XZxhpKc|)bzG#^@wD`_tolV6(|j-WQkRZj?(1RN);vx3x4A3V6br&UtUFQUaEZE; z40lRa{U)oFJE>K_n?nri?rPoFyjwNBqvYeGeqEaGLXpE=)MYRnyQx29m2wZY>M!$f zAzk~b%@<-_Owl>A(T&}F*(E1;SlZ0uwrA{aJ_f6+gjF)mR z8pjOEji9_YpzzU+?vd_Ukz+pBy?YJ z<->ER?q}T_Ml5<4_`B{cqy8yNk}N6L+oku{+hbzpAMQh>E>3hJ=fS2|+CP35s@_5` zDdQIPM5-^LFKODfN~L9~4CB7vOV3$5WlZ4vJIl!a{S%YEyk7gc2=zL>-aJxSSt?gB z(xk}aPimSko)mg@M_)y6Q&jczw)z^vR$oh&EM=*JlBfCR=_S49)Ze5wSC39+Ie2Za z@UgJIp5BQ8i`-81&UzOHb(1BnEGZY=CG!o`3nTLE^2}F0D6 z?2yg$z6|LnOGa6$s0>-j)H#b%lRX?No8xpby^XzAfiN3YI-DfMAUND=zGdiHCeKjrRuU|vq|4u-^V7yM?Hc-MJtrL;e@gU%T|qIXuU&qpxVfFY3eG9@ zqxBO$Th@vCN#>F2$Wq;cktPjz+Pl_4Q&7A?_QSqH|CPSTmvr@W^t`021XNF!914b6 zT0d}rcmB;81utLf7wMN1(I@*?{R;g`^Dqr$$+2LVCB4>*U*DQbvc$E@K9&w$mGNBKGhlfCIDd|2 zqGI?y>X8wA4eCcfY#tdJ%cuX;F5>a^W1~jI^bZeIKBy=*Ix-?|WJLI=K9=@HJhYGb zXTBpMBE#Ab3XKhqHBZ^cvR)C7&i`nk{EsdQjOrh%9BmOtQ4i0L+x*qt=7HabZTM(( z<(r($zs|4WRXz82uIFQSep;{3k|iJI!ewbuMt?(uZqVP<-;$+fvg8+EEC2C#^!J2% zg9sDh@zvt3H|X!{AIK67)I8p{k7f0OdIT%wP(BK?6~}L_!Z?D97!VO2W9t*{Bb5K; zkM~6XtnheZp#DWXdm{gMTU(zQgFbrbOZ{t6dyD=@{ZIN=`k(c`=zo=^7P8b*mRiYD zYguX|OMzSTzv}Wnn&pO!D@v-?+>I~dMRXB!Q|i2A*iT z#Lv2Ju(8OpxFpILYz;LGH4U}8#fC?+4btDT)LoXk$x>HY3jM#j3sLUztlv@k=TUwl zbq)1J?TrR|Lp_6oEcK8jo)>#h#nEUiDYV1>5V z_Z#3Rjbkp0r&1R7T7BbZlID{M6Q8k!4M=|4ZL zkEO;hq|?9uxR2%MBFqmcz`%jWHbVZm2FTJNSsE-$k+Q_% zMaxpmHbZ+u2SZ0gu%VNovmwOLMV8`ZX`C!glBFrKG+mZv$LcMk~8!hsdab4I4D@Yv$R^%gxoz!Ox{xa|c(C05=COC%0w}{w}_L+@=-a>FnoN z=o!dh{zy(~;3oq)`+9hCCgbP8mgnW*>fg-M!K;~@pM!IAcRw!=|7IRe{!WDlGJoWz z6!FPGPLBS~Tz&nV9bB7vGLSQ)HRF|62Tw0Y=jQ$ad>Br1=fVS-KSWa+^2tDcuFj6m zj-DP40Un-?4z7Nl{tnID+?^a8Iau>|^>gy~^!F`1koog5rJ3-)|{9qinA*N zc{F$Mba8WZ2yk`|@O5=^Y3}apQg|TqXJ1NDpA6*W>EzWcz%9Tbz~95)!8O3Q88ve8 zb>Je2a{%u=Z07FaS$H7x2UJSKKN%>%(b2`<+1JUz!`0nSsgb9HFYmghP>%k5^b5sr z_R*@DKNnJ>hyS(wzMhWUUfbMP$;yR_yEr;{d3d=ykeHi?Uw~_Xlap_LqfRzV<+;p2 zmyK9&m?ldjmEC>C&pwx$x4@ao7D!8uil3Fu$690=zP7kz_{K2TB1haa^fWB&V`&*a zIy!V%Sf`lKVX^&VBBJBEMGOlIAFX@?y)03IlCl&oOQW+4iw#Q{p<}VbhNXQhD+C3b zzP?6zSYY_DfpLQvsnE|tLL*1;XJayjvXw74tmskbmm3T#MQq_8m>;#;z*o)bTlx71 zMh*P;cD&KB*04_534G@FMQ{E2rQ2ZO9+LdhZI-3+`A;I-l=5tsr3poqC)BVnzXAhg zY2t?pShP1RCAIv)4;c;@41PqG;`0YTt_*%cmgJ%aA7DtyA3Q>qCKn9e@uR`d8n_aj zANhG%nwmd&hBEjiS(;YV;8_Kce?{buFHP|GhE%p^c)hWTEG>z*?M0_6hgIe;f#{llCh$Hxqm8ki zP;WQd8fzG98fzKtjJ1t*jCGCnvb0Q=mdnx#Sz0Met7K`lEUl5HwX(EsyU{_^5?r!2 zIvJgfE=E_uIpX?wPQ#UxpbfILQIwr@1HF$P*t$sMwk9zRyuxjM2!%{X!!84)+8V|a8_Oq_C@$oIE! zEEhat=ui$N&5IWtKG1X(mqX)E{-j;>`%@cb&-L+Wog(5Q!%h8f3>KlAjh&30jUmP^ zMvf0TdF3SZuq+*yrBffyPmDc`+(^FB*wfg{*jtu%$c>X_-PE&j5CWGW0rBYagHpp>rRxVlZ?^yC-WHZbICN$7iEkK zj0?L21=r`3G(y`|C^onsr-ZR_j*izYihWUBB{lNyT4Q8*Of0R^wFX}w&h`-7twyM_ zZSdnxHR7V8)xzSdb-PQHEN@w?m_Iwab=NiLCL`G(nDqZHwvgNu41-~z7jsD76 zde5NXW^r*b5&dZP*!W`cU&enC5)jI1OITI~b!m;hq7u%K@G-I7`RDs7H)wV7#p6{Q z490jVzEpgfkf7jzs9|wDvUyZwRLu1%RjZY@u5M$?&x85YDyAF|5E(i!mj71vO}0L@ z%$ZjxYZ+f6o{#FbuHP~|awMBT|IncD5#fH}u|rx7W8)hT+CSXEmygfNtYufbPIq&} z!x*Bg`Cr48A(g2&)UL}c?MxNPs^?I;egntOLBSnc_>!I}rr>CX3UIP^w00Dh7V)JS z(AgzF;0?}o`ENIO9_$xkI;mnK+~B7C(9?^(O`#HnnTxlfVcjBs&RJhjFz1`$VWu4x zi*l`TlTI;FQE~AWqNJ!GxWP|22xs9T{6!nlQS=b~IG7nOV#NqCUQ7|Q#S*bxtQ4!o zIksy*pnz$^o#XXTH9*HLwB`wNY7%i$>)V8pRWQ+CVB7iDhbM@xlLY30B2x0K~ZK1yK=JB^jbRmR@NHAbE**mWe!64#XW$Px!4 zXSNvE7kg;jXxvonVX=p@lp6m;meOSDT>KOM&;G>bKX3S*_*m=z@v@pJ4Jp{z9{Gp}T`$VAndM&`GM+Fhw{aO0jVFys##6F% zQI+s}nJW|?!i`hV^+iSlI$pZ`)B<1O=qeA!#b|LXeu`@10i^|c}9 zqgLY`qjHJSc-KgeT$iQn4aWOME;8PbrJM1#okvB4#SID>6do~fP@JvLO!GEx>oYCh z^l$lF^i$&tWsGOW=dyHLmU1>2zcYR>OLt`H?&rt&s`f`?{9^p=Uva!K{w_=RWa++g zb@Id1|N67PD~gZ*tfEE5VzQJcOAkN(vt-k3rfsQW2@$%Z*ceq~)p}JsRaaG2Rg|h` zMN5@`{B^llO}W?)aDUQ1%Fpn@7T;R;{)fw3#}!e9(V6o|P3V^kQ4Szw$B%di5}s=^xV z#6BFrAyB6Z)Tsh>s&ERIKs_qt;RSxdJNlN~c|VmdyUnLQBqCa@LZwmYlVRLEW|I za20p)953+`e#RTT#h>_F2wiCyPzhG3hU&0|Bb?w2)<@?C)=3$rV4ZZ?c!BRh{5s;-5x?$N{D$B02mZo4 zA@myPKrZ@A%&SiWYiFnmH+04@EXD?G25}m8fX5q% z(?Fja5^)mL+>n86Jj7#si)VNRYHgs_#$qS~;xg8N0~(?+n!*?KiIF}rwgvSyQdc9f z7)O9w8fDOT#%Z7rjE6uhMta?N9#25cDwYKER3!h3tYgJSp!X_vKrqO$Vi(Z!6^9@i z<1iIpVFu=d^{PlOR$Ps>*aq^hcm_8?zLiu^qb8_tCF)zr9^_Yv?Vu7pRLKQy@IY$> zA_(o#5uFf%u3&8{^#u7>V!NwEER|MaAER5Rc#$r6EXXWYm2J^5036CSVd+Z>uSo1LCwI zPAlTHB2Fvfv?4yMLpX*sTt*g%$BH^x-4>!sF_Z)AQ>7t-z?@a$KnSZ( z2J}g_dZ-V2v|1DRpgH`}0?b#f3%a2PdV#uCi^OomVg$y5b*)BD)#5>1)mDMLs_nr( z5KlGMuNw8Lb^@$nwTrlpJba61c!3}B3cujB5Y{D80aalO>S=8U;+kUrKjCNmir<8&UJ7MU7UjWQ)it2@)eWeK%BTY7s@@9JrTQ?8 z0qaqn{HoKF)tR^YJ&;rNM_~Ty%wL`PZPZ{5Y^c9Y4UmIP9k3QQjBC>v^r}q&TB0>N zAQ+v&oHne5%`~h=0+MhVtg}rTGQr$7%x&`oPw^bz;RjG#n|Fe9d(fY@#UX(j+m^N0 zgZ{0t9f`Pw9NY!9tnmO3g{Vm%*JKT9QoEY9P#bkYAJp^$wW~?ZY6c<*?a>iEK#$g( zgf-X+wzZmju^$JKj1-VlO>(Mv1f)%R58}wA|@mLJzt-TiO!8+GwzS_)J z`!J5;I4*;=txaueQ=8h4@B~ls6JFyD-hz76p||RkMR`;JanvD>I>b?jIO^0yeKdj( zeBlRbR)?C^X^VCs&N}@Ng=h>%EaEW*(=Y?GFbC^EPt_rhI{R<{tW%xSV2$gfgWA=( zf@{bEb*#fW)_Df-ktqj(>t{do!x?z}v$(Rb(v+hi= zhIMy>`RgVj53E()AMrDor!Muf{}SavjqEkh!2oO6p$_cffCgag?3;j^*;6z7cIbd$ zbOyDuCnoy=7zFBNKM~Z+o*3?niCu-$X z8%}VBE1JO%DXaI6> za|L6#?F5f^I|lm9?G)%MH~!Y`Dzb0`w?J>Xk%!v@{3V2YRrCb)b*E?D7l8G1UxpQ+ zuI>kL1jlg_jP1_Y?&%;dck1E(rw|?`Q3|E;C8&i*B~(Tg)P)P&;RSCrMN70n5ITT$ z@dyFE=E2%~Ob4~`AO??ATmpG{ke5d`9)dOYAP$dj!FqVS6T;I1#Zdypr!Bdfe+b5JN-i+)xMdYDiuUsdGc> z+|VAx(Xc)m3DM{t^6(f>@dD)1=qFIGMvT|!E$E3xjO$Hq-sI-ZntHR{c$Y&3Xkh^B z>djo<)X>`oH9-x%nb(^+y`4aRdV8QD8p8+F#XA745Qui5KHiWaAd@;2!eu7*Fv6 zKj0_)g5U5Kf8ie?niPWyB~b?DPyt#PPzhCF4O`Sg9n?buIKvH|XoMzc20yewYqaIE zHS;%R{-(^|l=+)7e^ci7VSXRx_hEh?=J#QKALjRAejn!dVSXRx_hEh?=2u=I_F;Y> z=J#QKALjRAejn!dVSXRx_hEh?=J#QKALjRAexLRTMhLp0C;Fft!Z8R#Fbu;Hhfx@d z35drOe1(~qgSl9M#aM=wScCQ0gss?t-PnhNIE-UR#3`g84e7Xu%eaQ?xQQI(;sGAv zTRg}2_z^$jHGapRcqc?N3lv8Qltx)tLIXW2!V1-3gPN!fd(?*$T;YL+Xbc}TM*vzO z5be+rozWFN&>Nu$!$1tiP(&jZBQXZ!F$t3~4Kpws-(Wr#VJTK%HP&GxwqQGUVJ{9K z0Y`BHNjQyEoWliN!c}D925#dn?&Bez;2FNdOT5Cbc!NLiw-CMpUqC`Be2MZeyx)s9T#wSc2ssmOx?&B$hy8 z2_%+4)-Z4);xQTgT_E)fq<(?aFYqO(U)v4Xi~V5!wya$cV+7G}L6u;IYG90@xtNcI zVD2FPKIokggfH3^g9_cjI<$+x5KxPD)VJMbTty~WoA$G@3@bog+piU(!xylG8d?~@ z-**^?377=p=s-_)c!H;R4)W>P9`tcX)}Ui3!ayz^S=WwfIEM>D1kb`!P`BWfSOaqC zM9!VcqCA+t6Y+N%iP0Df=I?X`tYxQrU@bebmYsb;0Xla;FhZ~mtYc@^u`}C2=R_ew zsAY&9>cAfLK`bG}5<)B?#1cX*A-@RGg?e_Oo?X};x|BeF&`(`r5QkBqmR(rSF87g# z$3k@Vgg;uK73i(5)VAw(?8I*D6QWx=R7Mq4gAJ%_x4B?_yRp9ASl@0h@hASqKSFdT zrtV3&h)bXz-C55bHQ)pnxPdr&ti}%P!XE4wq9@ySPYrZ1fSU9qr=F7_V+y_k`SfJ& zon&L?3eKL!b8P zg~5o#FboGh(&svE;1=!((bofh2msq`U*hPy4%D*mUXWMcLqdd>ff3{sYK3YT1M&%- z0oFS7Ydi+=g#H5Z3jJM(e%&wtgFsCEhT;@5a2c$1zbqm8lV^V?xWEmbV9fq2z&iJ* zfBLT%B8;5Em^*A7CLkWHQ`mh_+c5ez>{}ti$t%1Ag3%dWL9c`##!(!{Ng)PQg*_b5 z0M7UZE5SMsSc?sKE5twvB~cn>F$AMA7UMAq)OR2;419v8cp=1~#%PT|1cA5)QP)AI zaRzBf7b1fCM%aP1jv%Ip`k=lMtaZdvEC;oS_+5y>tn=U!D1|Q(ieZQbeK&Z75JSjk zh&P(R2hFh&Y$rnwfEb1x5h9X&BI()4il_`~5;+o6Fb&f&3(xTzm_PCl{4K=L_UMH^ zAcmn~I0t%dD76@R3-sDBdTkhMGAsZs(FWUb7)QZ+3_B@AlqIU58mfc7h@!4hbHKVp z&BH?cjDLiPw!jx)ZKAs(90L&ndL=p)*FcX&XM=c#(__P_$8cW|)9@Bxjfd0o!}sGL zh%1J*j?sbI#88_UD~tv;iJ>MjGeKN2ukcQAw;|XDV_BP6>JiKQv8+jKH27s)J$RuJ z8iN?(SkE}>5VsS%u}_E*rJ#oq^u!42G2$M+!w>ioLJb`ldtw|$f}WT-4&*oS9vRI1-VB(?ZDBa6kh%!4+R)1y+IB<@Ir3`Rr&A`)uZ(P2RKl zo7vQRPE!OT2+Thx82doZb54Od=cEepbz5`?<9^*6p*Vx9pr^mSj+;V!!`gh~4o@^h zW30qB?7%MU6=H4}h9efN%Ut?*F5}E4uDN-51p0Cwb)DA+%s;OksLwq9ejYWMM@{A> zgE;0_0=1aW{PXFJ`SmdutFQ*^uu+HwU!o!^qY9|yf*d@>b9@KtxR5?rNFOX@9Tw6D z3(0%o0Z@~L)MO!ZE<7v5A}cWGBIaD=07p#4d@RIb(3^{X!r%Buh{YBt4&q;Y5tncU zyOMcVGVe;}UCF$w+`*iym~&MNv}gNO)G?;E4rf>ShqE&z`Ctr-PW*fYgx0k%)QnV4bd1&u?bti{A+g#v5tDK zs{rb|P6s3S-MR!E!7(HXv7WfrPsdEm25Ywd8D4{RS^pM)39*5EHt;tasO5%}NETuv z<8HJ;4b%d$Z9IxJT*fs}w~aTEgGcxl&+#2zg8tf62F~!oAPfg_ZIVGeo5*j|a!}t* zt3fYqB9~3%xoHpf;ULIu6TP|V0+@GG9$w&kFxMt!uAlKI-U+eU0$)HvNl>rNm0$}; zc)=S@;S1J!a}YY96Iid!-OvMJpjS7K#1zZ{v2UJ-1y}@P-@FbRu^HsBnO@mU?3-EV z&FRR-JrMim$DlVhlf&j;@EhKO_%{>(7J38q{pdEKsv8%(aENw(!6$+rb)c zp+;L+qb(=EI&Miu3UYQ(I0j(|hG7&~qpcG#36n7uUt^;`=afmA%nHr&V1XM zZ~F#p0&{L>&h7hg2uE-XiAVyq+kO?d@h#YYZGQ!NWIOY1XTBW*UqC`hP`@2zLEUy# zLv6UB34GuSYPTZ*?a&dO(FNT>{dUj;JBWS97<`4fpk_N3Vll{L2YKwEZacPs9ClE* z9n@_Hb=#4Q3%H2~c!oVsX)K(s*D=2LtQw)5nk{{Q#1qd?+O5M@9GL_y=xeVdshtN zFcOnM&+eLr>6is_*+u<#k;AU7pl5cS1ohr^24}&xwks3apl5fH!!B~zbsyAz*U$J< zh}|Vo0a_SP2~|)Fbx;rW;RF|u!)|{Bp$Eb+0D~|Xkr)B`efKy_Ks?A{H{0Fr<=Bh^ zI053`eF~>R?7K5?1;oCa`tPRxyKjTu+5H_}3$dpd=Bq9yz zxQI)*3gX{$2hZ>`{t;qtNt6L`?=Gey^`zB)=W?()RVJTSKeayX&TJ57R_w57gyYDR0aRIFFzRO@;_vIiL_wf*q z@dJJnV!uFH7*QEjQ5|es`|Usu`^jNHIqYwU#_)kJ0?`>=K>i2F|G<~fgE}9mhX!Db z1B`KiF%C2X+vEZ2aDbX0V2lGnpf?W8134Waj|24P0s8R(u^xDZKk&B@2Z{IK7m!dM zYUp41x zIFBqmz;k>DdgIWKc!fXkx8R+rV0{x*ApQhPRD=zvbpmUfK->x5pwAPCJ)sp?-vnY$ z=m7dWfi*~A8%v<}3Di4*K2IR-gjtva>YhL!BrL}&ti^h;4hiIuuouUWifhQhUEBjX zBs>H;B)kOiC$I(yzu|Ww4qJe_AJ)Jcbzlz%ki%goki%hWf0+0W`@$de&|!M$a4!(| z;SrdKcudAre1*AKfW@HxhgX0c4sQl^KYRqlefSctg1R5Rf!iSN!%y%G^v+?{;P8(i z?jyu~q#O*WgeoBZBWzVepgIKvel@B*6i2KNKoJ2C{nIjpv0@mQjb&$uA`=E!8{EUBuI9d{AK!WO=N8br?jG7-SjJ#$P4BUpoD#D9$1 zAEVaCsP!>_v;;Lj7KAS74)Qog9>@A246MPiu^{GS^RWV}u?`zSk00BM14sbzA3Kgj zq=C4P-Na+iBgcsQ*em>k*C6)e#D1LEk4q>8*5Ej`KVAj3K&_8^qbZ2}II$lm_TwEu z?T-`t@owme-WZ4xh{xAhg5_9+wb+22pzg=1`|*P~jH5UWdgXXF9^yL?_i^GrPTa?d z`}kk@M~D-}K-?!vfVfYnVTGEYzfUwm6EuS#=#>-g5sVOYMGsK(69W*7NuZ}sEXFdd z#2T!}4(!H0Q1257px!6w@e}mPiA>zbGZ6QQmmua7zv6Ep5(U113MEk*8d!s#PV|5e zsBt3kCI)~yCsOA`>YPZO6RC4zPxJ5#VJo&{7pQw8 zaVHXYB5^0)0C6W$@5Cn{{zT$WB<{pF_yg2Dk(!^h0CArr?vs^K8%}Tq@tJjHW-57yu$IV2TFd02t|NFweed(;Q|jF2k|Ene-iO0%?I^QqW(#1LEK5ios?R0q%_rv_p$h9VlVAof#}Fd0)Z z9prF|+MlBKr-=C!F`qgJdi)fsfmK+8 zb=ZKN*aLD&CYR*HIEvFC{$%Q(`~c5EuO$Bn>Yn@>?}RvQ0s7`Nd7LJX(`CRqoF@L$ zb>RXx(D$dQ`{_pTLkp10X>vK;4js@P#DAJKI6VgAK>wd+9Zt)bg|9IWti$QWSPF7E zy#vI5IvMAY0qTA_6WO?jJUqs?AfMCU;aB`EL`rFBK>wsvgcYixHmH9Jy_4by@<}0| zlqMjDluqb{z99A#YM&B;7>vMZum&mQkwP9RGr(G;um&kxu^p^I%5LlhwNE*LB#=wW z8PHEDmvIvh@B@Cs@Aw0311ax>I8y@Tai%QFLk-sAOcm5Z19-z9#D1m~+Mq2$&<#D& z8=)YdGm#*NGgCm_&n(AEtj1cb2em&#{Ac#z01|Kn#DC^ISc5b7@eI`b%uBoiwLkN> z5UB!RK!uVZhg8-gl{HAM182Cx9iC{2<_G{eq>@8w5ZZ$rQu|>Dh&xrrR7}S#e2pa_ zkJMFQ9a705bt86x*i+etQ!j#=r(VN#Q2SJBpZW;&Pb#^jl1u6jU@g+fA*~ejpl{Nu z!xlAR2YM%s-bo{eG;&B|J4kB`a!6~3t_a64L?Z@q7zz3&Z8D~TJkrP`Z4MTL_|vxH z5KiJ0PU8#+Dvcb{$RUj!(r(~3?ttwejo8zE6XNU__!8w{2{p8+0&9@RS@Jkr8+Ab* zXX&G}{^*Dv=!HHAMSsvYXQMzKXUXI2D2xGloSltDpzddPfZjQ~4+n7=-TIh@m@8t9{Q?q~{M5c|27XoF7Z zg6^RI&ymMD@;Embv53b^5cfIy=iFS(#|o^*I&8pZuomaY<=iox!BtT6b9Zqc5Ag&q z@e1T|jx{*<7JmwnUL0j%Kn*y+5!5`L_|v^W{OQD>PWPh&i2@(}_8qnA3?leKUwTotV>)gF>bgb9xqTfY{TCJ^cxuf!e44fS>R)i21w< z)cm{^YQhfG`@B7f|2%P@C+_p!Xo6;FjzDw+{c=7UV?f;JCt)(Cfw<2T_xVLwg5_9= zP1u8@NW*1Z!*$$54jzGR_55=X_xYC~?(=VjxKIpbU_^D;g4iz*`vqdZ;0!l-q9GcC z-nl@{FLXd}3(Oj71KfQTv&ir*n)#d#3`hJ_%Eb`_%9Iu z1>(PO8+Sp!UwDdFcqhcg5-0^?zgQO3{USMBtc; zV(|PCF*tQ0;t!eD`4F( z(XW>tfq5?}^Zf;Cb(wiDGw)?;b-4nx(4!()^UF2h0DAOtbNHhLT7mjqrf!$1+hx}M za!(NFDP5c^ecG(|JCMlk5vs}YDq6o~)o2oV2O;=fA#SHHqc%m(XlmAJ3& zz(E`aHNTpOQ%J`}kjGW>xSEA*+`}^v^VN4kT%+FCilYRm`!x;7;TpYjjo!Id6|BQG z*5R59nxG9jfu6b69lb#O*NFcb@n0kUYr_$Tk(h)Tn2$Bs3gW)D8~Z@~*NFQXabHV8 zD$e0NsQyzPYM(_8SyreCXEZ_+G=m>nfcUe5LF`#w(F4>!YXGQw)_6?Abj$?3 zlJzx~U^!NST(Za|Ya@1np3gcBdL`>7a*&G$V7txw9zWt|5PufiY}Q*Lt`|cYQ1k26 zQ3H0U3%1wm?(l*)$m2SBTyKs*bOv?5J_N%+zg&;QD8yq5==bZ?|2jEbCx`3gaD5%< zo9l-`-LEHtzPV1{T)zl%xPA>3`1%dpLLR99bz;tzP#$XNKW`hez`&HH;DZPvEOh5 z^}f*toe+YqU|YS>6U2Xm_-_#ZjiHD}490=DZ_LLEtOl{)*oZCIivvi&5gZ4(+(-jC z+_;Iy_yP3GjaT>uuklWZo8)n`I9P+5rBDW1ScBMadcX(N`(^-Ifx6%94C22@uivEC zZ}tW2aFh6Nj=)6B#v)Mfo5X&T*l!a1&F$C)V!yc`hj19w|KVB&}8i81E5$i2tz10pKLCm*^^HzTh0QJ5_ytn9= zTh#m37*Oxqwx|bBG(!-&fL^;zzPHKub|3KfxB2_q{QYhI{&pm`= z2jqI2TyGyiGS1*E(s2=&a0BFi`vu+zkt6U0$Tf#tbH0QQMpQ->ScBYi>_N;q&Cwpj zn?rBq5Ni%=lS7Z?5NpnG#9<`JIftBc=&_uy!8+w^#1?GFF0f8HM{xp4Aod($&!NY1 zF5@QXu^f6VhqcO~$8zYgoY!Ez?yz2WSg$+eaEBc3lmY8?rz+S+?zo~cd_e4X0>Ikc zVa@JzMptwPb-zO{cc}Xva=0@Q(=iLgerFyQVinec+TYoPtss{>2f(&*=R7izja#^b zdw2@!euq5nkjI^$@hkoo;x4h@)xZkGeV3ZwrRH~QzyXeMfg4zZyA44ucj>>oA?S}t zL?H$vFd8zZf;{fd#2kEsrPv7SfA<(tK)vtMD|hLYyVU(Ib-zo4+|9*(Jj7!V|J^@@ z$R*}nV$LPzTw=~8=3HXVCFWdW&L!qtV$LPzTw=~8=3HXVCFb1D=!YQ~3gXVC=DD#L zk4cyeV$UV^Tw>2%fK}Lx1E61WlW-cTIESmq0)3uK?Q^MpF7fAn3u>PGyAbzOD2EE5 zPwp8|3AU((I-u9@)dxA;^MXHu&;wx@h`}KCd(oiJ?-BPs;=V`C?-BRCuP_(Ou?hQe z94A4K-#de|xPnY%gPPx?=J)R630~oy5cf-261<1h-uet$eBVmjty4Ypzjc4Hq7A`z#Mf>fNtc@Y17YJLAPi242> z_*;kv0$)Hvd8nZSHGe?OA6TI#sPzMP&>s)zj|c705%kG}t_VdK1|kBH7zW~h5RX|{ zignnCE!YnF`#}PZf_`~G?H?qA_#e>c53b`Lz60ChgEt`d2gII7?0Kc|C5Sz*0_c}K zJ*azL9Z>7Mrf7*aphxmLpc8tbFZzSJ=TY}OdL}Ox)H-iE7GX7rJCC^Yh&zwC^A3Qx z^N2g|IEXusy63Td=4IkOo`JaYUV@tE5q}U*rbOSYiNX!r8F%z@#HRfVIR)8EHlEcFd*o>{9XCBfo57R)* z4|DMV1o)6XdH5~J;o&d%4R7%$-U;!@0_5eif9n?;}IB*v6uqle!K)5L2o?X3u^tCT0cID(@4cRoJR&O<0fc`$1gySJfX%< zi0_GnQlLkk=s=uLDx(UlVFP=3f|&nDOLrSAWm$&-{5gwYi~?dLV3-32CMbjz#9N#& zP!K{Pkq`u7EE$zlk|F{W6b&;lMggS=5<*bPmqM{f(=Z`Z6jM|t2HAaf_ndt@d-nCf zZa>GE`EiCX_kI1Z`~RG;L}iXnX9hEoJ35E?+`^BzogcG^<=l^+qrXM3(I?o&Q^+5c zJ8HM1`*@jG(RozvsNB(Gq|kA+OqG+=f*^J}_9NDbE}Ts_WVZUScJ7&LQ zx(@@|q5IH&hi4#vcn%kE3B$RJamXA_WHP!B?Mou^=s#|6674vPp7cWYL?8MhdqVbv?1>=^V+7M!$^$&dUvPKgT|P!n32&W< zqOXLz65cxDtrHbaqOauXxI1|s{kVvW8N{WyEBP(Hjn0ze&{^_ouHzq3OQ49ru3VdikvAKQ?u}GrRK7VHEd!F zzh@ged6L~c!(LuThpG4ZkfR*KY$>y)^5`^WCsHS=2SHl5Y2BvnM!FAjrFD~bZ`yt7 z12`|Oqx2E%cRG%q(n*w)Hh0>2Y3F5}mvLUkc^MsKM)Fd$5yyidXP#USyj^ZISK+MOG`^3Sa^}g+wDiT@EoN&O!Y~%Fgr&Hn#T_kscny2l@=p#1f#(kLov@Sn zu5@EOvgdsddApYP9{FFh8C~S~5=FZ4HCKIt7JuaBiU=zMaCw48l7XhGS0)jf~-1 z+*j}x1@jcRqV-)iYBK99_$9$dm#xs
    Qzr2F==(g+| zDj!8(mCk$tomBdwi;4~^BN@#YbWzboMHiK;nTk0p_PgR;D&D2?Zw_%7GgUss9hLv$ zO)BQ9n5$y0in*%o=s-u#M2_lE^jdw0M{$02CwuVyRCQLBz3Mxvy07ZKs{5+$s~+Jv zC(viLL@fx~8aNH_-{y|Cu5_b2J?VqF+XkYuHuJWP}ohWhe(h%}ljUxTDq^=hg=Eb%rvWQ8Y4%t8hon9W{5M-C6bd+`*mvlqJYrzmL^C$XeF%Fk5+??K}}^ zkWO@=E8TdFL%hp-d=NA=e1kE3hjEN&E4z7~J?!Og{GEUBI&X5Aqr}Klrj1(QKj5MR z9XSITB0cC$e}*!W(YQZyITM(~WTtZi3s}e^7PE}IxrbG(VFO$EGcWKG`*;O2N92th tK<3EXm_K6v$Z<{}eb$7{XeS%YP$dc literal 75378 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 @@ -88,7 +88,9 @@ startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" startingLineNumber = "19" - endingLineNumber = "19"> + endingLineNumber = "19" + landmarkName = "TinyRenderSystem::TinyRenderSystem()" + landmarkType = "5"> + endingLineNumber = "58"> attachRenderTarget(mainWindow); + + //Init scene graph. TinySceneManager* sceneMgr = root->createSceneManager(); - TinyNode* rootNode = sceneMgr->getRootSceneNode(); - TinySceneNode* secondNode = rootNode->createChildSceneNode(); - secondNode->setPosition(kmVec2(0.1, 0.1)); - rootNode->addChild(secondNode); + TinySceneNode* rootNode = sceneMgr->getRootSceneNode(); + //Entity node. + TinySceneNode* entityNode = rootNode->createChildSceneNode(); + kmVec3 entityNodePosition = kmVec3Make(0, 0, -0.5); + entityNode->setPosition(entityNodePosition); + rootNode->addChild(entityNode); + //Camera node. + TinySceneNode* cameraNode = rootNode->createChildSceneNode(); + kmVec3 cameraNodePosition = kmVec3Make(0, 0, 0); + cameraNode->setPosition(cameraNodePosition); + rootNode->addChild(cameraNode); + //Create an entity and attach it to our scene graph. TinyEntityFactory* factory = root->getMovableObjectFactory("Entity"); TinyEntity* entity = factory->createInstance(); - secondNode->attachObject(entity); + entityNode->attachObject(entity); + + //Create camera. + TinyCamera* camera = TINY_NEW TinyCamera(); + mainWindow->addViewPort(camera); + cameraNode->attachObject(camera); + - TinyTexture* texture = TinyTextureManager::getSingleton()->load("abc.png"); + //Create a diffuse texture. + TinyTexture* texture = TinyTextureManager::getSingleton()->load("first_demo.png"); - TinyProgram* program = TinyProgramManager::getSingleton()->load("abc.vs", "abc.fs"); + //Create a gpu program, set diffuse texture to our program as parameter. + TinyProgram* program = TinyProgramManager::getSingleton()->load("first_demo.vs", "first_demo.fs"); TinyGPUProgramParameter param; param.mName = "diffuseTexture" param.mType = GP_SAMPLER param.mBindData = texture->getHandlerPtr(); program->setParameter(const TinyGPUProgramParameter& value); - TinyMaterial* material = TinyMaterialManager::getSingleton()->load("abc.material"); + //Create material with gpu program. TODO assemble program form script. + TinyMaterial* material = TinyMaterialManager::getSingleton()->load("first_demo.material"); material->setProgram(program); + //Set the material to entity. entity->setMaterial(material); } } \ No newline at end of file diff --git a/tiny3d_main/TinyCamera.cpp b/tiny3d_main/TinyCamera.cpp index 261db28..e6abbaa 100755 --- a/tiny3d_main/TinyCamera.cpp +++ b/tiny3d_main/TinyCamera.cpp @@ -9,72 +9,73 @@ #include "TinyCamera.h" #include "TinyMath.h" -TinyCamera::TinyCamera(std::string &name, TinySceneManager *mgr) - : mSceneMgr(mgr) - , mName(name); - , mLastViewPort(nullptr) - , mFov(kTinyPI / 4) - , mAspect(4 / 3) - , mNear(10) - , mFar(1000) +namespace Tiny { -} -TinyCamera::~TinyCamera() -{ - -} + TinyCamera::TinyCamera(std::string &name, TinySceneManager *mgr) + : TinyMovableObject(name) + , mSceneMgr(mgr) + , mName(name) + , mLastViewPort(nullptr) + , mFov(kTinyPI / 4) + , mAspect(4 / 3) + , mNear(10) + , mFar(1000) + { + + } -void TinyCamera::renderScene(TinyViewPort *viewPort) -{ - notifyViewPort(viewPort); - mSceneMgr->renderScene(this); -} + TinyCamera::~TinyCamera() + { + + } -void TinyCamera::notifyViewPort(TinyViewPort *vp) -{ - mLastViewPort = vp; - auto vpSize = vp->getViewPortSize() - mAspect = vpSize.x / vpSize.y; - -} + void TinyCamera::renderScene(TinyViewPort *viewPort) + { + notifyViewPort(viewPort); + mSceneMgr->renderScene(this); + } -TinyViewPort *TinyCamera::getViewPort() -{ - return mLastViewPort; -} + void TinyCamera::notifyViewPort(TinyViewPort *vp) + { + mLastViewPort = vp; + auto vpSize = vp->getViewPortSize(); + mAspect = vpSize.x / vpSize.y; + + } -kmMat4& TinyViewPort::getViewMatrix() -{ - kmMat4 ret; - if (mParentNode) + TinyViewPort *TinyCamera::getViewPort() { - auto parentNodeDerivedOrientation = mParentNode->getDerivedOrientation(); - auto parentNodeDerivedPosition = mParentNode->getDerivedPosition(); - auto frontDir = kmVec3(0, 0, -1); - auto upDir = kmVec3(0, 1, 0); - kmVec3 worldFrontDir, worldUpDir, worldCenter; - kmQuaternionMultiplyVec3(&worldFrontDir, &parentNodeDerivedOrientation, &frontDir); - kmQuaternionMultiplyVec3(&worldUpDir, &parentNodeDerivedOrientation, &upDir); - kmVec3Add(&worldCenter, &parentNodeDerivedPosition, &frontDir); - kmMat4LookAt(&ret, &parentNodeDerivedPosition, &worldCenter, &worldUpDir); + return mLastViewPort; } - else + + void TinyCamera::getViewMatrix(kmMat4& ret) { - kmMat4Identity(&ret); + if (mParentNode) + { + auto parentNodeDerivedOrientation = mParentNode->getDerivedOrientation(); + auto parentNodeDerivedPosition = mParentNode->getDerivedPosition(); + auto frontDir = kmVec3Make(0, 0, -1); + auto upDir = kmVec3Make(0, 1, 0); + kmVec3 worldFrontDir, worldUpDir, worldCenter; + kmQuaternionMultiplyVec3(&worldFrontDir, &parentNodeDerivedOrientation, &frontDir); + kmQuaternionMultiplyVec3(&worldUpDir, &parentNodeDerivedOrientation, &upDir); + kmVec3Add(&worldCenter, &parentNodeDerivedPosition, &frontDir); + kmMat4LookAt(&ret, &parentNodeDerivedPosition, &worldCenter, &worldUpDir); + } + else + { + kmMat4Identity(&ret); + } } - return ret; -} -kmMat4& TinyViewPort::getProjectionMatrix() -{ - kmMat4 ret; - kmMat4PerspectiveProjection(&ret, mFov, mAspect, mNear, mFar); - return ret; + void TinyCamera::getProjectionMatrix(kmMat4& ret) + { + kmMat4PerspectiveProjection(&ret, mFov, mAspect, mNear, mFar); + } } - //- (void)updateInput:(NSTimeInterval)timeInterval //{ // kmVec3 f, s, u; diff --git a/tiny3d_main/TinyCamera.h b/tiny3d_main/TinyCamera.h index 54b10ef..b4f56c6 100755 --- a/tiny3d_main/TinyCamera.h +++ b/tiny3d_main/TinyCamera.h @@ -6,33 +6,18 @@ // Copyright (c) 2015 reuben chao. All rights reserved. // +#ifndef proj_mac_TinyCamera_h +#define proj_mac_TinyCamera_h + #include "kazmath/kazmath.h" -#include "GSInputController.h" #include "TinyObject.h" - -//@interface GSCameraController : NSObject -// -//@property (nonatomic, readonly) kmVec3 eye; -//@property (nonatomic, readonly) kmVec3 center; -//@property (nonatomic, readonly) kmVec3 up; -//@property (nonatomic, readwrite) float moveSpeed; -//@property (nonatomic, readwrite) float rotateSpeed; -//@property (nonatomic, readwrite) float fov; -//@property (nonatomic, readwrite) float aspect; -//@property (nonatomic, readwrite) float near; -//@property (nonatomic, readwrite) float far; -// -//- (id)initWithEye:(kmVec3)eye Center:(kmVec3)center Up:(kmVec3)up; -// -//- (kmMat4)viewMatrix; -//- (kmMat4)perspectiveMatrix; -// -//@end - #include "TinySceneManager.h" #include "TinyMovableObject.h" +#include "TinyViewPort.h" #include +class TinySceneManager; + namespace Tiny { class TinyCamera : public TinyMovableObject @@ -43,8 +28,8 @@ namespace Tiny void renderScene(TinyViewPort *viewPort); void notifyViewPort(TinyViewPort *vp); TinyViewPort *getViewPort(); - kmMat4& getViewMatrix(); - kmMat4& getProjectionMatrix(); + void getViewMatrix(kmMat4& ret); + void getProjectionMatrix(kmMat4& ret); private: TinyViewPort *mLastViewPort; TinySceneManager *mSceneMgr; @@ -56,6 +41,6 @@ namespace Tiny }; } - +#endif diff --git a/tiny3d_main/TinyGPUProgram.h b/tiny3d_main/TinyGPUProgram.h index fe4b542..c570aec 100644 --- a/tiny3d_main/TinyGPUProgram.h +++ b/tiny3d_main/TinyGPUProgram.h @@ -13,6 +13,7 @@ #include "TinyObject.h" #include #include +#include "TinyPlatform.h" namespace Tiny { @@ -46,7 +47,7 @@ namespace Tiny class TinyGPUProgramParameters : public TinyObject { public: - TinyGPUProgramParameters() + TinyGPUProgramParameters(); ~TinyGPUProgramParameters(); void setParameter(const TinyGPUProgramParameter& value); void bindParametersToProgram(GLuint program); diff --git a/tiny3d_main/TinyImage.cpp b/tiny3d_main/TinyImage.cpp index 2859961..1952528 100644 --- a/tiny3d_main/TinyImage.cpp +++ b/tiny3d_main/TinyImage.cpp @@ -7,7 +7,7 @@ // #include -#include "TinyImage" +#include "TinyImage.h" namespace Tiny { @@ -22,7 +22,8 @@ namespace Tiny auto iter = mDataList.begin(); for (; iter != mDataList.end(); iter ++) { - free(iter->second); + uint8* data = *iter; + free(data); } } } \ No newline at end of file diff --git a/tiny3d_main/TinyMaterial.cpp b/tiny3d_main/TinyMaterial.cpp index 9b17525..4d7c587 100644 --- a/tiny3d_main/TinyMaterial.cpp +++ b/tiny3d_main/TinyMaterial.cpp @@ -7,12 +7,13 @@ // #include "TinyMaterial.h" +#include "TinyMemoryAlloc.h" namespace Tiny { TinyMaterial::TinyMaterial() - : mIsTransParent(false); - : mProgram(nullptr) + : mIsTransParent(false) + , mProgram(nullptr) { } diff --git a/tiny3d_main/TinyMovableObject.h b/tiny3d_main/TinyMovableObject.h index 1a5e4d6..e854713 100644 --- a/tiny3d_main/TinyMovableObject.h +++ b/tiny3d_main/TinyMovableObject.h @@ -13,6 +13,7 @@ #include "TinyObject.h" #include #include "kazmath/kazmath.h" +#include "TinyCamera.h" class TinyNode; @@ -26,7 +27,7 @@ namespace Tiny { std::string& getName(); void setName(std::string& name); void notifyAttached(TinyNode* node); - void updateRenderQueue(TinyCamera* cam, TinyRenderQueue* queue) = 0; + virtual void updateRenderQueue(TinyCamera* cam, TinyRenderQueue* queue) = 0; protected: std::string mName; TinyNode* mParentNode; diff --git a/tiny3d_main/TinyMovableObjectFactory.cpp b/tiny3d_main/TinyMovableObjectFactory.cpp index 5135ecc..a41bf19 100644 --- a/tiny3d_main/TinyMovableObjectFactory.cpp +++ b/tiny3d_main/TinyMovableObjectFactory.cpp @@ -6,7 +6,7 @@ // Copyright (c) 2015 reuben chao. All rights reserved. // -#include "MovableObjectFactory.h" +#include "TinyMovableObjectFactory.h" namespace Tiny { diff --git a/tiny3d_main/TinyNode.h b/tiny3d_main/TinyNode.h index 081ec73..2852db2 100644 --- a/tiny3d_main/TinyNode.h +++ b/tiny3d_main/TinyNode.h @@ -15,39 +15,42 @@ #include #include -class TinyNode : public TinyObject +namespace Tiny { -public: - TinyNode(std::string &name); - ~TinyNode(); - TinyNode* createChild(); - void addChild(TinyNode* node); - void removeChild(TinyNode* node); - void getChild(std::string& name); - void update(); - void setPosition(kmVec3 &pos); - void setScale(kmVec3 &scale); - void setOrientation(kmVec3 &orientation); - void updateFromParent(); - kmVec3& getPosition(); - kmVec3& getScale(); - kmVec3& getOrientation(); - kmVec3& getDerivedPosition(); - kmVec3& getDerivedScale(); - kmQuaternion& getDerivedOrientation(); - std::string& getName(); - TinyNode* getParent(); - void setParent(TinyNode* parent); -protected: - kmVec3 mPosition; - kmVec3 mDerivedPosition; - kmQuaternion mOrientation; - kmQuaternion mDerivedOrientation; - kmVec3 mScale; - kmVec3 mDerivedScale; - TinyNode* parent; - std::map mChildren; - std::string mName; -}; + class TinyNode : public TinyObject + { + public: + TinyNode(std::string &name); + ~TinyNode(); + TinyNode* createChild(); + void addChild(TinyNode* node); + void removeChild(TinyNode* node); + void getChild(std::string& name); + void update(); + void setPosition(kmVec3 &pos); + void setScale(kmVec3 &scale); + void setOrientation(kmVec3 &orientation); + void updateFromParent(); + kmVec3& getPosition(); + kmVec3& getScale(); + kmVec3& getOrientation(); + kmVec3& getDerivedPosition(); + kmVec3& getDerivedScale(); + kmQuaternion& getDerivedOrientation(); + std::string& getName(); + TinyNode* getParent(); + void setParent(TinyNode* parent); + protected: + kmVec3 mPosition; + kmVec3 mDerivedPosition; + kmQuaternion mOrientation; + kmQuaternion mDerivedOrientation; + kmVec3 mScale; + kmVec3 mDerivedScale; + TinyNode* parent; + std::map mChildren; + std::string mName; + }; +} #endif /* defined(__proj_mac__TinyNode__) */ diff --git a/tiny3d_main/TinyPlatform.h b/tiny3d_main/TinyPlatform.h index 2a53577..a4cbcde 100644 --- a/tiny3d_main/TinyPlatform.h +++ b/tiny3d_main/TinyPlatform.h @@ -15,10 +15,11 @@ #include #include -#include "TinyRenderWindow.h" #define TINYLOG tinyLog +class TinyRenderWindow; + namespace Tiny { typedef unsigned int uint32; diff --git a/tiny3d_main/TinyRenderOperation.cpp b/tiny3d_main/TinyRenderOperation.cpp index 9842651..3fec222 100644 --- a/tiny3d_main/TinyRenderOperation.cpp +++ b/tiny3d_main/TinyRenderOperation.cpp @@ -7,6 +7,9 @@ // #include "TinyRenderOperation.h" +#include "TinyRenderable.h" +#include "TinyGPUProgram.h" +#include "TinyMaterial.h" namespace Tiny { diff --git a/tiny3d_main/TinyRenderOperation.h b/tiny3d_main/TinyRenderOperation.h index 9fa05d5..327be17 100644 --- a/tiny3d_main/TinyRenderOperation.h +++ b/tiny3d_main/TinyRenderOperation.h @@ -11,9 +11,10 @@ #include #include "TinyVertexIndexData.h" -#include "TinyRenderable.h" -#include "TinyGPUProgram.h" -#include "TinyMaterial.h" + +class TinyRenderable; +class TinyMaterial; +class TinyGpuProgram; namespace Tiny { diff --git a/tiny3d_main/TinyRenderSystem.cpp b/tiny3d_main/TinyRenderSystem.cpp index 580f175..3969232 100644 --- a/tiny3d_main/TinyRenderSystem.cpp +++ b/tiny3d_main/TinyRenderSystem.cpp @@ -37,8 +37,8 @@ namespace Tiny setRenderTarget(renderTarget); kmVec2 vpPosition = vp->geViewPortLeftBottom(); kmVec2 vpSize = vp->getViewPortSize(); - glViewport(vpPosition.x, vpPosition.y vpSize.x, vpSize.y); - glScissor(vpPosition.x, vpPosition.y vpSize.x, vpSize.y); + glViewport(vpPosition.x, vpPosition.y, vpSize.x, vpSize.y); + glScissor(vpPosition.x, vpPosition.y, vpSize.x, vpSize.y); } } @@ -53,12 +53,12 @@ namespace Tiny void TinyRenderSystem::setViewMatrix(kmMat4& matrix) { - kmMat4Fill(&mViewMatrix, matrix.kmScalar); + mViewMatrix = matrix; } void TinyRenderSystem::updateAllRenderTargets() { - std::map iter = mPrioritisedRenderTargets.begin(); + TinyRenderTargetMap::iterator iter = mPrioritisedRenderTargets.begin(); for (; iter != mPrioritisedRenderTargets.end(); iter ++) { iter->second->update(false); @@ -67,7 +67,7 @@ namespace Tiny void TinyRenderSystem::swapAllRenderTargetBuffers() { - std::map iter = mPrioritisedRenderTargets.begin(); + TinyRenderTargetMap::iterator iter = mPrioritisedRenderTargets.begin(); for (; iter != mPrioritisedRenderTargets.end(); iter ++) { iter->second->swapBuffers(); diff --git a/tiny3d_main/TinyRenderSystem.h b/tiny3d_main/TinyRenderSystem.h index 4bd5679..7c0e506 100644 --- a/tiny3d_main/TinyRenderSystem.h +++ b/tiny3d_main/TinyRenderSystem.h @@ -30,14 +30,15 @@ namespace Tiny void swapAllRenderTargetBuffers(); void render(TinyRenderOperation* ro); void bindGPUProgram(TinyGPUProgram *program); - void bindGPUProgramParameters(GPUProgramParameters *params); + void bindGPUProgramParameters(TinyGPUProgramParameters *params); void setRenderTarget(TinyRenderTarget *target); void setViewPort(TinyViewPort *vp); void setViewMatrix(kmMat4& matrix); void attachRenderTarget(TinyRenderTarget *target); void detachRenderTarget(TinyRenderTarget *target); private: - std::map mPrioritisedRenderTargets; + typedef std::map TinyRenderTargetMap; + TinyRenderTargetMap mPrioritisedRenderTargets; TinyViewPort *mActiveViewPort; TinyRenderTarget *mActiveRenderTarget; kmMat4 mViewMatrix; diff --git a/tiny3d_main/TinyRenderTarget.h b/tiny3d_main/TinyRenderTarget.h index a26571c..b48f327 100644 --- a/tiny3d_main/TinyRenderTarget.h +++ b/tiny3d_main/TinyRenderTarget.h @@ -13,6 +13,7 @@ #include "TinyCamera.h" #include #include "TinyViewPort.h" +#include "TinyPlatform.h" #ifndef TINY_NUM_RENDERTARGET_GROUPS #define TINY_NUM_RENDERTARGET_GROUPS 10 @@ -35,7 +36,7 @@ namespace Tiny void updateImpl(); //update all viewports. - void updateViewPorts() + void updateViewPorts(); //swapBuffer. virtual void swapBuffers() = 0; diff --git a/tiny3d_main/TinyRoot.cpp b/tiny3d_main/TinyRoot.cpp index 01cba5d..03660de 100644 --- a/tiny3d_main/TinyRoot.cpp +++ b/tiny3d_main/TinyRoot.cpp @@ -11,6 +11,7 @@ #include "TinyRoot.h" #include "TinyRenderSystem.h" #include "TinyMemoryAlloc.h" +#include "TinyEntityFactory.h" namespace Tiny { @@ -19,7 +20,6 @@ namespace Tiny mSceneMgr(nullptr) { mRenderSystem = TINY_NEW TinyRenderSystem(); - mRenderSystem->attachRenderTarget(tinyCreateRenderWindow(0, 0)); addMovableObjectFactory(TINY_NEW TinyEntityFactory()); } @@ -39,6 +39,11 @@ namespace Tiny return mSceneMgr; } + void TinyRoot::attachRenderTarget(TinyRenderTarget* target) + { + mRenderSystem->attachRenderTarget(target); + } + void TinyRoot::renderOneFrame(float timeInterval) { //add Time to scheduler. diff --git a/tiny3d_main/TinyRoot.h b/tiny3d_main/TinyRoot.h index 29884d2..3db57ed 100644 --- a/tiny3d_main/TinyRoot.h +++ b/tiny3d_main/TinyRoot.h @@ -30,6 +30,7 @@ namespace Tiny TinySceneManager *createSceneManager(); void addMovableObjectFactory(TinyMovableObjectFactory* factory); TinyMovableObjectFactory* getMovableObjectFactory(std::string& name); + void attachRenderTarget(TinyRenderTarget* target); protected: typedef std::map MovableObjectFactoryMap; TinyRenderSystem *mRenderSystem; diff --git a/tiny3d_main/TinySceneManager.cpp b/tiny3d_main/TinySceneManager.cpp index 81d43c4..c83d789 100644 --- a/tiny3d_main/TinySceneManager.cpp +++ b/tiny3d_main/TinySceneManager.cpp @@ -18,7 +18,6 @@ namespace Tiny , mCameraInProgress(nullptr) , mSceneRoot(nullptr) , mDestRenderSystem(nullptr) - , mSceneRoot(nullptr) , mRenderQueue(nullptr) { mDestRenderSystem = TINY_NEW TinyRenderSystem(); @@ -34,10 +33,12 @@ namespace Tiny void TinySceneManager::renderScene(TinyCamera *cam) { - setViewPort(); - setViewMatrix(cam->getViewMatrix()); + kmMat4 viewMatrix; + cam->getViewMatrix(viewMatrix); + setViewPort(cam->getViewPort()); + setViewMatrix(viewMatrix); updateSceneGraph(); - findVisibleObjects(); + findVisibleObjects(cam); renderVisibleObjects(); } @@ -45,7 +46,8 @@ namespace Tiny { if (! mSceneRoot) { - mSceneRoot = TINY_NEW TinySceneNode("Tiny/SceneRoot"); + std::string name = "Tiny/SceneRoot"; + mSceneRoot = TINY_NEW TinySceneNode(name); } return mSceneRoot; } @@ -55,9 +57,9 @@ namespace Tiny getRootSceneNode()->update(); } - void TinySceneManager::findVisibleObjects() + void TinySceneManager::findVisibleObjects(TinyCamera *cam) { - getRootSceneNode()->findVisibleObjects(mCameraInProgress, getRenderQueue()); + getRootSceneNode()->findVisibleObjects(cam, getRenderQueue()); } void TinySceneManager::setViewPort(TinyViewPort* vp) @@ -94,7 +96,7 @@ namespace Tiny VectorIterator iter = collection->getRenderableIterator(); while (iter.hasMoreElements()) { - TinyRenderable pRenderable = iter.getNext(); + TinyRenderable* pRenderable = iter.getNext(); renderSingleObject(pRenderable); } } @@ -111,7 +113,7 @@ namespace Tiny mDestRenderSystem->setViewMatrix(matrix); } - TinyRenderQueue* TinyRenderQueue::getRenderQueue() + TinyRenderQueue* TinySceneManager::getRenderQueue() { if (nullptr == mRenderQueue) { diff --git a/tiny3d_main/TinySceneManager.h b/tiny3d_main/TinySceneManager.h index 25f560b..80770bc 100644 --- a/tiny3d_main/TinySceneManager.h +++ b/tiny3d_main/TinySceneManager.h @@ -24,12 +24,11 @@ namespace Tiny { public: TinySceneManager(); - ~TinySceneManager(); + virtual ~TinySceneManager(); void renderScene(TinyCamera *cam); void findVisibleObjects(TinyCamera *cam); void renderVisibleObjects(); void updateSceneGraph(); - void renderVisibleObjects(); void renderQueueGroupObjects(TinyRenderQueueGroup* group); void renderObjects(TinyRenderableCollection* collection); void renderSingleObject(TinyRenderable* renderable); @@ -41,8 +40,8 @@ namespace Tiny TinyViewPort *mCurrentViewPort; TinyCamera *mCameraInProgress; TinySceneNode* mSceneRoot; - TinyRenderSystem *mDestRenderSystem; - RenderQueue* mRenderQueue; + TinyRenderSystem* mDestRenderSystem; + TinyRenderQueue* mRenderQueue; }; } diff --git a/tiny3d_main/TinySceneNode.cpp b/tiny3d_main/TinySceneNode.cpp index 7fc1b2d..a43251c 100644 --- a/tiny3d_main/TinySceneNode.cpp +++ b/tiny3d_main/TinySceneNode.cpp @@ -10,6 +10,17 @@ namespace Tiny { + TinySceneNode::TinySceneNode(std::string& name) + : TinyNode(name) + { + + } + + TinySceneNode::~TinySceneNode() + { + + } + void TinySceneNode::attachObject(TinyMovableObject* obj) { assert(!obj->isAttached() && "Obj was already attached to an node."); diff --git a/tiny3d_main/TinySceneNode.h b/tiny3d_main/TinySceneNode.h index b77ed7c..6ea6d9d 100644 --- a/tiny3d_main/TinySceneNode.h +++ b/tiny3d_main/TinySceneNode.h @@ -15,16 +15,19 @@ #include #include "TinyNode.h" #include "TinyMovableObject.h" - +#include "TinyRenderQueue.h" class TinyCamera; + namespace Tiny { class TinySceneNode : public TinyNode { public: + TinySceneNode(std::string& name); + virtual ~TinySceneNode(); void attachObject(TinyMovableObject* obj); - void detattchObject(obj); - void findVisibleObjects(TinyCamera* cam, RenderQueue* queue); + void detattchObject(TinyMovableObject* obj); + void findVisibleObjects(TinyCamera* cam, TinyRenderQueue* queue); TinySceneNode* createChildSceneNode(); protected: std::map mAttachedObjects; diff --git a/tiny3d_main/TinySubEntity.cpp b/tiny3d_main/TinySubEntity.cpp index dea32dc..9bfdef7 100644 --- a/tiny3d_main/TinySubEntity.cpp +++ b/tiny3d_main/TinySubEntity.cpp @@ -20,7 +20,7 @@ namespace Tiny } - void getRenderOperation(TinyRenderOperation* ro) + void TinySubEntity::getRenderOperation(TinyRenderOperation* ro) { ro->mVertexData = mSubMesh->mVertexData; ro->mIndexData = mSubMesh->mIndexData; diff --git a/tiny3d_main/TinySubEntity.h b/tiny3d_main/TinySubEntity.h index 075e202..062a5cf 100644 --- a/tiny3d_main/TinySubEntity.h +++ b/tiny3d_main/TinySubEntity.h @@ -15,7 +15,7 @@ namespace Tiny { - class TinySubEntity public : TinyRenderable + class TinySubEntity : public TinyRenderable { public: TinySubEntity(TinySubMesh* subMesh); diff --git a/tiny3d_main/TinyVertexIndexData.h b/tiny3d_main/TinyVertexIndexData.h index baee2bd..65a2215 100644 --- a/tiny3d_main/TinyVertexIndexData.h +++ b/tiny3d_main/TinyVertexIndexData.h @@ -14,6 +14,7 @@ #include "TinyHardwareBuffer.h" #include "TinyIteratorWrapper.h" #include +#include "TinyPlatform.h" namespace Tiny { diff --git a/tiny3d_main/TinyViewPort.h b/tiny3d_main/TinyViewPort.h index 6620b89..6f5f8cc 100644 --- a/tiny3d_main/TinyViewPort.h +++ b/tiny3d_main/TinyViewPort.h @@ -10,8 +10,8 @@ #define proj_mac_TinyViewPort_h #include "TinyObject.h" -#include "TinyCamera.h" #include "kazmath/kazmath.h" +class TinyCamera; namespace Tiny { @@ -32,7 +32,6 @@ namespace Tiny kmVec2 mSize; TinyCamera *mCamera; int mZorder; - mTarget; }; }