Pārlūkot izejas kodu

Samples cleanup of Visual Studio 2013.

seanpaultaylor 12 gadi atpakaļ
vecāks
revīzija
831c2ce520
70 mainītis faili ar 8513 papildinājumiem un 13063 dzēšanām
  1. 914 918
      gameplay/gameplay.vcxproj
  2. 1956 1968
      gameplay/gameplay.vcxproj.filters
  3. 0 0
      gameplay/res/design/icon_128.ico
  4. 0 0
      gameplay/res/design/icon_16.ico
  5. 0 0
      gameplay/res/design/icon_32.ico
  6. 0 0
      gameplay/res/design/icon_64.ico
  7. 0 0
      gameplay/res/design/logo.ai
  8. 836 896
      gameplay/src/FileSystem.cpp
  9. BIN
      samples/browser/res/common/box.gpb
  10. 37 37
      samples/browser/res/common/box.material
  11. 37 37
      samples/browser/res/common/duck.material
  12. 127 129
      samples/browser/res/common/forms/formBasicControls.form
  13. BIN
      samples/browser/res/design/box.mb
  14. BIN
      samples/browser/res/png/box-diffuse.png
  15. BIN
      samples/browser/res/png/duck-diffuse.png
  16. 23 6
      samples/browser/sample-browser.vcxproj
  17. 457 403
      samples/browser/sample-browser.vcxproj.filters
  18. 355 355
      samples/browser/src/Audio3DSample.cpp
  19. 177 177
      samples/browser/src/CreateSceneSample.cpp
  20. 117 117
      samples/browser/src/SpriteBatchSample.cpp
  21. 197 197
      samples/browser/src/TextureSample.cpp
  22. BIN
      samples/character/res/common/scene.gpb
  23. 0 513
      samples/character/res/common/scene.material
  24. 0 74
      samples/character/res/common/scene.physics
  25. 0 208
      samples/character/res/common/scene.scene
  26. BIN
      samples/character/res/design/boy.mb
  27. BIN
      samples/character/res/design/character.png
  28. 1 1
      samples/character/res/design/scene-encode.bat
  29. 0 2838
      samples/character/res/design/scene.dae
  30. BIN
      samples/character/res/design/scene.mb
  31. 36 3
      samples/character/sample-character.vcxproj
  32. 109 44
      samples/character/sample-character.vcxproj.filters
  33. 670 670
      samples/character/src/CharacterGame.cpp
  34. BIN
      samples/lua/res/box-diffuse.png
  35. 0 7
      samples/lua/res/box-encode.bat
  36. BIN
      samples/lua/res/box.gpb
  37. 0 38
      samples/lua/res/box.material
  38. BIN
      samples/lua/res/box.mb
  39. 2 4
      samples/lua/res/game.lua
  40. 0 23
      samples/lua/res/grid.material
  41. 8 8
      samples/lua/res/lua.scene
  42. 351 349
      samples/lua/sample-lua.vcxproj
  43. 55 50
      samples/lua/sample-lua.vcxproj.filters
  44. BIN
      samples/mesh/res/duck-diffuse.png
  45. 0 7
      samples/mesh/res/duck-encode.bat
  46. BIN
      samples/mesh/res/duck.fbx
  47. BIN
      samples/mesh/res/duck.gpb
  48. 0 38
      samples/mesh/res/duck.material
  49. BIN
      samples/mesh/res/duck.mb
  50. 0 23
      samples/mesh/res/grid.material
  51. 0 9
      samples/mesh/res/sample.scene
  52. 364 346
      samples/mesh/sample-mesh.vcxproj
  53. 100 47
      samples/mesh/sample-mesh.vcxproj.filters
  54. 219 219
      samples/mesh/src/MeshGame.cpp
  55. 30 10
      samples/particles/sample-particles.vcxproj
  56. 113 54
      samples/particles/sample-particles.vcxproj.filters
  57. BIN
      samples/racer/res/common/game.gpb
  58. 0 142
      samples/racer/res/common/game.lua
  59. 0 517
      samples/racer/res/common/game.material
  60. 0 180
      samples/racer/res/common/game.physics
  61. 0 392
      samples/racer/res/common/game.scene
  62. BIN
      samples/racer/res/common/heightmap_combinedmap_0.png
  63. 39 11
      samples/racer/sample-racer.vcxproj
  64. 146 64
      samples/racer/sample-racer.vcxproj.filters
  65. 649 650
      samples/racer/src/RacerGame.cpp
  66. 0 7
      samples/spaceship/res/spaceship-encode.bat
  67. 43 4
      samples/spaceship/sample-spaceship.vcxproj
  68. 121 49
      samples/spaceship/sample-spaceship.vcxproj.filters
  69. 207 207
      tools/encoder/gameplay-encoder.vcxproj
  70. 17 17
      tools/encoder/gameplay-encoder.vcxproj.user

+ 914 - 918
gameplay/gameplay.vcxproj

@@ -1,919 +1,915 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="DebugMem|Win32">
-      <Configuration>DebugMem</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DebugMem|x64">
-      <Configuration>DebugMem</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\AbsoluteLayout.cpp" />
-    <ClCompile Include="src\AIAgent.cpp" />
-    <ClCompile Include="src\AIController.cpp" />
-    <ClCompile Include="src\AIMessage.cpp" />
-    <ClCompile Include="src\AIState.cpp" />
-    <ClCompile Include="src\AIStateMachine.cpp" />
-    <ClCompile Include="src\Animation.cpp" />
-    <ClCompile Include="src\AnimationClip.cpp" />
-    <ClCompile Include="src\AnimationController.cpp" />
-    <ClCompile Include="src\AnimationTarget.cpp" />
-    <ClCompile Include="src\AnimationValue.cpp" />
-    <ClCompile Include="src\AudioBuffer.cpp" />
-    <ClCompile Include="src\AudioController.cpp" />
-    <ClCompile Include="src\AudioListener.cpp" />
-    <ClCompile Include="src\AudioSource.cpp" />
-    <ClCompile Include="src\BoundingBox.cpp" />
-    <ClCompile Include="src\BoundingSphere.cpp" />
-    <ClCompile Include="src\Button.cpp" />
-    <ClCompile Include="src\Camera.cpp" />
-    <ClCompile Include="src\CheckBox.cpp" />
-    <ClCompile Include="src\Container.cpp" />
-    <ClCompile Include="src\Control.cpp" />
-    <ClCompile Include="src\ControlFactory.cpp" />
-    <ClCompile Include="src\Curve.cpp" />
-    <ClCompile Include="src\DebugNew.cpp" />
-    <ClCompile Include="src\DepthStencilTarget.cpp" />
-    <ClCompile Include="src\Effect.cpp" />
-    <ClCompile Include="src\FileSystem.cpp" />
-    <ClCompile Include="src\FlowLayout.cpp" />
-    <ClCompile Include="src\Font.cpp" />
-    <ClCompile Include="src\Form.cpp" />
-    <ClCompile Include="src\FrameBuffer.cpp" />
-    <ClCompile Include="src\Frustum.cpp" />
-    <ClCompile Include="src\Game.cpp" />
-    <ClCompile Include="src\Gamepad.cpp" />
-    <ClCompile Include="src\gameplay-main-android.cpp" />
-    <ClCompile Include="src\gameplay-main-blackberry.cpp" />
-    <ClCompile Include="src\gameplay-main-linux.cpp" />
-    <ClCompile Include="src\gameplay-main-windows.cpp" />
-    <ClCompile Include="src\HeightField.cpp" />
-    <ClCompile Include="src\Image.cpp" />
-    <ClCompile Include="src\ImageControl.cpp" />
-    <ClCompile Include="src\Joint.cpp" />
-    <ClCompile Include="src\Joystick.cpp" />
-    <ClCompile Include="src\Label.cpp" />
-    <ClCompile Include="src\Layout.cpp" />
-    <ClCompile Include="src\Light.cpp" />
-    <ClCompile Include="src\Logger.cpp" />
-    <ClCompile Include="src\lua\lua_AbsoluteLayout.cpp" />
-    <ClCompile Include="src\lua\lua_AIAgent.cpp" />
-    <ClCompile Include="src\lua\lua_AIAgentListener.cpp" />
-    <ClCompile Include="src\lua\lua_AIController.cpp" />
-    <ClCompile Include="src\lua\lua_AIMessage.cpp" />
-    <ClCompile Include="src\lua\lua_AIMessageParameterType.cpp" />
-    <ClCompile Include="src\lua\lua_AIState.cpp" />
-    <ClCompile Include="src\lua\lua_AIStateListener.cpp" />
-    <ClCompile Include="src\lua\lua_AIStateMachine.cpp" />
-    <ClCompile Include="src\lua\lua_all_bindings.cpp" />
-    <ClCompile Include="src\lua\lua_Animation.cpp" />
-    <ClCompile Include="src\lua\lua_AnimationClip.cpp" />
-    <ClCompile Include="src\lua\lua_AnimationClipListener.cpp" />
-    <ClCompile Include="src\lua\lua_AnimationClipListenerEventType.cpp" />
-    <ClCompile Include="src\lua\lua_AnimationController.cpp" />
-    <ClCompile Include="src\lua\lua_AnimationTarget.cpp" />
-    <ClCompile Include="src\lua\lua_AnimationValue.cpp" />
-    <ClCompile Include="src\lua\lua_AudioBuffer.cpp" />
-    <ClCompile Include="src\lua\lua_AudioController.cpp" />
-    <ClCompile Include="src\lua\lua_AudioListener.cpp" />
-    <ClCompile Include="src\lua\lua_AudioSource.cpp" />
-    <ClCompile Include="src\lua\lua_AudioSourceState.cpp" />
-    <ClCompile Include="src\lua\lua_BoundingBox.cpp" />
-    <ClCompile Include="src\lua\lua_BoundingSphere.cpp" />
-    <ClCompile Include="src\lua\lua_Bundle.cpp" />
-    <ClCompile Include="src\lua\lua_Button.cpp" />
-    <ClCompile Include="src\lua\lua_Camera.cpp" />
-    <ClCompile Include="src\lua\lua_CameraListener.cpp" />
-    <ClCompile Include="src\lua\lua_CameraType.cpp" />
-    <ClCompile Include="src\lua\lua_CheckBox.cpp" />
-    <ClCompile Include="src\lua\lua_Container.cpp" />
-    <ClCompile Include="src\lua\lua_ContainerScroll.cpp" />
-    <ClCompile Include="src\lua\lua_Control.cpp" />
-    <ClCompile Include="src\lua\lua_ControlAlignment.cpp" />
-    <ClCompile Include="src\lua\lua_ControlAutoSize.cpp" />
-    <ClCompile Include="src\lua\lua_ControlListener.cpp" />
-    <ClCompile Include="src\lua\lua_ControlListenerEventType.cpp" />
-    <ClCompile Include="src\lua\lua_ControlState.cpp" />
-    <ClCompile Include="src\lua\lua_Curve.cpp" />
-    <ClCompile Include="src\lua\lua_CurveInterpolationType.cpp" />
-    <ClCompile Include="src\lua\lua_DepthStencilTarget.cpp" />
-    <ClCompile Include="src\lua\lua_DepthStencilTargetFormat.cpp" />
-    <ClCompile Include="src\lua\lua_Effect.cpp" />
-    <ClCompile Include="src\lua\lua_FileSystem.cpp" />
-    <ClCompile Include="src\lua\lua_FlowLayout.cpp" />
-    <ClCompile Include="src\lua\lua_Font.cpp" />
-    <ClCompile Include="src\lua\lua_FontFormat.cpp" />
-    <ClCompile Include="src\lua\lua_FontJustify.cpp" />
-    <ClCompile Include="src\lua\lua_FontStyle.cpp" />
-    <ClCompile Include="src\lua\lua_FontText.cpp" />
-    <ClCompile Include="src\lua\lua_Form.cpp" />
-    <ClCompile Include="src\lua\lua_FrameBuffer.cpp" />
-    <ClCompile Include="src\lua\lua_Frustum.cpp" />
-    <ClCompile Include="src\lua\lua_Game.cpp" />
-    <ClCompile Include="src\lua\lua_GameClearFlags.cpp" />
-    <ClCompile Include="src\lua\lua_Gamepad.cpp" />
-    <ClCompile Include="src\lua\lua_GamepadButtonMapping.cpp" />
-    <ClCompile Include="src\lua\lua_GamepadGamepadEvent.cpp" />
-    <ClCompile Include="src\lua\lua_GameState.cpp" />
-    <ClCompile Include="src\lua\lua_Gesture.cpp" />
-    <ClCompile Include="src\lua\lua_GestureGestureEvent.cpp" />
-    <ClCompile Include="src\lua\lua_Global.cpp" />
-    <ClCompile Include="src\lua\lua_HeightField.cpp" />
-    <ClCompile Include="src\lua\lua_Image.cpp" />
-    <ClCompile Include="src\lua\lua_ImageControl.cpp" />
-    <ClCompile Include="src\lua\lua_ImageFormat.cpp" />
-    <ClCompile Include="src\lua\lua_Joint.cpp" />
-    <ClCompile Include="src\lua\lua_Joystick.cpp" />
-    <ClCompile Include="src\lua\lua_Keyboard.cpp" />
-    <ClCompile Include="src\lua\lua_KeyboardKey.cpp" />
-    <ClCompile Include="src\lua\lua_KeyboardKeyEvent.cpp" />
-    <ClCompile Include="src\lua\lua_Label.cpp" />
-    <ClCompile Include="src\lua\lua_Layout.cpp" />
-    <ClCompile Include="src\lua\lua_LayoutType.cpp" />
-    <ClCompile Include="src\lua\lua_Light.cpp" />
-    <ClCompile Include="src\lua\lua_LightType.cpp" />
-    <ClCompile Include="src\lua\lua_Logger.cpp" />
-    <ClCompile Include="src\lua\lua_LoggerLevel.cpp" />
-    <ClCompile Include="src\lua\lua_Material.cpp" />
-    <ClCompile Include="src\lua\lua_MaterialParameter.cpp" />
-    <ClCompile Include="src\lua\lua_MathUtil.cpp" />
-    <ClCompile Include="src\lua\lua_Matrix.cpp" />
-    <ClCompile Include="src\lua\lua_Mesh.cpp" />
-    <ClCompile Include="src\lua\lua_MeshBatch.cpp" />
-    <ClCompile Include="src\lua\lua_MeshIndexFormat.cpp" />
-    <ClCompile Include="src\lua\lua_MeshPart.cpp" />
-    <ClCompile Include="src\lua\lua_MeshPrimitiveType.cpp" />
-    <ClCompile Include="src\lua\lua_MeshSkin.cpp" />
-    <ClCompile Include="src\lua\lua_Model.cpp" />
-    <ClCompile Include="src\lua\lua_Mouse.cpp" />
-    <ClCompile Include="src\lua\lua_MouseMouseEvent.cpp" />
-    <ClCompile Include="src\lua\lua_Node.cpp" />
-    <ClCompile Include="src\lua\lua_NodeCloneContext.cpp" />
-    <ClCompile Include="src\lua\lua_NodeType.cpp" />
-    <ClCompile Include="src\lua\lua_ParticleEmitter.cpp" />
-    <ClCompile Include="src\lua\lua_ParticleEmitterTextureBlending.cpp" />
-    <ClCompile Include="src\lua\lua_Pass.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCharacter.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObject.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectType.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShape.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeDefinition.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeType.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsConstraint.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsController.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsControllerHitFilter.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsControllerHitResult.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsControllerListener.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsControllerListenerEventType.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsFixedConstraint.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsGenericConstraint.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsGhostObject.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsHingeConstraint.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsRigidBody.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsRigidBodyParameters.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsSocketConstraint.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsSpringConstraint.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsVehicle.cpp" />
-    <ClCompile Include="src\lua\lua_PhysicsVehicleWheel.cpp" />
-    <ClCompile Include="src\lua\lua_Plane.cpp" />
-    <ClCompile Include="src\lua\lua_Platform.cpp" />
-    <ClCompile Include="src\lua\lua_Properties.cpp" />
-    <ClCompile Include="src\lua\lua_PropertiesType.cpp" />
-    <ClCompile Include="src\lua\lua_Quaternion.cpp" />
-    <ClCompile Include="src\lua\lua_RadioButton.cpp" />
-    <ClCompile Include="src\lua\lua_Ray.cpp" />
-    <ClCompile Include="src\lua\lua_Rectangle.cpp" />
-    <ClCompile Include="src\lua\lua_Ref.cpp" />
-    <ClCompile Include="src\lua\lua_RenderState.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateAutoBinding.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateBlend.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateCullFaceSide.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateDepthFunction.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateFrontFace.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateStateBlock.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateStencilFunction.cpp" />
-    <ClCompile Include="src\lua\lua_RenderStateStencilOperation.cpp" />
-    <ClCompile Include="src\lua\lua_RenderTarget.cpp" />
-    <ClCompile Include="src\lua\lua_Scene.cpp" />
-    <ClCompile Include="src\lua\lua_SceneDebugFlags.cpp" />
-    <ClCompile Include="src\lua\lua_SceneRenderer.cpp" />
-    <ClCompile Include="src\lua\lua_SceneRendererForward.cpp" />
-    <ClCompile Include="src\lua\lua_ScreenDisplayer.cpp" />
-    <ClCompile Include="src\lua\lua_ScriptController.cpp" />
-    <ClCompile Include="src\lua\lua_ScriptTarget.cpp" />
-    <ClCompile Include="src\lua\lua_Slider.cpp" />
-    <ClCompile Include="src\lua\lua_SpriteBatch.cpp" />
-    <ClCompile Include="src\lua\lua_Technique.cpp" />
-    <ClCompile Include="src\lua\lua_Terrain.cpp" />
-    <ClCompile Include="src\lua\lua_TerrainFlags.cpp" />
-    <ClCompile Include="src\lua\lua_TerrainPatch.cpp" />
-    <ClCompile Include="src\lua\lua_TextBox.cpp" />
-    <ClCompile Include="src\lua\lua_TextBoxInputMode.cpp" />
-    <ClCompile Include="src\lua\lua_Texture.cpp" />
-    <ClCompile Include="src\lua\lua_TextureFilter.cpp" />
-    <ClCompile Include="src\lua\lua_TextureFormat.cpp" />
-    <ClCompile Include="src\lua\lua_TextureSampler.cpp" />
-    <ClCompile Include="src\lua\lua_TextureWrap.cpp" />
-    <ClCompile Include="src\lua\lua_Theme.cpp" />
-    <ClCompile Include="src\lua\lua_ThemeSideRegions.cpp" />
-    <ClCompile Include="src\lua\lua_ThemeStyle.cpp" />
-    <ClCompile Include="src\lua\lua_ThemeThemeImage.cpp" />
-    <ClCompile Include="src\lua\lua_ThemeUVs.cpp" />
-    <ClCompile Include="src\lua\lua_Touch.cpp" />
-    <ClCompile Include="src\lua\lua_TouchTouchEvent.cpp" />
-    <ClCompile Include="src\lua\lua_Transform.cpp" />
-    <ClCompile Include="src\lua\lua_TransformListener.cpp" />
-    <ClCompile Include="src\lua\lua_Uniform.cpp" />
-    <ClCompile Include="src\lua\lua_Vector2.cpp" />
-    <ClCompile Include="src\lua\lua_Vector3.cpp" />
-    <ClCompile Include="src\lua\lua_Vector4.cpp" />
-    <ClCompile Include="src\lua\lua_VertexAttributeBinding.cpp" />
-    <ClCompile Include="src\lua\lua_VertexFormat.cpp" />
-    <ClCompile Include="src\lua\lua_VertexFormatElement.cpp" />
-    <ClCompile Include="src\lua\lua_VertexFormatUsage.cpp" />
-    <ClCompile Include="src\lua\lua_VerticalLayout.cpp" />
-    <ClCompile Include="src\lua\lua_VisibleSet.cpp" />
-    <ClCompile Include="src\lua\lua_VisibleSetDefault.cpp" />
-    <ClCompile Include="src\Material.cpp" />
-    <ClCompile Include="src\MathUtil.cpp" />
-    <ClCompile Include="src\MeshBatch.cpp" />
-    <ClCompile Include="src\Pass.cpp" />
-    <ClCompile Include="src\MaterialParameter.cpp" />
-    <ClCompile Include="src\Matrix.cpp" />
-    <ClCompile Include="src\Mesh.cpp" />
-    <ClCompile Include="src\MeshPart.cpp" />
-    <ClCompile Include="src\MeshSkin.cpp" />
-    <ClCompile Include="src\Model.cpp" />
-    <ClCompile Include="src\Node.cpp" />
-    <ClCompile Include="src\Bundle.cpp" />
-    <ClCompile Include="src\ParticleEmitter.cpp" />
-    <ClCompile Include="src\PhysicsCharacter.cpp" />
-    <ClCompile Include="src\PhysicsCollisionObject.cpp" />
-    <ClCompile Include="src\PhysicsCollisionShape.cpp" />
-    <ClCompile Include="src\PhysicsConstraint.cpp" />
-    <ClCompile Include="src\PhysicsController.cpp" />
-    <ClCompile Include="src\PhysicsFixedConstraint.cpp" />
-    <ClCompile Include="src\PhysicsGenericConstraint.cpp" />
-    <ClCompile Include="src\PhysicsGhostObject.cpp" />
-    <ClCompile Include="src\PhysicsHingeConstraint.cpp" />
-    <ClCompile Include="src\PhysicsRigidBody.cpp" />
-    <ClCompile Include="src\PhysicsSocketConstraint.cpp" />
-    <ClCompile Include="src\PhysicsSpringConstraint.cpp" />
-    <ClCompile Include="src\PhysicsVehicle.cpp" />
-    <ClCompile Include="src\PhysicsVehicleWheel.cpp" />
-    <ClCompile Include="src\Plane.cpp" />
-    <ClCompile Include="src\Platform.cpp" />
-    <ClCompile Include="src\PlatformAndroid.cpp" />
-    <ClCompile Include="src\PlatformBlackBerry.cpp" />
-    <ClCompile Include="src\PlatformLinux.cpp" />
-    <ClCompile Include="src\PlatformWindows.cpp" />
-    <ClCompile Include="src\Properties.cpp" />
-    <ClCompile Include="src\Quaternion.cpp" />
-    <ClCompile Include="src\RadioButton.cpp" />
-    <ClCompile Include="src\Ray.cpp" />
-    <ClCompile Include="src\Rectangle.cpp" />
-    <ClCompile Include="src\Ref.cpp" />
-    <ClCompile Include="src\RenderState.cpp" />
-    <ClCompile Include="src\RenderTarget.cpp" />
-    <ClCompile Include="src\Scene.cpp" />
-    <ClCompile Include="src\SceneLoader.cpp" />
-    <ClCompile Include="src\SceneRenderer.cpp" />
-    <ClCompile Include="src\SceneRendererForward.cpp" />
-    <ClCompile Include="src\ScreenDisplayer.cpp" />
-    <ClCompile Include="src\ScriptController.cpp" />
-    <ClCompile Include="src\ScriptTarget.cpp" />
-    <ClCompile Include="src\Slider.cpp" />
-    <ClCompile Include="src\SocialAchievement.cpp" />
-    <ClCompile Include="src\SocialChallenge.cpp" />
-    <ClCompile Include="src\SocialController.cpp" />
-    <ClCompile Include="src\SocialPlayer.cpp" />
-    <ClCompile Include="src\SocialScore.cpp" />
-    <ClCompile Include="src\SocialSessionListener.cpp" />
-    <ClCompile Include="src\social\GooglePlaySocialSession.cpp" />
-    <ClCompile Include="src\social\ScoreloopSocialSession.cpp" />
-    <ClCompile Include="src\SpriteBatch.cpp" />
-    <ClCompile Include="src\Technique.cpp" />
-    <ClCompile Include="src\Terrain.cpp" />
-    <ClCompile Include="src\TerrainPatch.cpp" />
-    <ClCompile Include="src\TextBox.cpp" />
-    <ClCompile Include="src\Texture.cpp" />
-    <ClCompile Include="src\Theme.cpp" />
-    <ClCompile Include="src\ThemeStyle.cpp" />
-    <ClCompile Include="src\Transform.cpp" />
-    <ClCompile Include="src\Vector2.cpp" />
-    <ClCompile Include="src\Vector3.cpp" />
-    <ClCompile Include="src\Vector4.cpp" />
-    <ClCompile Include="src\VertexAttributeBinding.cpp" />
-    <ClCompile Include="src\VertexFormat.cpp" />
-    <ClCompile Include="src\VerticalLayout.cpp" />
-    <ClCompile Include="src\VisibleSetDefault.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\AbsoluteLayout.h" />
-    <ClInclude Include="src\AIAgent.h" />
-    <ClInclude Include="src\AIController.h" />
-    <ClInclude Include="src\AIMessage.h" />
-    <ClInclude Include="src\AIState.h" />
-    <ClInclude Include="src\AIStateMachine.h" />
-    <ClInclude Include="src\Animation.h" />
-    <ClInclude Include="src\AnimationClip.h" />
-    <ClInclude Include="src\AnimationController.h" />
-    <ClInclude Include="src\AnimationTarget.h" />
-    <ClInclude Include="src\AnimationValue.h" />
-    <ClInclude Include="src\AudioBuffer.h" />
-    <ClInclude Include="src\AudioController.h" />
-    <ClInclude Include="src\AudioListener.h" />
-    <ClInclude Include="src\AudioSource.h" />
-    <ClInclude Include="src\Base.h" />
-    <ClInclude Include="src\BoundingBox.h" />
-    <ClInclude Include="src\BoundingSphere.h" />
-    <ClInclude Include="src\Button.h" />
-    <ClInclude Include="src\Camera.h" />
-    <ClInclude Include="src\CheckBox.h" />
-    <ClInclude Include="src\Container.h" />
-    <ClInclude Include="src\Control.h" />
-    <ClInclude Include="src\ControlFactory.h" />
-    <ClInclude Include="src\Curve.h" />
-    <ClInclude Include="src\DebugNew.h" />
-    <ClInclude Include="src\DepthStencilTarget.h" />
-    <ClInclude Include="src\Effect.h" />
-    <ClInclude Include="src\FileSystem.h" />
-    <ClInclude Include="src\FlowLayout.h" />
-    <ClInclude Include="src\Font.h" />
-    <ClInclude Include="src\Form.h" />
-    <ClInclude Include="src\FrameBuffer.h" />
-    <ClInclude Include="src\Frustum.h" />
-    <ClInclude Include="src\Game.h" />
-    <ClInclude Include="src\Gamepad.h" />
-    <ClInclude Include="src\gameplay.h" />
-    <ClInclude Include="src\Gesture.h" />
-    <ClInclude Include="src\HeightField.h" />
-    <ClInclude Include="src\Image.h" />
-    <ClInclude Include="src\ImageControl.h" />
-    <ClInclude Include="src\Joint.h" />
-    <ClInclude Include="src\Joystick.h" />
-    <ClInclude Include="src\Keyboard.h" />
-    <ClInclude Include="src\Label.h" />
-    <ClInclude Include="src\Layout.h" />
-    <ClInclude Include="src\Light.h" />
-    <ClInclude Include="src\Logger.h" />
-    <ClInclude Include="src\lua\lua_AbsoluteLayout.h" />
-    <ClInclude Include="src\lua\lua_AIAgent.h" />
-    <ClInclude Include="src\lua\lua_AIAgentListener.h" />
-    <ClInclude Include="src\lua\lua_AIController.h" />
-    <ClInclude Include="src\lua\lua_AIMessage.h" />
-    <ClInclude Include="src\lua\lua_AIMessageParameterType.h" />
-    <ClInclude Include="src\lua\lua_AIState.h" />
-    <ClInclude Include="src\lua\lua_AIStateListener.h" />
-    <ClInclude Include="src\lua\lua_AIStateMachine.h" />
-    <ClInclude Include="src\lua\lua_all_bindings.h" />
-    <ClInclude Include="src\lua\lua_Animation.h" />
-    <ClInclude Include="src\lua\lua_AnimationClip.h" />
-    <ClInclude Include="src\lua\lua_AnimationClipListener.h" />
-    <ClInclude Include="src\lua\lua_AnimationClipListenerEventType.h" />
-    <ClInclude Include="src\lua\lua_AnimationController.h" />
-    <ClInclude Include="src\lua\lua_AnimationTarget.h" />
-    <ClInclude Include="src\lua\lua_AnimationValue.h" />
-    <ClInclude Include="src\lua\lua_AudioBuffer.h" />
-    <ClInclude Include="src\lua\lua_AudioController.h" />
-    <ClInclude Include="src\lua\lua_AudioListener.h" />
-    <ClInclude Include="src\lua\lua_AudioSource.h" />
-    <ClInclude Include="src\lua\lua_AudioSourceState.h" />
-    <ClInclude Include="src\lua\lua_BoundingBox.h" />
-    <ClInclude Include="src\lua\lua_BoundingSphere.h" />
-    <ClInclude Include="src\lua\lua_Bundle.h" />
-    <ClInclude Include="src\lua\lua_Button.h" />
-    <ClInclude Include="src\lua\lua_Camera.h" />
-    <ClInclude Include="src\lua\lua_CameraListener.h" />
-    <ClInclude Include="src\lua\lua_CameraType.h" />
-    <ClInclude Include="src\lua\lua_CheckBox.h" />
-    <ClInclude Include="src\lua\lua_Container.h" />
-    <ClInclude Include="src\lua\lua_ContainerScroll.h" />
-    <ClInclude Include="src\lua\lua_Control.h" />
-    <ClInclude Include="src\lua\lua_ControlAlignment.h" />
-    <ClInclude Include="src\lua\lua_ControlAutoSize.h" />
-    <ClInclude Include="src\lua\lua_ControlListener.h" />
-    <ClInclude Include="src\lua\lua_ControlListenerEventType.h" />
-    <ClInclude Include="src\lua\lua_ControlState.h" />
-    <ClInclude Include="src\lua\lua_Curve.h" />
-    <ClInclude Include="src\lua\lua_CurveInterpolationType.h" />
-    <ClInclude Include="src\lua\lua_DepthStencilTarget.h" />
-    <ClInclude Include="src\lua\lua_DepthStencilTargetFormat.h" />
-    <ClInclude Include="src\lua\lua_Effect.h" />
-    <ClInclude Include="src\lua\lua_FileSystem.h" />
-    <ClInclude Include="src\lua\lua_FlowLayout.h" />
-    <ClInclude Include="src\lua\lua_Font.h" />
-    <ClInclude Include="src\lua\lua_FontFormat.h" />
-    <ClInclude Include="src\lua\lua_FontJustify.h" />
-    <ClInclude Include="src\lua\lua_FontStyle.h" />
-    <ClInclude Include="src\lua\lua_FontText.h" />
-    <ClInclude Include="src\lua\lua_Form.h" />
-    <ClInclude Include="src\lua\lua_FrameBuffer.h" />
-    <ClInclude Include="src\lua\lua_Frustum.h" />
-    <ClInclude Include="src\lua\lua_Game.h" />
-    <ClInclude Include="src\lua\lua_GameClearFlags.h" />
-    <ClInclude Include="src\lua\lua_Gamepad.h" />
-    <ClInclude Include="src\lua\lua_GamepadButtonMapping.h" />
-    <ClInclude Include="src\lua\lua_GamepadGamepadEvent.h" />
-    <ClInclude Include="src\lua\lua_GameState.h" />
-    <ClInclude Include="src\lua\lua_Gesture.h" />
-    <ClInclude Include="src\lua\lua_GestureGestureEvent.h" />
-    <ClInclude Include="src\lua\lua_Global.h" />
-    <ClInclude Include="src\lua\lua_HeightField.h" />
-    <ClInclude Include="src\lua\lua_Image.h" />
-    <ClInclude Include="src\lua\lua_ImageControl.h" />
-    <ClInclude Include="src\lua\lua_ImageFormat.h" />
-    <ClInclude Include="src\lua\lua_Joint.h" />
-    <ClInclude Include="src\lua\lua_Joystick.h" />
-    <ClInclude Include="src\lua\lua_Keyboard.h" />
-    <ClInclude Include="src\lua\lua_KeyboardKey.h" />
-    <ClInclude Include="src\lua\lua_KeyboardKeyEvent.h" />
-    <ClInclude Include="src\lua\lua_Label.h" />
-    <ClInclude Include="src\lua\lua_Layout.h" />
-    <ClInclude Include="src\lua\lua_LayoutType.h" />
-    <ClInclude Include="src\lua\lua_Light.h" />
-    <ClInclude Include="src\lua\lua_LightType.h" />
-    <ClInclude Include="src\lua\lua_Logger.h" />
-    <ClInclude Include="src\lua\lua_LoggerLevel.h" />
-    <ClInclude Include="src\lua\lua_Material.h" />
-    <ClInclude Include="src\lua\lua_MaterialParameter.h" />
-    <ClInclude Include="src\lua\lua_MathUtil.h" />
-    <ClInclude Include="src\lua\lua_Matrix.h" />
-    <ClInclude Include="src\lua\lua_Mesh.h" />
-    <ClInclude Include="src\lua\lua_MeshBatch.h" />
-    <ClInclude Include="src\lua\lua_MeshIndexFormat.h" />
-    <ClInclude Include="src\lua\lua_MeshPart.h" />
-    <ClInclude Include="src\lua\lua_MeshPrimitiveType.h" />
-    <ClInclude Include="src\lua\lua_MeshSkin.h" />
-    <ClInclude Include="src\lua\lua_Model.h" />
-    <ClInclude Include="src\lua\lua_Mouse.h" />
-    <ClInclude Include="src\lua\lua_MouseMouseEvent.h" />
-    <ClInclude Include="src\lua\lua_Node.h" />
-    <ClInclude Include="src\lua\lua_NodeCloneContext.h" />
-    <ClInclude Include="src\lua\lua_NodeType.h" />
-    <ClInclude Include="src\lua\lua_ParticleEmitter.h" />
-    <ClInclude Include="src\lua\lua_ParticleEmitterTextureBlending.h" />
-    <ClInclude Include="src\lua\lua_Pass.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCharacter.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObject.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectType.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShape.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeDefinition.h" />
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeType.h" />
-    <ClInclude Include="src\lua\lua_PhysicsConstraint.h" />
-    <ClInclude Include="src\lua\lua_PhysicsController.h" />
-    <ClInclude Include="src\lua\lua_PhysicsControllerHitFilter.h" />
-    <ClInclude Include="src\lua\lua_PhysicsControllerHitResult.h" />
-    <ClInclude Include="src\lua\lua_PhysicsControllerListener.h" />
-    <ClInclude Include="src\lua\lua_PhysicsControllerListenerEventType.h" />
-    <ClInclude Include="src\lua\lua_PhysicsFixedConstraint.h" />
-    <ClInclude Include="src\lua\lua_PhysicsGenericConstraint.h" />
-    <ClInclude Include="src\lua\lua_PhysicsGhostObject.h" />
-    <ClInclude Include="src\lua\lua_PhysicsHingeConstraint.h" />
-    <ClInclude Include="src\lua\lua_PhysicsRigidBody.h" />
-    <ClInclude Include="src\lua\lua_PhysicsRigidBodyParameters.h" />
-    <ClInclude Include="src\lua\lua_PhysicsSocketConstraint.h" />
-    <ClInclude Include="src\lua\lua_PhysicsSpringConstraint.h" />
-    <ClInclude Include="src\lua\lua_PhysicsVehicle.h" />
-    <ClInclude Include="src\lua\lua_PhysicsVehicleWheel.h" />
-    <ClInclude Include="src\lua\lua_Plane.h" />
-    <ClInclude Include="src\lua\lua_Platform.h" />
-    <ClInclude Include="src\lua\lua_Properties.h" />
-    <ClInclude Include="src\lua\lua_PropertiesType.h" />
-    <ClInclude Include="src\lua\lua_Quaternion.h" />
-    <ClInclude Include="src\lua\lua_RadioButton.h" />
-    <ClInclude Include="src\lua\lua_Ray.h" />
-    <ClInclude Include="src\lua\lua_Rectangle.h" />
-    <ClInclude Include="src\lua\lua_Ref.h" />
-    <ClInclude Include="src\lua\lua_RenderState.h" />
-    <ClInclude Include="src\lua\lua_RenderStateAutoBinding.h" />
-    <ClInclude Include="src\lua\lua_RenderStateBlend.h" />
-    <ClInclude Include="src\lua\lua_RenderStateCullFaceSide.h" />
-    <ClInclude Include="src\lua\lua_RenderStateDepthFunction.h" />
-    <ClInclude Include="src\lua\lua_RenderStateFrontFace.h" />
-    <ClInclude Include="src\lua\lua_RenderStateStateBlock.h" />
-    <ClInclude Include="src\lua\lua_RenderStateStencilFunction.h" />
-    <ClInclude Include="src\lua\lua_RenderStateStencilOperation.h" />
-    <ClInclude Include="src\lua\lua_RenderTarget.h" />
-    <ClInclude Include="src\lua\lua_Scene.h" />
-    <ClInclude Include="src\lua\lua_SceneDebugFlags.h" />
-    <ClInclude Include="src\lua\lua_SceneRenderer.h" />
-    <ClInclude Include="src\lua\lua_SceneRendererForward.h" />
-    <ClInclude Include="src\lua\lua_ScreenDisplayer.h" />
-    <ClInclude Include="src\lua\lua_ScriptController.h" />
-    <ClInclude Include="src\lua\lua_ScriptTarget.h" />
-    <ClInclude Include="src\lua\lua_Slider.h" />
-    <ClInclude Include="src\lua\lua_SpriteBatch.h" />
-    <ClInclude Include="src\lua\lua_Technique.h" />
-    <ClInclude Include="src\lua\lua_Terrain.h" />
-    <ClInclude Include="src\lua\lua_TerrainFlags.h" />
-    <ClInclude Include="src\lua\lua_TerrainPatch.h" />
-    <ClInclude Include="src\lua\lua_TextBox.h" />
-    <ClInclude Include="src\lua\lua_TextBoxInputMode.h" />
-    <ClInclude Include="src\lua\lua_Texture.h" />
-    <ClInclude Include="src\lua\lua_TextureFilter.h" />
-    <ClInclude Include="src\lua\lua_TextureFormat.h" />
-    <ClInclude Include="src\lua\lua_TextureSampler.h" />
-    <ClInclude Include="src\lua\lua_TextureWrap.h" />
-    <ClInclude Include="src\lua\lua_Theme.h" />
-    <ClInclude Include="src\lua\lua_ThemeSideRegions.h" />
-    <ClInclude Include="src\lua\lua_ThemeStyle.h" />
-    <ClInclude Include="src\lua\lua_ThemeThemeImage.h" />
-    <ClInclude Include="src\lua\lua_ThemeUVs.h" />
-    <ClInclude Include="src\lua\lua_Touch.h" />
-    <ClInclude Include="src\lua\lua_TouchTouchEvent.h" />
-    <ClInclude Include="src\lua\lua_Transform.h" />
-    <ClInclude Include="src\lua\lua_TransformListener.h" />
-    <ClInclude Include="src\lua\lua_Uniform.h" />
-    <ClInclude Include="src\lua\lua_Vector2.h" />
-    <ClInclude Include="src\lua\lua_Vector3.h" />
-    <ClInclude Include="src\lua\lua_Vector4.h" />
-    <ClInclude Include="src\lua\lua_VertexAttributeBinding.h" />
-    <ClInclude Include="src\lua\lua_VertexFormat.h" />
-    <ClInclude Include="src\lua\lua_VertexFormatElement.h" />
-    <ClInclude Include="src\lua\lua_VertexFormatUsage.h" />
-    <ClInclude Include="src\lua\lua_VerticalLayout.h" />
-    <ClInclude Include="src\lua\lua_VisibleSet.h" />
-    <ClInclude Include="src\lua\lua_VisibleSetDefault.h" />
-    <ClInclude Include="src\Material.h" />
-    <ClInclude Include="src\MathUtil.h" />
-    <ClInclude Include="src\MeshBatch.h" />
-    <ClInclude Include="src\Mouse.h" />
-    <ClInclude Include="src\Pass.h" />
-    <ClInclude Include="src\MaterialParameter.h" />
-    <ClInclude Include="src\Matrix.h" />
-    <ClInclude Include="src\Mesh.h" />
-    <ClInclude Include="src\MeshPart.h" />
-    <ClInclude Include="src\MeshSkin.h" />
-    <ClInclude Include="src\Model.h" />
-    <ClInclude Include="src\Node.h" />
-    <ClInclude Include="src\Bundle.h" />
-    <ClInclude Include="src\ParticleEmitter.h" />
-    <ClInclude Include="src\PhysicsCharacter.h" />
-    <ClInclude Include="src\PhysicsCollisionObject.h" />
-    <ClInclude Include="src\PhysicsCollisionShape.h" />
-    <ClInclude Include="src\PhysicsConstraint.h" />
-    <ClInclude Include="src\PhysicsController.h" />
-    <ClInclude Include="src\PhysicsFixedConstraint.h" />
-    <ClInclude Include="src\PhysicsGenericConstraint.h" />
-    <ClInclude Include="src\PhysicsGhostObject.h" />
-    <ClInclude Include="src\PhysicsHingeConstraint.h" />
-    <ClInclude Include="src\PhysicsRigidBody.h" />
-    <ClInclude Include="src\PhysicsSocketConstraint.h" />
-    <ClInclude Include="src\PhysicsSpringConstraint.h" />
-    <ClInclude Include="src\PhysicsVehicle.h" />
-    <ClInclude Include="src\PhysicsVehicleWheel.h" />
-    <ClInclude Include="src\Plane.h" />
-    <ClInclude Include="src\Platform.h" />
-    <ClInclude Include="src\Properties.h" />
-    <ClInclude Include="src\Quaternion.h" />
-    <ClInclude Include="src\RadioButton.h" />
-    <ClInclude Include="src\Ray.h" />
-    <ClInclude Include="src\Rectangle.h" />
-    <ClInclude Include="src\Ref.h" />
-    <ClInclude Include="src\RenderState.h" />
-    <ClInclude Include="src\RenderTarget.h" />
-    <ClInclude Include="src\Scene.h" />
-    <ClInclude Include="src\SceneLoader.h" />
-    <ClInclude Include="src\SceneRenderer.h" />
-    <ClInclude Include="src\SceneRendererForward.h" />
-    <ClInclude Include="src\ScreenDisplayer.h" />
-    <ClInclude Include="src\ScriptController.h" />
-    <ClInclude Include="src\ScriptTarget.h" />
-    <ClInclude Include="src\Slider.h" />
-    <ClInclude Include="src\SocialAchievement.h" />
-    <ClInclude Include="src\SocialChallenge.h" />
-    <ClInclude Include="src\SocialController.h" />
-    <ClInclude Include="src\SocialPlayer.h" />
-    <ClInclude Include="src\SocialScore.h" />
-    <ClInclude Include="src\SocialSession.h" />
-    <ClInclude Include="src\SocialSessionListener.h" />
-    <ClInclude Include="src\social\GooglePlaySocialSession.h" />
-    <ClInclude Include="src\social\ScoreloopSocialSession.h" />
-    <ClInclude Include="src\SpriteBatch.h" />
-    <ClInclude Include="src\Stream.h" />
-    <ClInclude Include="src\Technique.h" />
-    <ClInclude Include="src\Terrain.h" />
-    <ClInclude Include="src\TerrainPatch.h" />
-    <ClInclude Include="src\TextBox.h" />
-    <ClInclude Include="src\Texture.h" />
-    <ClInclude Include="src\Theme.h" />
-    <ClInclude Include="src\ThemeStyle.h" />
-    <ClInclude Include="src\TimeListener.h" />
-    <ClInclude Include="src\Touch.h" />
-    <ClInclude Include="src\Transform.h" />
-    <ClInclude Include="src\Vector2.h" />
-    <ClInclude Include="src\Vector3.h" />
-    <ClInclude Include="src\Vector4.h" />
-    <ClInclude Include="src\VertexAttributeBinding.h" />
-    <ClInclude Include="src\VertexFormat.h" />
-    <ClInclude Include="src\VerticalLayout.h" />
-    <ClInclude Include="src\VisibleSet.h" />
-    <ClInclude Include="src\VisibleSetDefault.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="res\logo_black.png" />
-    <None Include="res\logo_powered_black.png" />
-    <None Include="res\logo_powered_white.png" />
-    <None Include="res\logo_white.png" />
-    <None Include="res\shaders\colored.frag" />
-    <None Include="res\shaders\colored.vert" />
-    <None Include="res\shaders\font.frag" />
-    <None Include="res\shaders\font.vert" />
-    <None Include="res\shaders\form.frag" />
-    <None Include="res\shaders\form.vert" />
-    <None Include="res\shaders\lighting.frag" />
-    <None Include="res\shaders\lighting.vert" />
-    <None Include="res\shaders\skinning-none.vert" />
-    <None Include="res\shaders\skinning.vert" />
-    <None Include="res\shaders\sprite.frag" />
-    <None Include="res\shaders\sprite.vert" />
-    <None Include="res\shaders\terrain.frag" />
-    <None Include="res\shaders\terrain.vert" />
-    <None Include="res\shaders\textured.frag" />
-    <None Include="res\shaders\textured.vert" />
-    <None Include="src\BoundingBox.inl" />
-    <None Include="src\BoundingSphere.inl" />
-    <None Include="src\Game.inl" />
-    <None Include="src\Image.inl" />
-    <None Include="src\MathUtil.inl" />
-    <None Include="src\MathUtilNeon.inl" />
-    <None Include="src\Joystick.inl" />
-    <None Include="src\Matrix.inl" />
-    <None Include="src\MeshBatch.inl" />
-    <None Include="src\Plane.inl" />
-    <None Include="src\Quaternion.inl" />
-    <None Include="src\Ray.inl" />
-    <None Include="src\ScriptController.inl" />
-    <None Include="src\Vector2.inl" />
-    <None Include="src\Vector3.inl" />
-    <None Include="src\Vector4.inl" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="src\PhysicsConstraint.inl" />
-    <None Include="src\PhysicsFixedConstraint.inl" />
-    <None Include="src\PhysicsGenericConstraint.inl" />
-    <None Include="src\PhysicsRigidBody.inl" />
-    <None Include="src\PhysicsSpringConstraint.inl" />
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{1032BA4B-57EB-4348-9E03-29DD63E80E4A}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>gameplay</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>StaticLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <OutDir>windows\x86\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <OutDir>windows\x64\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
-    <OutDir>windows\x86\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
-    <OutDir>windows\x64\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <IntDir>windows\x86\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <IntDir>windows\x64\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
-    <IntDir>windows\x86\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
-    <IntDir>windows\x64\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <OutDir>windows\x86\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <OutDir>windows\x64\$(Configuration)\</OutDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <IntDir>windows\x86\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <IntDir>windows\x64\$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>
-      </RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <DisableSpecificWarnings>
-      </DisableSpecificWarnings>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Lib>
-      <TargetMachine>MachineX86</TargetMachine>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>
-      </RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Lib>
-      <TargetMachine>MachineX64</TargetMachine>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-      <DisableSpecificWarnings>
-      </DisableSpecificWarnings>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Lib>
-      <Verbose>
-      </Verbose>
-      <AdditionalDependencies>
-      </AdditionalDependencies>
-      <AdditionalLibraryDirectories>
-      </AdditionalLibraryDirectories>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-    </Link>
-    <Lib>
-      <Verbose>
-      </Verbose>
-    </Lib>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <DebugInformationFormat>
-      </DebugInformationFormat>
-      <DisableSpecificWarnings>
-      </DisableSpecificWarnings>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
-      <DebugInformationFormat>
-      </DebugInformationFormat>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-    </Link>
-  </ItemDefinitionGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugMem|Win32">
+      <Configuration>DebugMem</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugMem|x64">
+      <Configuration>DebugMem</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\AbsoluteLayout.cpp" />
+    <ClCompile Include="src\AIAgent.cpp" />
+    <ClCompile Include="src\AIController.cpp" />
+    <ClCompile Include="src\AIMessage.cpp" />
+    <ClCompile Include="src\AIState.cpp" />
+    <ClCompile Include="src\AIStateMachine.cpp" />
+    <ClCompile Include="src\Animation.cpp" />
+    <ClCompile Include="src\AnimationClip.cpp" />
+    <ClCompile Include="src\AnimationController.cpp" />
+    <ClCompile Include="src\AnimationTarget.cpp" />
+    <ClCompile Include="src\AnimationValue.cpp" />
+    <ClCompile Include="src\AudioBuffer.cpp" />
+    <ClCompile Include="src\AudioController.cpp" />
+    <ClCompile Include="src\AudioListener.cpp" />
+    <ClCompile Include="src\AudioSource.cpp" />
+    <ClCompile Include="src\BoundingBox.cpp" />
+    <ClCompile Include="src\BoundingSphere.cpp" />
+    <ClCompile Include="src\Button.cpp" />
+    <ClCompile Include="src\Camera.cpp" />
+    <ClCompile Include="src\CheckBox.cpp" />
+    <ClCompile Include="src\Container.cpp" />
+    <ClCompile Include="src\Control.cpp" />
+    <ClCompile Include="src\ControlFactory.cpp" />
+    <ClCompile Include="src\Curve.cpp" />
+    <ClCompile Include="src\DebugNew.cpp" />
+    <ClCompile Include="src\DepthStencilTarget.cpp" />
+    <ClCompile Include="src\Effect.cpp" />
+    <ClCompile Include="src\FileSystem.cpp" />
+    <ClCompile Include="src\FlowLayout.cpp" />
+    <ClCompile Include="src\Font.cpp" />
+    <ClCompile Include="src\Form.cpp" />
+    <ClCompile Include="src\FrameBuffer.cpp" />
+    <ClCompile Include="src\Frustum.cpp" />
+    <ClCompile Include="src\Game.cpp" />
+    <ClCompile Include="src\Gamepad.cpp" />
+    <ClCompile Include="src\gameplay-main-android.cpp" />
+    <ClCompile Include="src\gameplay-main-blackberry.cpp" />
+    <ClCompile Include="src\gameplay-main-linux.cpp" />
+    <ClCompile Include="src\gameplay-main-windows.cpp" />
+    <ClCompile Include="src\HeightField.cpp" />
+    <ClCompile Include="src\Image.cpp" />
+    <ClCompile Include="src\ImageControl.cpp" />
+    <ClCompile Include="src\Joint.cpp" />
+    <ClCompile Include="src\Joystick.cpp" />
+    <ClCompile Include="src\Label.cpp" />
+    <ClCompile Include="src\Layout.cpp" />
+    <ClCompile Include="src\Light.cpp" />
+    <ClCompile Include="src\Logger.cpp" />
+    <ClCompile Include="src\lua\lua_AbsoluteLayout.cpp" />
+    <ClCompile Include="src\lua\lua_AIAgent.cpp" />
+    <ClCompile Include="src\lua\lua_AIAgentListener.cpp" />
+    <ClCompile Include="src\lua\lua_AIController.cpp" />
+    <ClCompile Include="src\lua\lua_AIMessage.cpp" />
+    <ClCompile Include="src\lua\lua_AIMessageParameterType.cpp" />
+    <ClCompile Include="src\lua\lua_AIState.cpp" />
+    <ClCompile Include="src\lua\lua_AIStateListener.cpp" />
+    <ClCompile Include="src\lua\lua_AIStateMachine.cpp" />
+    <ClCompile Include="src\lua\lua_all_bindings.cpp" />
+    <ClCompile Include="src\lua\lua_Animation.cpp" />
+    <ClCompile Include="src\lua\lua_AnimationClip.cpp" />
+    <ClCompile Include="src\lua\lua_AnimationClipListener.cpp" />
+    <ClCompile Include="src\lua\lua_AnimationClipListenerEventType.cpp" />
+    <ClCompile Include="src\lua\lua_AnimationController.cpp" />
+    <ClCompile Include="src\lua\lua_AnimationTarget.cpp" />
+    <ClCompile Include="src\lua\lua_AnimationValue.cpp" />
+    <ClCompile Include="src\lua\lua_AudioBuffer.cpp" />
+    <ClCompile Include="src\lua\lua_AudioController.cpp" />
+    <ClCompile Include="src\lua\lua_AudioListener.cpp" />
+    <ClCompile Include="src\lua\lua_AudioSource.cpp" />
+    <ClCompile Include="src\lua\lua_AudioSourceState.cpp" />
+    <ClCompile Include="src\lua\lua_BoundingBox.cpp" />
+    <ClCompile Include="src\lua\lua_BoundingSphere.cpp" />
+    <ClCompile Include="src\lua\lua_Bundle.cpp" />
+    <ClCompile Include="src\lua\lua_Button.cpp" />
+    <ClCompile Include="src\lua\lua_Camera.cpp" />
+    <ClCompile Include="src\lua\lua_CameraListener.cpp" />
+    <ClCompile Include="src\lua\lua_CameraType.cpp" />
+    <ClCompile Include="src\lua\lua_CheckBox.cpp" />
+    <ClCompile Include="src\lua\lua_Container.cpp" />
+    <ClCompile Include="src\lua\lua_ContainerScroll.cpp" />
+    <ClCompile Include="src\lua\lua_Control.cpp" />
+    <ClCompile Include="src\lua\lua_ControlAlignment.cpp" />
+    <ClCompile Include="src\lua\lua_ControlAutoSize.cpp" />
+    <ClCompile Include="src\lua\lua_ControlListener.cpp" />
+    <ClCompile Include="src\lua\lua_ControlListenerEventType.cpp" />
+    <ClCompile Include="src\lua\lua_ControlState.cpp" />
+    <ClCompile Include="src\lua\lua_Curve.cpp" />
+    <ClCompile Include="src\lua\lua_CurveInterpolationType.cpp" />
+    <ClCompile Include="src\lua\lua_DepthStencilTarget.cpp" />
+    <ClCompile Include="src\lua\lua_DepthStencilTargetFormat.cpp" />
+    <ClCompile Include="src\lua\lua_Effect.cpp" />
+    <ClCompile Include="src\lua\lua_FileSystem.cpp" />
+    <ClCompile Include="src\lua\lua_FlowLayout.cpp" />
+    <ClCompile Include="src\lua\lua_Font.cpp" />
+    <ClCompile Include="src\lua\lua_FontFormat.cpp" />
+    <ClCompile Include="src\lua\lua_FontJustify.cpp" />
+    <ClCompile Include="src\lua\lua_FontStyle.cpp" />
+    <ClCompile Include="src\lua\lua_FontText.cpp" />
+    <ClCompile Include="src\lua\lua_Form.cpp" />
+    <ClCompile Include="src\lua\lua_FrameBuffer.cpp" />
+    <ClCompile Include="src\lua\lua_Frustum.cpp" />
+    <ClCompile Include="src\lua\lua_Game.cpp" />
+    <ClCompile Include="src\lua\lua_GameClearFlags.cpp" />
+    <ClCompile Include="src\lua\lua_Gamepad.cpp" />
+    <ClCompile Include="src\lua\lua_GamepadButtonMapping.cpp" />
+    <ClCompile Include="src\lua\lua_GamepadGamepadEvent.cpp" />
+    <ClCompile Include="src\lua\lua_GameState.cpp" />
+    <ClCompile Include="src\lua\lua_Gesture.cpp" />
+    <ClCompile Include="src\lua\lua_GestureGestureEvent.cpp" />
+    <ClCompile Include="src\lua\lua_Global.cpp" />
+    <ClCompile Include="src\lua\lua_HeightField.cpp" />
+    <ClCompile Include="src\lua\lua_Image.cpp" />
+    <ClCompile Include="src\lua\lua_ImageControl.cpp" />
+    <ClCompile Include="src\lua\lua_ImageFormat.cpp" />
+    <ClCompile Include="src\lua\lua_Joint.cpp" />
+    <ClCompile Include="src\lua\lua_Joystick.cpp" />
+    <ClCompile Include="src\lua\lua_Keyboard.cpp" />
+    <ClCompile Include="src\lua\lua_KeyboardKey.cpp" />
+    <ClCompile Include="src\lua\lua_KeyboardKeyEvent.cpp" />
+    <ClCompile Include="src\lua\lua_Label.cpp" />
+    <ClCompile Include="src\lua\lua_Layout.cpp" />
+    <ClCompile Include="src\lua\lua_LayoutType.cpp" />
+    <ClCompile Include="src\lua\lua_Light.cpp" />
+    <ClCompile Include="src\lua\lua_LightType.cpp" />
+    <ClCompile Include="src\lua\lua_Logger.cpp" />
+    <ClCompile Include="src\lua\lua_LoggerLevel.cpp" />
+    <ClCompile Include="src\lua\lua_Material.cpp" />
+    <ClCompile Include="src\lua\lua_MaterialParameter.cpp" />
+    <ClCompile Include="src\lua\lua_MathUtil.cpp" />
+    <ClCompile Include="src\lua\lua_Matrix.cpp" />
+    <ClCompile Include="src\lua\lua_Mesh.cpp" />
+    <ClCompile Include="src\lua\lua_MeshBatch.cpp" />
+    <ClCompile Include="src\lua\lua_MeshIndexFormat.cpp" />
+    <ClCompile Include="src\lua\lua_MeshPart.cpp" />
+    <ClCompile Include="src\lua\lua_MeshPrimitiveType.cpp" />
+    <ClCompile Include="src\lua\lua_MeshSkin.cpp" />
+    <ClCompile Include="src\lua\lua_Model.cpp" />
+    <ClCompile Include="src\lua\lua_Mouse.cpp" />
+    <ClCompile Include="src\lua\lua_MouseMouseEvent.cpp" />
+    <ClCompile Include="src\lua\lua_Node.cpp" />
+    <ClCompile Include="src\lua\lua_NodeCloneContext.cpp" />
+    <ClCompile Include="src\lua\lua_NodeType.cpp" />
+    <ClCompile Include="src\lua\lua_ParticleEmitter.cpp" />
+    <ClCompile Include="src\lua\lua_ParticleEmitterTextureBlending.cpp" />
+    <ClCompile Include="src\lua\lua_Pass.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCharacter.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObject.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectType.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionShape.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeDefinition.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeType.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsConstraint.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsController.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsControllerHitFilter.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsControllerHitResult.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsControllerListener.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsControllerListenerEventType.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsFixedConstraint.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsGenericConstraint.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsGhostObject.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsHingeConstraint.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsRigidBody.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsRigidBodyParameters.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsSocketConstraint.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsSpringConstraint.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsVehicle.cpp" />
+    <ClCompile Include="src\lua\lua_PhysicsVehicleWheel.cpp" />
+    <ClCompile Include="src\lua\lua_Plane.cpp" />
+    <ClCompile Include="src\lua\lua_Platform.cpp" />
+    <ClCompile Include="src\lua\lua_Properties.cpp" />
+    <ClCompile Include="src\lua\lua_PropertiesType.cpp" />
+    <ClCompile Include="src\lua\lua_Quaternion.cpp" />
+    <ClCompile Include="src\lua\lua_RadioButton.cpp" />
+    <ClCompile Include="src\lua\lua_Ray.cpp" />
+    <ClCompile Include="src\lua\lua_Rectangle.cpp" />
+    <ClCompile Include="src\lua\lua_Ref.cpp" />
+    <ClCompile Include="src\lua\lua_RenderState.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateAutoBinding.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateBlend.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateCullFaceSide.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateDepthFunction.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateFrontFace.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateStateBlock.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateStencilFunction.cpp" />
+    <ClCompile Include="src\lua\lua_RenderStateStencilOperation.cpp" />
+    <ClCompile Include="src\lua\lua_RenderTarget.cpp" />
+    <ClCompile Include="src\lua\lua_Scene.cpp" />
+    <ClCompile Include="src\lua\lua_SceneDebugFlags.cpp" />
+    <ClCompile Include="src\lua\lua_SceneRenderer.cpp" />
+    <ClCompile Include="src\lua\lua_SceneRendererForward.cpp" />
+    <ClCompile Include="src\lua\lua_ScreenDisplayer.cpp" />
+    <ClCompile Include="src\lua\lua_ScriptController.cpp" />
+    <ClCompile Include="src\lua\lua_ScriptTarget.cpp" />
+    <ClCompile Include="src\lua\lua_Slider.cpp" />
+    <ClCompile Include="src\lua\lua_SpriteBatch.cpp" />
+    <ClCompile Include="src\lua\lua_Technique.cpp" />
+    <ClCompile Include="src\lua\lua_Terrain.cpp" />
+    <ClCompile Include="src\lua\lua_TerrainFlags.cpp" />
+    <ClCompile Include="src\lua\lua_TerrainPatch.cpp" />
+    <ClCompile Include="src\lua\lua_TextBox.cpp" />
+    <ClCompile Include="src\lua\lua_TextBoxInputMode.cpp" />
+    <ClCompile Include="src\lua\lua_Texture.cpp" />
+    <ClCompile Include="src\lua\lua_TextureFilter.cpp" />
+    <ClCompile Include="src\lua\lua_TextureFormat.cpp" />
+    <ClCompile Include="src\lua\lua_TextureSampler.cpp" />
+    <ClCompile Include="src\lua\lua_TextureWrap.cpp" />
+    <ClCompile Include="src\lua\lua_Theme.cpp" />
+    <ClCompile Include="src\lua\lua_ThemeSideRegions.cpp" />
+    <ClCompile Include="src\lua\lua_ThemeStyle.cpp" />
+    <ClCompile Include="src\lua\lua_ThemeThemeImage.cpp" />
+    <ClCompile Include="src\lua\lua_ThemeUVs.cpp" />
+    <ClCompile Include="src\lua\lua_Touch.cpp" />
+    <ClCompile Include="src\lua\lua_TouchTouchEvent.cpp" />
+    <ClCompile Include="src\lua\lua_Transform.cpp" />
+    <ClCompile Include="src\lua\lua_TransformListener.cpp" />
+    <ClCompile Include="src\lua\lua_Uniform.cpp" />
+    <ClCompile Include="src\lua\lua_Vector2.cpp" />
+    <ClCompile Include="src\lua\lua_Vector3.cpp" />
+    <ClCompile Include="src\lua\lua_Vector4.cpp" />
+    <ClCompile Include="src\lua\lua_VertexAttributeBinding.cpp" />
+    <ClCompile Include="src\lua\lua_VertexFormat.cpp" />
+    <ClCompile Include="src\lua\lua_VertexFormatElement.cpp" />
+    <ClCompile Include="src\lua\lua_VertexFormatUsage.cpp" />
+    <ClCompile Include="src\lua\lua_VerticalLayout.cpp" />
+    <ClCompile Include="src\lua\lua_VisibleSet.cpp" />
+    <ClCompile Include="src\lua\lua_VisibleSetDefault.cpp" />
+    <ClCompile Include="src\Material.cpp" />
+    <ClCompile Include="src\MathUtil.cpp" />
+    <ClCompile Include="src\MeshBatch.cpp" />
+    <ClCompile Include="src\Pass.cpp" />
+    <ClCompile Include="src\MaterialParameter.cpp" />
+    <ClCompile Include="src\Matrix.cpp" />
+    <ClCompile Include="src\Mesh.cpp" />
+    <ClCompile Include="src\MeshPart.cpp" />
+    <ClCompile Include="src\MeshSkin.cpp" />
+    <ClCompile Include="src\Model.cpp" />
+    <ClCompile Include="src\Node.cpp" />
+    <ClCompile Include="src\Bundle.cpp" />
+    <ClCompile Include="src\ParticleEmitter.cpp" />
+    <ClCompile Include="src\PhysicsCharacter.cpp" />
+    <ClCompile Include="src\PhysicsCollisionObject.cpp" />
+    <ClCompile Include="src\PhysicsCollisionShape.cpp" />
+    <ClCompile Include="src\PhysicsConstraint.cpp" />
+    <ClCompile Include="src\PhysicsController.cpp" />
+    <ClCompile Include="src\PhysicsFixedConstraint.cpp" />
+    <ClCompile Include="src\PhysicsGenericConstraint.cpp" />
+    <ClCompile Include="src\PhysicsGhostObject.cpp" />
+    <ClCompile Include="src\PhysicsHingeConstraint.cpp" />
+    <ClCompile Include="src\PhysicsRigidBody.cpp" />
+    <ClCompile Include="src\PhysicsSocketConstraint.cpp" />
+    <ClCompile Include="src\PhysicsSpringConstraint.cpp" />
+    <ClCompile Include="src\PhysicsVehicle.cpp" />
+    <ClCompile Include="src\PhysicsVehicleWheel.cpp" />
+    <ClCompile Include="src\Plane.cpp" />
+    <ClCompile Include="src\Platform.cpp" />
+    <ClCompile Include="src\PlatformAndroid.cpp" />
+    <ClCompile Include="src\PlatformBlackBerry.cpp" />
+    <ClCompile Include="src\PlatformLinux.cpp" />
+    <ClCompile Include="src\PlatformWindows.cpp" />
+    <ClCompile Include="src\Properties.cpp" />
+    <ClCompile Include="src\Quaternion.cpp" />
+    <ClCompile Include="src\RadioButton.cpp" />
+    <ClCompile Include="src\Ray.cpp" />
+    <ClCompile Include="src\Rectangle.cpp" />
+    <ClCompile Include="src\Ref.cpp" />
+    <ClCompile Include="src\RenderState.cpp" />
+    <ClCompile Include="src\RenderTarget.cpp" />
+    <ClCompile Include="src\Scene.cpp" />
+    <ClCompile Include="src\SceneLoader.cpp" />
+    <ClCompile Include="src\SceneRenderer.cpp" />
+    <ClCompile Include="src\SceneRendererForward.cpp" />
+    <ClCompile Include="src\ScreenDisplayer.cpp" />
+    <ClCompile Include="src\ScriptController.cpp" />
+    <ClCompile Include="src\ScriptTarget.cpp" />
+    <ClCompile Include="src\Slider.cpp" />
+    <ClCompile Include="src\SocialAchievement.cpp" />
+    <ClCompile Include="src\SocialChallenge.cpp" />
+    <ClCompile Include="src\SocialController.cpp" />
+    <ClCompile Include="src\SocialPlayer.cpp" />
+    <ClCompile Include="src\SocialScore.cpp" />
+    <ClCompile Include="src\SocialSessionListener.cpp" />
+    <ClCompile Include="src\social\GooglePlaySocialSession.cpp" />
+    <ClCompile Include="src\social\ScoreloopSocialSession.cpp" />
+    <ClCompile Include="src\SpriteBatch.cpp" />
+    <ClCompile Include="src\Technique.cpp" />
+    <ClCompile Include="src\Terrain.cpp" />
+    <ClCompile Include="src\TerrainPatch.cpp" />
+    <ClCompile Include="src\TextBox.cpp" />
+    <ClCompile Include="src\Texture.cpp" />
+    <ClCompile Include="src\Theme.cpp" />
+    <ClCompile Include="src\ThemeStyle.cpp" />
+    <ClCompile Include="src\Transform.cpp" />
+    <ClCompile Include="src\Vector2.cpp" />
+    <ClCompile Include="src\Vector3.cpp" />
+    <ClCompile Include="src\Vector4.cpp" />
+    <ClCompile Include="src\VertexAttributeBinding.cpp" />
+    <ClCompile Include="src\VertexFormat.cpp" />
+    <ClCompile Include="src\VerticalLayout.cpp" />
+    <ClCompile Include="src\VisibleSetDefault.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\AbsoluteLayout.h" />
+    <ClInclude Include="src\AIAgent.h" />
+    <ClInclude Include="src\AIController.h" />
+    <ClInclude Include="src\AIMessage.h" />
+    <ClInclude Include="src\AIState.h" />
+    <ClInclude Include="src\AIStateMachine.h" />
+    <ClInclude Include="src\Animation.h" />
+    <ClInclude Include="src\AnimationClip.h" />
+    <ClInclude Include="src\AnimationController.h" />
+    <ClInclude Include="src\AnimationTarget.h" />
+    <ClInclude Include="src\AnimationValue.h" />
+    <ClInclude Include="src\AudioBuffer.h" />
+    <ClInclude Include="src\AudioController.h" />
+    <ClInclude Include="src\AudioListener.h" />
+    <ClInclude Include="src\AudioSource.h" />
+    <ClInclude Include="src\Base.h" />
+    <ClInclude Include="src\BoundingBox.h" />
+    <ClInclude Include="src\BoundingSphere.h" />
+    <ClInclude Include="src\Button.h" />
+    <ClInclude Include="src\Camera.h" />
+    <ClInclude Include="src\CheckBox.h" />
+    <ClInclude Include="src\Container.h" />
+    <ClInclude Include="src\Control.h" />
+    <ClInclude Include="src\ControlFactory.h" />
+    <ClInclude Include="src\Curve.h" />
+    <ClInclude Include="src\DebugNew.h" />
+    <ClInclude Include="src\DepthStencilTarget.h" />
+    <ClInclude Include="src\Effect.h" />
+    <ClInclude Include="src\FileSystem.h" />
+    <ClInclude Include="src\FlowLayout.h" />
+    <ClInclude Include="src\Font.h" />
+    <ClInclude Include="src\Form.h" />
+    <ClInclude Include="src\FrameBuffer.h" />
+    <ClInclude Include="src\Frustum.h" />
+    <ClInclude Include="src\Game.h" />
+    <ClInclude Include="src\Gamepad.h" />
+    <ClInclude Include="src\gameplay.h" />
+    <ClInclude Include="src\Gesture.h" />
+    <ClInclude Include="src\HeightField.h" />
+    <ClInclude Include="src\Image.h" />
+    <ClInclude Include="src\ImageControl.h" />
+    <ClInclude Include="src\Joint.h" />
+    <ClInclude Include="src\Joystick.h" />
+    <ClInclude Include="src\Keyboard.h" />
+    <ClInclude Include="src\Label.h" />
+    <ClInclude Include="src\Layout.h" />
+    <ClInclude Include="src\Light.h" />
+    <ClInclude Include="src\Logger.h" />
+    <ClInclude Include="src\lua\lua_AbsoluteLayout.h" />
+    <ClInclude Include="src\lua\lua_AIAgent.h" />
+    <ClInclude Include="src\lua\lua_AIAgentListener.h" />
+    <ClInclude Include="src\lua\lua_AIController.h" />
+    <ClInclude Include="src\lua\lua_AIMessage.h" />
+    <ClInclude Include="src\lua\lua_AIMessageParameterType.h" />
+    <ClInclude Include="src\lua\lua_AIState.h" />
+    <ClInclude Include="src\lua\lua_AIStateListener.h" />
+    <ClInclude Include="src\lua\lua_AIStateMachine.h" />
+    <ClInclude Include="src\lua\lua_all_bindings.h" />
+    <ClInclude Include="src\lua\lua_Animation.h" />
+    <ClInclude Include="src\lua\lua_AnimationClip.h" />
+    <ClInclude Include="src\lua\lua_AnimationClipListener.h" />
+    <ClInclude Include="src\lua\lua_AnimationClipListenerEventType.h" />
+    <ClInclude Include="src\lua\lua_AnimationController.h" />
+    <ClInclude Include="src\lua\lua_AnimationTarget.h" />
+    <ClInclude Include="src\lua\lua_AnimationValue.h" />
+    <ClInclude Include="src\lua\lua_AudioBuffer.h" />
+    <ClInclude Include="src\lua\lua_AudioController.h" />
+    <ClInclude Include="src\lua\lua_AudioListener.h" />
+    <ClInclude Include="src\lua\lua_AudioSource.h" />
+    <ClInclude Include="src\lua\lua_AudioSourceState.h" />
+    <ClInclude Include="src\lua\lua_BoundingBox.h" />
+    <ClInclude Include="src\lua\lua_BoundingSphere.h" />
+    <ClInclude Include="src\lua\lua_Bundle.h" />
+    <ClInclude Include="src\lua\lua_Button.h" />
+    <ClInclude Include="src\lua\lua_Camera.h" />
+    <ClInclude Include="src\lua\lua_CameraListener.h" />
+    <ClInclude Include="src\lua\lua_CameraType.h" />
+    <ClInclude Include="src\lua\lua_CheckBox.h" />
+    <ClInclude Include="src\lua\lua_Container.h" />
+    <ClInclude Include="src\lua\lua_ContainerScroll.h" />
+    <ClInclude Include="src\lua\lua_Control.h" />
+    <ClInclude Include="src\lua\lua_ControlAlignment.h" />
+    <ClInclude Include="src\lua\lua_ControlAutoSize.h" />
+    <ClInclude Include="src\lua\lua_ControlListener.h" />
+    <ClInclude Include="src\lua\lua_ControlListenerEventType.h" />
+    <ClInclude Include="src\lua\lua_ControlState.h" />
+    <ClInclude Include="src\lua\lua_Curve.h" />
+    <ClInclude Include="src\lua\lua_CurveInterpolationType.h" />
+    <ClInclude Include="src\lua\lua_DepthStencilTarget.h" />
+    <ClInclude Include="src\lua\lua_DepthStencilTargetFormat.h" />
+    <ClInclude Include="src\lua\lua_Effect.h" />
+    <ClInclude Include="src\lua\lua_FileSystem.h" />
+    <ClInclude Include="src\lua\lua_FlowLayout.h" />
+    <ClInclude Include="src\lua\lua_Font.h" />
+    <ClInclude Include="src\lua\lua_FontFormat.h" />
+    <ClInclude Include="src\lua\lua_FontJustify.h" />
+    <ClInclude Include="src\lua\lua_FontStyle.h" />
+    <ClInclude Include="src\lua\lua_FontText.h" />
+    <ClInclude Include="src\lua\lua_Form.h" />
+    <ClInclude Include="src\lua\lua_FrameBuffer.h" />
+    <ClInclude Include="src\lua\lua_Frustum.h" />
+    <ClInclude Include="src\lua\lua_Game.h" />
+    <ClInclude Include="src\lua\lua_GameClearFlags.h" />
+    <ClInclude Include="src\lua\lua_Gamepad.h" />
+    <ClInclude Include="src\lua\lua_GamepadButtonMapping.h" />
+    <ClInclude Include="src\lua\lua_GamepadGamepadEvent.h" />
+    <ClInclude Include="src\lua\lua_GameState.h" />
+    <ClInclude Include="src\lua\lua_Gesture.h" />
+    <ClInclude Include="src\lua\lua_GestureGestureEvent.h" />
+    <ClInclude Include="src\lua\lua_Global.h" />
+    <ClInclude Include="src\lua\lua_HeightField.h" />
+    <ClInclude Include="src\lua\lua_Image.h" />
+    <ClInclude Include="src\lua\lua_ImageControl.h" />
+    <ClInclude Include="src\lua\lua_ImageFormat.h" />
+    <ClInclude Include="src\lua\lua_Joint.h" />
+    <ClInclude Include="src\lua\lua_Joystick.h" />
+    <ClInclude Include="src\lua\lua_Keyboard.h" />
+    <ClInclude Include="src\lua\lua_KeyboardKey.h" />
+    <ClInclude Include="src\lua\lua_KeyboardKeyEvent.h" />
+    <ClInclude Include="src\lua\lua_Label.h" />
+    <ClInclude Include="src\lua\lua_Layout.h" />
+    <ClInclude Include="src\lua\lua_LayoutType.h" />
+    <ClInclude Include="src\lua\lua_Light.h" />
+    <ClInclude Include="src\lua\lua_LightType.h" />
+    <ClInclude Include="src\lua\lua_Logger.h" />
+    <ClInclude Include="src\lua\lua_LoggerLevel.h" />
+    <ClInclude Include="src\lua\lua_Material.h" />
+    <ClInclude Include="src\lua\lua_MaterialParameter.h" />
+    <ClInclude Include="src\lua\lua_MathUtil.h" />
+    <ClInclude Include="src\lua\lua_Matrix.h" />
+    <ClInclude Include="src\lua\lua_Mesh.h" />
+    <ClInclude Include="src\lua\lua_MeshBatch.h" />
+    <ClInclude Include="src\lua\lua_MeshIndexFormat.h" />
+    <ClInclude Include="src\lua\lua_MeshPart.h" />
+    <ClInclude Include="src\lua\lua_MeshPrimitiveType.h" />
+    <ClInclude Include="src\lua\lua_MeshSkin.h" />
+    <ClInclude Include="src\lua\lua_Model.h" />
+    <ClInclude Include="src\lua\lua_Mouse.h" />
+    <ClInclude Include="src\lua\lua_MouseMouseEvent.h" />
+    <ClInclude Include="src\lua\lua_Node.h" />
+    <ClInclude Include="src\lua\lua_NodeCloneContext.h" />
+    <ClInclude Include="src\lua\lua_NodeType.h" />
+    <ClInclude Include="src\lua\lua_ParticleEmitter.h" />
+    <ClInclude Include="src\lua\lua_ParticleEmitterTextureBlending.h" />
+    <ClInclude Include="src\lua\lua_Pass.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCharacter.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObject.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectType.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionShape.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeDefinition.h" />
+    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeType.h" />
+    <ClInclude Include="src\lua\lua_PhysicsConstraint.h" />
+    <ClInclude Include="src\lua\lua_PhysicsController.h" />
+    <ClInclude Include="src\lua\lua_PhysicsControllerHitFilter.h" />
+    <ClInclude Include="src\lua\lua_PhysicsControllerHitResult.h" />
+    <ClInclude Include="src\lua\lua_PhysicsControllerListener.h" />
+    <ClInclude Include="src\lua\lua_PhysicsControllerListenerEventType.h" />
+    <ClInclude Include="src\lua\lua_PhysicsFixedConstraint.h" />
+    <ClInclude Include="src\lua\lua_PhysicsGenericConstraint.h" />
+    <ClInclude Include="src\lua\lua_PhysicsGhostObject.h" />
+    <ClInclude Include="src\lua\lua_PhysicsHingeConstraint.h" />
+    <ClInclude Include="src\lua\lua_PhysicsRigidBody.h" />
+    <ClInclude Include="src\lua\lua_PhysicsRigidBodyParameters.h" />
+    <ClInclude Include="src\lua\lua_PhysicsSocketConstraint.h" />
+    <ClInclude Include="src\lua\lua_PhysicsSpringConstraint.h" />
+    <ClInclude Include="src\lua\lua_PhysicsVehicle.h" />
+    <ClInclude Include="src\lua\lua_PhysicsVehicleWheel.h" />
+    <ClInclude Include="src\lua\lua_Plane.h" />
+    <ClInclude Include="src\lua\lua_Platform.h" />
+    <ClInclude Include="src\lua\lua_Properties.h" />
+    <ClInclude Include="src\lua\lua_PropertiesType.h" />
+    <ClInclude Include="src\lua\lua_Quaternion.h" />
+    <ClInclude Include="src\lua\lua_RadioButton.h" />
+    <ClInclude Include="src\lua\lua_Ray.h" />
+    <ClInclude Include="src\lua\lua_Rectangle.h" />
+    <ClInclude Include="src\lua\lua_Ref.h" />
+    <ClInclude Include="src\lua\lua_RenderState.h" />
+    <ClInclude Include="src\lua\lua_RenderStateAutoBinding.h" />
+    <ClInclude Include="src\lua\lua_RenderStateBlend.h" />
+    <ClInclude Include="src\lua\lua_RenderStateCullFaceSide.h" />
+    <ClInclude Include="src\lua\lua_RenderStateDepthFunction.h" />
+    <ClInclude Include="src\lua\lua_RenderStateFrontFace.h" />
+    <ClInclude Include="src\lua\lua_RenderStateStateBlock.h" />
+    <ClInclude Include="src\lua\lua_RenderStateStencilFunction.h" />
+    <ClInclude Include="src\lua\lua_RenderStateStencilOperation.h" />
+    <ClInclude Include="src\lua\lua_RenderTarget.h" />
+    <ClInclude Include="src\lua\lua_Scene.h" />
+    <ClInclude Include="src\lua\lua_SceneDebugFlags.h" />
+    <ClInclude Include="src\lua\lua_SceneRenderer.h" />
+    <ClInclude Include="src\lua\lua_SceneRendererForward.h" />
+    <ClInclude Include="src\lua\lua_ScreenDisplayer.h" />
+    <ClInclude Include="src\lua\lua_ScriptController.h" />
+    <ClInclude Include="src\lua\lua_ScriptTarget.h" />
+    <ClInclude Include="src\lua\lua_Slider.h" />
+    <ClInclude Include="src\lua\lua_SpriteBatch.h" />
+    <ClInclude Include="src\lua\lua_Technique.h" />
+    <ClInclude Include="src\lua\lua_Terrain.h" />
+    <ClInclude Include="src\lua\lua_TerrainFlags.h" />
+    <ClInclude Include="src\lua\lua_TerrainPatch.h" />
+    <ClInclude Include="src\lua\lua_TextBox.h" />
+    <ClInclude Include="src\lua\lua_TextBoxInputMode.h" />
+    <ClInclude Include="src\lua\lua_Texture.h" />
+    <ClInclude Include="src\lua\lua_TextureFilter.h" />
+    <ClInclude Include="src\lua\lua_TextureFormat.h" />
+    <ClInclude Include="src\lua\lua_TextureSampler.h" />
+    <ClInclude Include="src\lua\lua_TextureWrap.h" />
+    <ClInclude Include="src\lua\lua_Theme.h" />
+    <ClInclude Include="src\lua\lua_ThemeSideRegions.h" />
+    <ClInclude Include="src\lua\lua_ThemeStyle.h" />
+    <ClInclude Include="src\lua\lua_ThemeThemeImage.h" />
+    <ClInclude Include="src\lua\lua_ThemeUVs.h" />
+    <ClInclude Include="src\lua\lua_Touch.h" />
+    <ClInclude Include="src\lua\lua_TouchTouchEvent.h" />
+    <ClInclude Include="src\lua\lua_Transform.h" />
+    <ClInclude Include="src\lua\lua_TransformListener.h" />
+    <ClInclude Include="src\lua\lua_Uniform.h" />
+    <ClInclude Include="src\lua\lua_Vector2.h" />
+    <ClInclude Include="src\lua\lua_Vector3.h" />
+    <ClInclude Include="src\lua\lua_Vector4.h" />
+    <ClInclude Include="src\lua\lua_VertexAttributeBinding.h" />
+    <ClInclude Include="src\lua\lua_VertexFormat.h" />
+    <ClInclude Include="src\lua\lua_VertexFormatElement.h" />
+    <ClInclude Include="src\lua\lua_VertexFormatUsage.h" />
+    <ClInclude Include="src\lua\lua_VerticalLayout.h" />
+    <ClInclude Include="src\lua\lua_VisibleSet.h" />
+    <ClInclude Include="src\lua\lua_VisibleSetDefault.h" />
+    <ClInclude Include="src\Material.h" />
+    <ClInclude Include="src\MathUtil.h" />
+    <ClInclude Include="src\MeshBatch.h" />
+    <ClInclude Include="src\Mouse.h" />
+    <ClInclude Include="src\Pass.h" />
+    <ClInclude Include="src\MaterialParameter.h" />
+    <ClInclude Include="src\Matrix.h" />
+    <ClInclude Include="src\Mesh.h" />
+    <ClInclude Include="src\MeshPart.h" />
+    <ClInclude Include="src\MeshSkin.h" />
+    <ClInclude Include="src\Model.h" />
+    <ClInclude Include="src\Node.h" />
+    <ClInclude Include="src\Bundle.h" />
+    <ClInclude Include="src\ParticleEmitter.h" />
+    <ClInclude Include="src\PhysicsCharacter.h" />
+    <ClInclude Include="src\PhysicsCollisionObject.h" />
+    <ClInclude Include="src\PhysicsCollisionShape.h" />
+    <ClInclude Include="src\PhysicsConstraint.h" />
+    <ClInclude Include="src\PhysicsController.h" />
+    <ClInclude Include="src\PhysicsFixedConstraint.h" />
+    <ClInclude Include="src\PhysicsGenericConstraint.h" />
+    <ClInclude Include="src\PhysicsGhostObject.h" />
+    <ClInclude Include="src\PhysicsHingeConstraint.h" />
+    <ClInclude Include="src\PhysicsRigidBody.h" />
+    <ClInclude Include="src\PhysicsSocketConstraint.h" />
+    <ClInclude Include="src\PhysicsSpringConstraint.h" />
+    <ClInclude Include="src\PhysicsVehicle.h" />
+    <ClInclude Include="src\PhysicsVehicleWheel.h" />
+    <ClInclude Include="src\Plane.h" />
+    <ClInclude Include="src\Platform.h" />
+    <ClInclude Include="src\Properties.h" />
+    <ClInclude Include="src\Quaternion.h" />
+    <ClInclude Include="src\RadioButton.h" />
+    <ClInclude Include="src\Ray.h" />
+    <ClInclude Include="src\Rectangle.h" />
+    <ClInclude Include="src\Ref.h" />
+    <ClInclude Include="src\RenderState.h" />
+    <ClInclude Include="src\RenderTarget.h" />
+    <ClInclude Include="src\Scene.h" />
+    <ClInclude Include="src\SceneLoader.h" />
+    <ClInclude Include="src\SceneRenderer.h" />
+    <ClInclude Include="src\SceneRendererForward.h" />
+    <ClInclude Include="src\ScreenDisplayer.h" />
+    <ClInclude Include="src\ScriptController.h" />
+    <ClInclude Include="src\ScriptTarget.h" />
+    <ClInclude Include="src\Slider.h" />
+    <ClInclude Include="src\SocialAchievement.h" />
+    <ClInclude Include="src\SocialChallenge.h" />
+    <ClInclude Include="src\SocialController.h" />
+    <ClInclude Include="src\SocialPlayer.h" />
+    <ClInclude Include="src\SocialScore.h" />
+    <ClInclude Include="src\SocialSession.h" />
+    <ClInclude Include="src\SocialSessionListener.h" />
+    <ClInclude Include="src\social\GooglePlaySocialSession.h" />
+    <ClInclude Include="src\social\ScoreloopSocialSession.h" />
+    <ClInclude Include="src\SpriteBatch.h" />
+    <ClInclude Include="src\Stream.h" />
+    <ClInclude Include="src\Technique.h" />
+    <ClInclude Include="src\Terrain.h" />
+    <ClInclude Include="src\TerrainPatch.h" />
+    <ClInclude Include="src\TextBox.h" />
+    <ClInclude Include="src\Texture.h" />
+    <ClInclude Include="src\Theme.h" />
+    <ClInclude Include="src\ThemeStyle.h" />
+    <ClInclude Include="src\TimeListener.h" />
+    <ClInclude Include="src\Touch.h" />
+    <ClInclude Include="src\Transform.h" />
+    <ClInclude Include="src\Vector2.h" />
+    <ClInclude Include="src\Vector3.h" />
+    <ClInclude Include="src\Vector4.h" />
+    <ClInclude Include="src\VertexAttributeBinding.h" />
+    <ClInclude Include="src\VertexFormat.h" />
+    <ClInclude Include="src\VerticalLayout.h" />
+    <ClInclude Include="src\VisibleSet.h" />
+    <ClInclude Include="src\VisibleSetDefault.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="res\shaders\colored.frag" />
+    <None Include="res\shaders\colored.vert" />
+    <None Include="res\shaders\font.frag" />
+    <None Include="res\shaders\font.vert" />
+    <None Include="res\shaders\form.frag" />
+    <None Include="res\shaders\form.vert" />
+    <None Include="res\shaders\lighting.frag" />
+    <None Include="res\shaders\lighting.vert" />
+    <None Include="res\shaders\skinning-none.vert" />
+    <None Include="res\shaders\skinning.vert" />
+    <None Include="res\shaders\sprite.frag" />
+    <None Include="res\shaders\sprite.vert" />
+    <None Include="res\shaders\terrain.frag" />
+    <None Include="res\shaders\terrain.vert" />
+    <None Include="res\shaders\textured.frag" />
+    <None Include="res\shaders\textured.vert" />
+    <None Include="src\BoundingBox.inl" />
+    <None Include="src\BoundingSphere.inl" />
+    <None Include="src\Game.inl" />
+    <None Include="src\Image.inl" />
+    <None Include="src\MathUtil.inl" />
+    <None Include="src\MathUtilNeon.inl" />
+    <None Include="src\Joystick.inl" />
+    <None Include="src\Matrix.inl" />
+    <None Include="src\MeshBatch.inl" />
+    <None Include="src\Plane.inl" />
+    <None Include="src\Quaternion.inl" />
+    <None Include="src\Ray.inl" />
+    <None Include="src\ScriptController.inl" />
+    <None Include="src\Vector2.inl" />
+    <None Include="src\Vector3.inl" />
+    <None Include="src\Vector4.inl" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="src\PhysicsConstraint.inl" />
+    <None Include="src\PhysicsFixedConstraint.inl" />
+    <None Include="src\PhysicsGenericConstraint.inl" />
+    <None Include="src\PhysicsRigidBody.inl" />
+    <None Include="src\PhysicsSpringConstraint.inl" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{1032BA4B-57EB-4348-9E03-29DD63E80E4A}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>gameplay</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>windows\x86\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>windows\x64\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
+    <OutDir>windows\x86\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
+    <OutDir>windows\x64\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <IntDir>windows\x86\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <IntDir>windows\x64\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
+    <IntDir>windows\x86\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
+    <IntDir>windows\x64\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>windows\x86\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>windows\x64\$(Configuration)\</OutDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <IntDir>windows\x86\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <IntDir>windows\x64\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>
+      </RuntimeTypeInfo>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <DisableSpecificWarnings>
+      </DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <Lib>
+      <TargetMachine>MachineX86</TargetMachine>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>
+      </RuntimeTypeInfo>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <Lib>
+      <TargetMachine>MachineX64</TargetMachine>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+      <DisableSpecificWarnings>
+      </DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <Lib>
+      <Verbose>
+      </Verbose>
+      <AdditionalDependencies>
+      </AdditionalDependencies>
+      <AdditionalLibraryDirectories>
+      </AdditionalLibraryDirectories>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_LIB;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+    </Link>
+    <Lib>
+      <Verbose>
+      </Verbose>
+    </Lib>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DebugInformationFormat>
+      </DebugInformationFormat>
+      <DisableSpecificWarnings>
+      </DisableSpecificWarnings>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>$(ProjectDir)src;..\external-deps\lua\include;..\external-deps\bullet\include;..\external-deps\openal\include\AL;..\external-deps\alut\include\AL;..\external-deps\oggvorbis\include;..\external-deps\glew\include;..\external-deps\png\include;..\external-deps\zlib\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DebugInformationFormat>
+      </DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+    </Link>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>

+ 1956 - 1968
gameplay/gameplay.vcxproj.filters

@@ -1,1969 +1,1957 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="src">
-      <UniqueIdentifier>{c4d4da1c-81e2-4944-901c-200e1c4d80e5}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res">
-      <UniqueIdentifier>{4a30ac71-e135-47d3-9f56-baac7cffe64c}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res\shaders">
-      <UniqueIdentifier>{be0b36f1-49ed-4a06-9f1f-57c654a554fe}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="src\lua">
-      <UniqueIdentifier>{21cf31c6-9c10-44cb-a864-d46a0e7bfe5e}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="src\social">
-      <UniqueIdentifier>{7bd5ee6c-c0cc-4ae3-b7a9-443fb391b944}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\Plane.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PlatformBlackBerry.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PlatformWindows.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Quaternion.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Ray.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Rectangle.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Ref.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Scene.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SpriteBatch.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Texture.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Transform.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Vector2.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Vector3.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Vector4.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\VertexAttributeBinding.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\VertexFormat.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Properties.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Technique.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Pass.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\RenderState.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsController.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsRigidBody.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsConstraint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsHingeConstraint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsFixedConstraint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsGenericConstraint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsSocketConstraint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsSpringConstraint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SceneLoader.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\RenderTarget.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PlatformAndroid.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AbsoluteLayout.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\RadioButton.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Slider.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\VerticalLayout.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Theme.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\TextBox.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsCharacter.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsCollisionObject.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsGhostObject.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsCollisionShape.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ThemeStyle.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ScriptController.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ScreenDisplayer.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AIAgent.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AIController.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AIMessage.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ScriptTarget.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PlatformLinux.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsVehicle.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsVehicleWheel.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Terrain.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\TerrainPatch.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Platform.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SocialController.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\social\ScoreloopSocialSession.cpp">
-      <Filter>src\social</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SocialAchievement.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SocialPlayer.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SocialScore.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SocialChallenge.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SocialSessionListener.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SceneRenderer.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SceneRendererForward.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\VisibleSetDefault.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\social\GooglePlaySocialSession.cpp">
-      <Filter>src\social</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AIState.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AIStateMachine.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Animation.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AnimationClip.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AnimationController.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AnimationTarget.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AnimationValue.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AudioBuffer.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AudioController.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AudioListener.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\AudioSource.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\BoundingBox.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\BoundingSphere.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Bundle.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Button.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Camera.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\CheckBox.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Container.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Control.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Curve.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\DebugNew.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\DepthStencilTarget.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Effect.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\FileSystem.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\FlowLayout.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Font.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Form.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\FrameBuffer.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Frustum.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Game.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Gamepad.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\gameplay-main-android.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\gameplay-main-blackberry.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\gameplay-main-linux.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\gameplay-main-windows.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\HeightField.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Image.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ImageControl.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Joint.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Joystick.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Label.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Layout.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Light.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Logger.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Material.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\MaterialParameter.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\MathUtil.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Matrix.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Mesh.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\MeshBatch.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\MeshPart.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\MeshSkin.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Model.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Node.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ParticleEmitter.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\ControlFactory.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AbsoluteLayout.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIAgent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIAgentListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIController.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIMessage.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIMessageParameterType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIState.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIStateListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AIStateMachine.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_all_bindings.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Animation.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AnimationClip.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AnimationClipListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AnimationClipListenerEventType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AnimationController.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AnimationTarget.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AnimationValue.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AudioBuffer.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AudioController.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AudioListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AudioSource.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_AudioSourceState.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_BoundingBox.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_BoundingSphere.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Bundle.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Button.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Camera.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_CameraType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_CheckBox.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Container.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ContainerScroll.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Control.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ControlAlignment.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ControlAutoSize.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ControlListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ControlListenerEventType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ControlState.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Curve.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_CurveInterpolationType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_DepthStencilTarget.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_DepthStencilTargetFormat.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Effect.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FileSystem.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FlowLayout.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Font.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FontFormat.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FontJustify.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FontStyle.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FontText.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Form.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_FrameBuffer.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Frustum.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Game.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_GameClearFlags.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Gamepad.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_GamepadButtonMapping.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_GamepadGamepadEvent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_GameState.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Gesture.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_GestureGestureEvent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Global.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_HeightField.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Image.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ImageControl.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ImageFormat.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Joint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Joystick.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Keyboard.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_KeyboardKey.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_KeyboardKeyEvent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Label.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Layout.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_LayoutType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Light.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_LightType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Logger.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_LoggerLevel.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Material.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MaterialParameter.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MathUtil.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Matrix.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Mesh.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MeshBatch.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MeshIndexFormat.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MeshPart.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MeshPrimitiveType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MeshSkin.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Model.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Mouse.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_MouseMouseEvent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Node.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_NodeCloneContext.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_NodeType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ParticleEmitter.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ParticleEmitterTextureBlending.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Pass.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCharacter.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObject.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShape.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeDefinition.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsConstraint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsController.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsControllerHitFilter.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsControllerHitResult.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsControllerListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsControllerListenerEventType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsFixedConstraint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsGenericConstraint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsGhostObject.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsHingeConstraint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsRigidBody.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsRigidBodyParameters.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsSocketConstraint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsSpringConstraint.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsVehicle.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PhysicsVehicleWheel.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Plane.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Platform.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Properties.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_PropertiesType.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Quaternion.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RadioButton.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Ray.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Rectangle.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Ref.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderState.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateAutoBinding.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateBlend.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateCullFaceSide.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateDepthFunction.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateFrontFace.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateStateBlock.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateStencilFunction.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderStateStencilOperation.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_RenderTarget.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Scene.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_SceneDebugFlags.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_SceneRenderer.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_SceneRendererForward.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ScreenDisplayer.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ScriptController.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ScriptTarget.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Slider.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_SpriteBatch.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Technique.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Terrain.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TerrainFlags.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextBox.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextBoxInputMode.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Texture.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextureFilter.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextureFormat.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextureSampler.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TextureWrap.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Theme.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ThemeSideRegions.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ThemeStyle.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ThemeThemeImage.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_ThemeUVs.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Touch.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TouchTouchEvent.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Transform.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TransformListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Uniform.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Vector2.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Vector3.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_Vector4.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_VertexAttributeBinding.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_VertexFormat.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_VertexFormatElement.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_VertexFormatUsage.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_VerticalLayout.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_VisibleSet.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_VisibleSetDefault.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_TerrainPatch.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-    <ClCompile Include="src\lua\lua_CameraListener.cpp">
-      <Filter>src\lua</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\Plane.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Platform.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Quaternion.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Ray.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Rectangle.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Ref.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Scene.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SpriteBatch.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Texture.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Transform.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Vector2.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Vector3.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Vector4.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\VertexAttributeBinding.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\VertexFormat.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ParticleEmitter.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Properties.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Technique.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Pass.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\RenderState.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsController.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsRigidBody.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsConstraint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsSpringConstraint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsFixedConstraint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsGenericConstraint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsHingeConstraint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsSocketConstraint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SceneLoader.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\RenderTarget.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Touch.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AbsoluteLayout.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\RadioButton.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Slider.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\VerticalLayout.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Theme.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\TextBox.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsCharacter.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsCollisionObject.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\TimeListener.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsGhostObject.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsCollisionShape.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ScreenDisplayer.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ThemeStyle.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ScriptController.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AIAgent.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AIController.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ScriptTarget.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsVehicleWheel.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsVehicle.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Stream.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Terrain.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\TerrainPatch.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SocialController.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SocialSession.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SocialAchievement.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SocialPlayer.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SocialSessionListener.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SocialScore.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\social\ScoreloopSocialSession.h">
-      <Filter>src\social</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SocialChallenge.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SceneRenderer.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SceneRendererForward.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\VisibleSet.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\VisibleSetDefault.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\social\GooglePlaySocialSession.h">
-      <Filter>src\social</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AIMessage.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AIState.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AIStateMachine.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Animation.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AnimationClip.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AnimationController.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AnimationTarget.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AnimationValue.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AudioBuffer.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AudioController.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AudioListener.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\AudioSource.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Base.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\BoundingBox.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\BoundingSphere.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Bundle.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Button.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Camera.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\CheckBox.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Container.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Control.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Curve.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\DebugNew.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\DepthStencilTarget.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Effect.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\FileSystem.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\FlowLayout.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Font.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Form.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\FrameBuffer.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Frustum.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Game.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Gamepad.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\gameplay.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Gesture.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\HeightField.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Image.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ImageControl.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Joint.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Joystick.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Keyboard.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Label.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Layout.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Light.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Logger.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Material.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\MaterialParameter.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\MathUtil.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Matrix.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Mesh.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\MeshBatch.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\MeshPart.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\MeshSkin.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Model.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Mouse.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Node.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\ControlFactory.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AbsoluteLayout.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIAgent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIAgentListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIController.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIMessage.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIMessageParameterType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIState.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIStateListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AIStateMachine.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_all_bindings.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Animation.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AnimationClip.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AnimationClipListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AnimationClipListenerEventType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AnimationController.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AnimationTarget.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AnimationValue.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AudioBuffer.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AudioController.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AudioListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AudioSource.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_AudioSourceState.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_BoundingBox.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_BoundingSphere.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Bundle.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Button.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Camera.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_CameraType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_CheckBox.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Container.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ContainerScroll.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Control.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ControlAlignment.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ControlAutoSize.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ControlListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ControlListenerEventType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ControlState.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Curve.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_CurveInterpolationType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_DepthStencilTarget.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_DepthStencilTargetFormat.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Effect.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FileSystem.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FlowLayout.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Font.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FontFormat.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FontJustify.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FontStyle.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FontText.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Form.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_FrameBuffer.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Frustum.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Game.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_GameClearFlags.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Gamepad.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_GamepadButtonMapping.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_GamepadGamepadEvent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_GameState.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Gesture.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_GestureGestureEvent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Global.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_HeightField.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Image.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ImageControl.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ImageFormat.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Joint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Joystick.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Keyboard.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_KeyboardKey.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_KeyboardKeyEvent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Label.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Layout.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_LayoutType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Light.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_LightType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Logger.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_LoggerLevel.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Material.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MaterialParameter.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MathUtil.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Matrix.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Mesh.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MeshBatch.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MeshIndexFormat.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MeshPart.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MeshPrimitiveType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MeshSkin.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Model.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Mouse.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_MouseMouseEvent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Node.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_NodeCloneContext.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_NodeType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ParticleEmitter.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ParticleEmitterTextureBlending.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Pass.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCharacter.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObject.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShape.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeDefinition.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsConstraint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsController.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsControllerHitFilter.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsControllerHitResult.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsControllerListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsControllerListenerEventType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsFixedConstraint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsGenericConstraint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsGhostObject.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsHingeConstraint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsRigidBody.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsRigidBodyParameters.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsSocketConstraint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsSpringConstraint.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsVehicle.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PhysicsVehicleWheel.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Plane.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Platform.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Properties.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_PropertiesType.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Quaternion.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RadioButton.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Ray.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Rectangle.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Ref.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderState.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateAutoBinding.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateBlend.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateCullFaceSide.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateDepthFunction.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateFrontFace.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateStateBlock.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateStencilFunction.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderStateStencilOperation.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_RenderTarget.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Scene.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_SceneDebugFlags.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_SceneRenderer.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_SceneRendererForward.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ScreenDisplayer.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ScriptController.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ScriptTarget.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Slider.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_SpriteBatch.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Technique.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Terrain.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TerrainFlags.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextBox.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextBoxInputMode.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Texture.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextureFilter.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextureFormat.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextureSampler.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TextureWrap.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Theme.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ThemeSideRegions.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ThemeStyle.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ThemeThemeImage.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_ThemeUVs.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Touch.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TouchTouchEvent.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Transform.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TransformListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Uniform.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Vector2.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Vector3.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_Vector4.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_VertexAttributeBinding.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_VertexFormat.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_VertexFormatElement.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_VertexFormatUsage.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_VerticalLayout.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_VisibleSet.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_VisibleSetDefault.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_TerrainPatch.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-    <ClInclude Include="src\lua\lua_CameraListener.h">
-      <Filter>src\lua</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="res\logo_black.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\logo_powered_black.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\logo_powered_white.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\logo_white.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="src\ScriptController.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\BoundingBox.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\BoundingSphere.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Game.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Image.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Joystick.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\MathUtil.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\MathUtilNeon.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Matrix.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\MeshBatch.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="res\shaders\colored.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\colored.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\font.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\font.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\form.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\form.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\lighting.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\lighting.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\sprite.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\sprite.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\terrain.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\terrain.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\textured.frag">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\textured.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\skinning.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-    <None Include="res\shaders\skinning-none.vert">
-      <Filter>res\shaders</Filter>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="src\PhysicsFixedConstraint.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\PhysicsGenericConstraint.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\PhysicsSpringConstraint.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\PhysicsRigidBody.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Plane.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Quaternion.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Ray.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Vector2.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Vector3.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\Vector4.inl">
-      <Filter>src</Filter>
-    </None>
-    <None Include="src\PhysicsConstraint.inl">
-      <Filter>src</Filter>
-    </None>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="src">
+      <UniqueIdentifier>{c4d4da1c-81e2-4944-901c-200e1c4d80e5}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res">
+      <UniqueIdentifier>{4a30ac71-e135-47d3-9f56-baac7cffe64c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\shaders">
+      <UniqueIdentifier>{be0b36f1-49ed-4a06-9f1f-57c654a554fe}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\lua">
+      <UniqueIdentifier>{21cf31c6-9c10-44cb-a864-d46a0e7bfe5e}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\social">
+      <UniqueIdentifier>{7bd5ee6c-c0cc-4ae3-b7a9-443fb391b944}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\Plane.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PlatformBlackBerry.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PlatformWindows.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Quaternion.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Ray.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Rectangle.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Ref.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Scene.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SpriteBatch.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Texture.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Transform.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Vector2.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Vector3.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Vector4.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\VertexAttributeBinding.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\VertexFormat.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Properties.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Technique.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Pass.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\RenderState.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsController.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsRigidBody.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsConstraint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsHingeConstraint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsFixedConstraint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsGenericConstraint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsSocketConstraint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsSpringConstraint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SceneLoader.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\RenderTarget.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PlatformAndroid.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AbsoluteLayout.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\RadioButton.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Slider.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\VerticalLayout.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Theme.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\TextBox.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsCharacter.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsCollisionObject.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsGhostObject.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsCollisionShape.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ThemeStyle.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ScriptController.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ScreenDisplayer.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AIAgent.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AIController.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AIMessage.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ScriptTarget.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PlatformLinux.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsVehicle.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsVehicleWheel.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Terrain.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\TerrainPatch.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Platform.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SocialController.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\social\ScoreloopSocialSession.cpp">
+      <Filter>src\social</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SocialAchievement.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SocialPlayer.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SocialScore.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SocialChallenge.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SocialSessionListener.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SceneRenderer.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SceneRendererForward.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\VisibleSetDefault.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\social\GooglePlaySocialSession.cpp">
+      <Filter>src\social</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AIState.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AIStateMachine.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Animation.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AnimationClip.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AnimationController.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AnimationTarget.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AnimationValue.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AudioBuffer.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AudioController.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AudioListener.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\AudioSource.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\BoundingBox.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\BoundingSphere.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Bundle.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Button.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Camera.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\CheckBox.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Container.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Control.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Curve.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\DebugNew.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\DepthStencilTarget.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Effect.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\FileSystem.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\FlowLayout.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Font.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Form.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\FrameBuffer.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Frustum.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Game.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Gamepad.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\gameplay-main-android.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\gameplay-main-blackberry.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\gameplay-main-linux.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\gameplay-main-windows.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\HeightField.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Image.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ImageControl.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Joint.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Joystick.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Label.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Layout.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Light.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Logger.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Material.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\MaterialParameter.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\MathUtil.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Matrix.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Mesh.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\MeshBatch.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\MeshPart.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\MeshSkin.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Model.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Node.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ParticleEmitter.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\ControlFactory.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AbsoluteLayout.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIAgent.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIAgentListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIController.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIMessage.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIMessageParameterType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIState.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIStateListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AIStateMachine.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_all_bindings.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Animation.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AnimationClip.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AnimationClipListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AnimationClipListenerEventType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AnimationController.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AnimationTarget.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AnimationValue.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AudioBuffer.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AudioController.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AudioListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AudioSource.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_AudioSourceState.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_BoundingBox.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_BoundingSphere.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Bundle.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Button.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Camera.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_CameraType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_CheckBox.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Container.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ContainerScroll.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Control.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ControlAlignment.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ControlAutoSize.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ControlListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ControlListenerEventType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ControlState.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Curve.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_CurveInterpolationType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_DepthStencilTarget.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_DepthStencilTargetFormat.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Effect.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FileSystem.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FlowLayout.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Font.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FontFormat.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FontJustify.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FontStyle.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FontText.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Form.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_FrameBuffer.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Frustum.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Game.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_GameClearFlags.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Gamepad.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_GamepadButtonMapping.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_GamepadGamepadEvent.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_GameState.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Gesture.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_GestureGestureEvent.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Global.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_HeightField.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Image.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ImageControl.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ImageFormat.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Joint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Joystick.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Keyboard.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_KeyboardKey.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_KeyboardKeyEvent.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Label.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Layout.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_LayoutType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Light.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_LightType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Logger.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_LoggerLevel.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Material.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MaterialParameter.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MathUtil.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Matrix.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Mesh.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MeshBatch.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MeshIndexFormat.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MeshPart.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MeshPrimitiveType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MeshSkin.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Model.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Mouse.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_MouseMouseEvent.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Node.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_NodeCloneContext.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_NodeType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ParticleEmitter.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ParticleEmitterTextureBlending.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Pass.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCharacter.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObject.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionObjectType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionShape.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeDefinition.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsCollisionShapeType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsConstraint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsController.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsControllerHitFilter.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsControllerHitResult.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsControllerListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsControllerListenerEventType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsFixedConstraint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsGenericConstraint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsGhostObject.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsHingeConstraint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsRigidBody.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsRigidBodyParameters.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsSocketConstraint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsSpringConstraint.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsVehicle.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PhysicsVehicleWheel.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Plane.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Platform.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Properties.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_PropertiesType.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Quaternion.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RadioButton.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Ray.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Rectangle.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Ref.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderState.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateAutoBinding.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateBlend.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateCullFaceSide.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateDepthFunction.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateFrontFace.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateStateBlock.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateStencilFunction.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderStateStencilOperation.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_RenderTarget.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Scene.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_SceneDebugFlags.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_SceneRenderer.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_SceneRendererForward.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ScreenDisplayer.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ScriptController.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ScriptTarget.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Slider.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_SpriteBatch.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Technique.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Terrain.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TerrainFlags.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TextBox.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TextBoxInputMode.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Texture.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TextureFilter.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TextureFormat.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TextureSampler.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TextureWrap.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Theme.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ThemeSideRegions.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ThemeStyle.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ThemeThemeImage.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_ThemeUVs.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Touch.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TouchTouchEvent.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Transform.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TransformListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Uniform.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Vector2.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Vector3.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_Vector4.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_VertexAttributeBinding.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_VertexFormat.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_VertexFormatElement.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_VertexFormatUsage.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_VerticalLayout.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_VisibleSet.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_VisibleSetDefault.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_TerrainPatch.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+    <ClCompile Include="src\lua\lua_CameraListener.cpp">
+      <Filter>src\lua</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\Plane.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Platform.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Quaternion.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Ray.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Rectangle.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Ref.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Scene.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SpriteBatch.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Texture.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Transform.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Vector2.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Vector3.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Vector4.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\VertexAttributeBinding.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\VertexFormat.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ParticleEmitter.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Properties.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Technique.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Pass.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\RenderState.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsController.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsRigidBody.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsConstraint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsSpringConstraint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsFixedConstraint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsGenericConstraint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsHingeConstraint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsSocketConstraint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SceneLoader.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\RenderTarget.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Touch.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AbsoluteLayout.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\RadioButton.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Slider.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\VerticalLayout.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Theme.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\TextBox.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsCharacter.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsCollisionObject.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\TimeListener.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsGhostObject.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsCollisionShape.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ScreenDisplayer.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ThemeStyle.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ScriptController.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AIAgent.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AIController.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ScriptTarget.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsVehicleWheel.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsVehicle.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Stream.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Terrain.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\TerrainPatch.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SocialController.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SocialSession.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SocialAchievement.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SocialPlayer.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SocialSessionListener.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SocialScore.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\social\ScoreloopSocialSession.h">
+      <Filter>src\social</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SocialChallenge.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SceneRenderer.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SceneRendererForward.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\VisibleSet.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\VisibleSetDefault.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\social\GooglePlaySocialSession.h">
+      <Filter>src\social</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AIMessage.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AIState.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AIStateMachine.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Animation.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AnimationClip.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AnimationController.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AnimationTarget.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AnimationValue.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AudioBuffer.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AudioController.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AudioListener.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\AudioSource.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Base.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\BoundingBox.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\BoundingSphere.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Bundle.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Button.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Camera.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\CheckBox.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Container.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Control.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Curve.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\DebugNew.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\DepthStencilTarget.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Effect.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\FileSystem.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\FlowLayout.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Font.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Form.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\FrameBuffer.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Frustum.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Game.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Gamepad.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\gameplay.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Gesture.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\HeightField.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Image.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ImageControl.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Joint.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Joystick.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Keyboard.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Label.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Layout.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Light.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Logger.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Material.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\MaterialParameter.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\MathUtil.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Matrix.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Mesh.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\MeshBatch.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\MeshPart.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\MeshSkin.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Model.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Mouse.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Node.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\ControlFactory.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AbsoluteLayout.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIAgent.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIAgentListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIController.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIMessage.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIMessageParameterType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIState.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIStateListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AIStateMachine.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_all_bindings.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Animation.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AnimationClip.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AnimationClipListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AnimationClipListenerEventType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AnimationController.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AnimationTarget.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AnimationValue.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AudioBuffer.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AudioController.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AudioListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AudioSource.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_AudioSourceState.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_BoundingBox.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_BoundingSphere.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Bundle.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Button.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Camera.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_CameraType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_CheckBox.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Container.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ContainerScroll.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Control.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ControlAlignment.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ControlAutoSize.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ControlListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ControlListenerEventType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ControlState.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Curve.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_CurveInterpolationType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_DepthStencilTarget.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_DepthStencilTargetFormat.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Effect.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FileSystem.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FlowLayout.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Font.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FontFormat.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FontJustify.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FontStyle.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FontText.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Form.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_FrameBuffer.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Frustum.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Game.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_GameClearFlags.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Gamepad.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_GamepadButtonMapping.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_GamepadGamepadEvent.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_GameState.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Gesture.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_GestureGestureEvent.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Global.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_HeightField.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Image.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ImageControl.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ImageFormat.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Joint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Joystick.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Keyboard.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_KeyboardKey.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_KeyboardKeyEvent.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Label.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Layout.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_LayoutType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Light.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_LightType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Logger.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_LoggerLevel.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Material.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MaterialParameter.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MathUtil.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Matrix.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Mesh.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MeshBatch.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MeshIndexFormat.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MeshPart.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MeshPrimitiveType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MeshSkin.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Model.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Mouse.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_MouseMouseEvent.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Node.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_NodeCloneContext.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_NodeType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ParticleEmitter.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ParticleEmitterTextureBlending.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Pass.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCharacter.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObject.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionListenerEventType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectCollisionPair.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionObjectType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionShape.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeDefinition.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsCollisionShapeType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsConstraint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsController.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsControllerHitFilter.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsControllerHitResult.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsControllerListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsControllerListenerEventType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsFixedConstraint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsGenericConstraint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsGhostObject.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsHingeConstraint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsRigidBody.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsRigidBodyParameters.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsSocketConstraint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsSpringConstraint.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsVehicle.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PhysicsVehicleWheel.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Plane.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Platform.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Properties.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_PropertiesType.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Quaternion.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RadioButton.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Ray.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Rectangle.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Ref.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderState.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateAutoBinding.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateBlend.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateCullFaceSide.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateDepthFunction.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateFrontFace.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateStateBlock.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateStencilFunction.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderStateStencilOperation.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_RenderTarget.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Scene.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_SceneDebugFlags.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_SceneRenderer.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_SceneRendererForward.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ScreenDisplayer.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ScriptController.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ScriptTarget.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Slider.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_SpriteBatch.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Technique.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Terrain.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TerrainFlags.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TextBox.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TextBoxInputMode.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Texture.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TextureFilter.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TextureFormat.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TextureSampler.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TextureWrap.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Theme.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ThemeSideRegions.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ThemeStyle.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ThemeThemeImage.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_ThemeUVs.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Touch.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TouchTouchEvent.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Transform.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TransformListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Uniform.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Vector2.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Vector3.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_Vector4.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_VertexAttributeBinding.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_VertexFormat.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_VertexFormatElement.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_VertexFormatUsage.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_VerticalLayout.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_VisibleSet.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_VisibleSetDefault.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_TerrainPatch.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+    <ClInclude Include="src\lua\lua_CameraListener.h">
+      <Filter>src\lua</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="src\ScriptController.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\BoundingBox.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\BoundingSphere.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Game.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Image.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Joystick.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\MathUtil.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\MathUtilNeon.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Matrix.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\MeshBatch.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="res\shaders\colored.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\colored.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning-none.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="src\PhysicsFixedConstraint.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\PhysicsGenericConstraint.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\PhysicsSpringConstraint.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\PhysicsRigidBody.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Plane.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Quaternion.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Ray.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Vector2.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Vector3.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\Vector4.inl">
+      <Filter>src</Filter>
+    </None>
+    <None Include="src\PhysicsConstraint.inl">
+      <Filter>src</Filter>
+    </None>
+  </ItemGroup>
 </Project>

+ 0 - 0
gameplay/res/icon_128.ico → gameplay/res/design/icon_128.ico


+ 0 - 0
gameplay/res/icon_16.ico → gameplay/res/design/icon_16.ico


+ 0 - 0
gameplay/res/icon_32.ico → gameplay/res/design/icon_32.ico


+ 0 - 0
gameplay/res/icon_64.ico → gameplay/res/design/icon_64.ico


+ 0 - 0
gameplay/res/logo.ai → gameplay/res/design/logo.ai


+ 836 - 896
gameplay/src/FileSystem.cpp

@@ -1,896 +1,836 @@
-#include "Base.h"
-#include "FileSystem.h"
-#include "Properties.h"
-#include "Stream.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef WIN32
-    #include <windows.h>
-    #include <tchar.h>
-    #include <stdio.h>
-    #include <direct.h>
-    #define gp_stat _stat
-    #define gp_stat_struct struct stat
-#else
-    #define __EXT_POSIX2
-    #include <libgen.h>
-    #include <dirent.h>
-    #define gp_stat stat
-    #define gp_stat_struct struct stat
-#endif
-
-#ifdef __ANDROID__
-#include <android/asset_manager.h>
-extern AAssetManager* __assetManager;
-#endif
-
-namespace gameplay
-{
-
-#ifdef __ANDROID__
-#include <unistd.h>
-
-static void makepath(std::string path, int mode)
-{
-    std::vector<std::string> dirs;
-    while (path.length() > 0)
-    {
-        int index = path.find('/');
-        std::string dir = (index == -1 ) ? path : path.substr(0, index);
-        if (dir.length() > 0)
-            dirs.push_back(dir);
-        
-        if (index + 1 >= path.length() || index == -1)
-            break;
-            
-        path = path.substr(index + 1);
-    }
-    
-    struct stat s;
-    std::string dirPath;
-    for (unsigned int i = 0; i < dirs.size(); i++)
-    {
-        dirPath += "/";
-        dirPath += dirs[i];
-        if (stat(dirPath.c_str(), &s) != 0)
-        {
-            // Directory does not exist.
-            if (mkdir(dirPath.c_str(), 0777) != 0)
-            {
-                GP_ERROR("Failed to create directory: '%s'", dirPath.c_str());
-                return;
-            }
-        }
-    }
-    
-    return;
-}
-
-/**
- * Returns true if the file exists in the android read-only asset directory.
- */
-static bool androidFileExists(const char* filePath)
-{
-    AAsset* asset = AAssetManager_open(__assetManager, filePath, AASSET_MODE_RANDOM);
-    if (asset)
-    {
-        int lenght = AAsset_getLength(asset);
-        AAsset_close(asset);
-        return length > 0;
-    }
-    return false;
-}
-
-#endif
-
-/** @script{ignore} */
-static std::string __resourcePath("./");
-static std::map<std::string, std::string> __aliases;
-
-/**
- * Gets the fully resolved path.
- * If the path is relative then it will be prefixed with the resource path.
- * Aliases will be converted to a relative path.
- * 
- * @param path The path to resolve.
- * @param fullPath The full resolved path. (out param)
- */
-static void getFullPath(const char* path, std::string& fullPath)
-{
-    if (FileSystem::isAbsolutePath(path))
-    {
-        fullPath.assign(path);
-    }
-    else
-    {
-        fullPath.assign(__resourcePath);
-        fullPath += FileSystem::resolvePath(path);
-    }
-}
-
-/**
- * 
- * @script{ignore}
- */
-class FileStream : public Stream
-{
-public:
-    friend class FileSystem;
-    
-    ~FileStream();
-    virtual bool canRead();
-    virtual bool canWrite();
-    virtual bool canSeek();
-    virtual void close();
-    virtual size_t read(void* ptr, size_t size, size_t count);
-    virtual char* readLine(char* str, int num);
-    virtual size_t write(const void* ptr, size_t size, size_t count);
-    virtual bool eof();
-    virtual size_t length();
-    virtual long int position();
-    virtual bool seek(long int offset, int origin);
-    virtual bool rewind();
-
-    static FileStream* create(const char* filePath, const char* mode);
-
-private:
-    FileStream(FILE* file);
-
-private:
-    FILE* _file;
-    bool _canRead;
-    bool _canWrite;
-};
-
-#ifdef __ANDROID__
-
-/**
- * 
- * @script{ignore}
- */
-class FileStreamAndroid : public Stream
-{
-public:
-    friend class FileSystem;
-    
-    ~FileStreamAndroid();
-    virtual bool canRead();
-    virtual bool canWrite();
-    virtual bool canSeek();
-    virtual void close();
-    virtual size_t read(void* ptr, size_t size, size_t count);
-    virtual char* readLine(char* str, int num);
-    virtual size_t write(const void* ptr, size_t size, size_t count);
-    virtual bool eof();
-    virtual size_t length();
-    virtual long int position();
-    virtual bool seek(long int offset, int origin);
-    virtual bool rewind();
-
-    static FileStreamAndroid* create(const char* filePath, const char* mode);
-
-private:
-    FileStreamAndroid(AAsset* asset);
-
-private:
-    AAsset* _asset;
-};
-
-#endif
-
-/////////////////////////////
-
-FileSystem::FileSystem()
-{
-}
-
-FileSystem::~FileSystem()
-{
-}
-
-void FileSystem::setResourcePath(const char* path)
-{
-    __resourcePath = path == NULL ? "" : path;
-}
-
-const char* FileSystem::getResourcePath()
-{
-    return __resourcePath.c_str();
-}
-
-void FileSystem::loadResourceAliases(const char* aliasFilePath)
-{
-    Properties* properties = Properties::create(aliasFilePath);
-    if (properties)
-    {
-        Properties* aliases;
-        while ((aliases = properties->getNextNamespace()) != NULL)
-        {
-            loadResourceAliases(aliases);
-        }
-    }
-    SAFE_DELETE(properties);
-}
-
-void FileSystem::loadResourceAliases(Properties* properties)
-{
-    assert(properties);
-
-    const char* name;
-    while ((name = properties->getNextProperty()) != NULL)
-    {
-        __aliases[name] = properties->getString();
-    }
-}
-
-const char* FileSystem::resolvePath(const char* path)
-{
-    GP_ASSERT(path);
-
-    size_t len = strlen(path);
-    if (len > 1 && path[0] == '@')
-    {
-        std::string alias(path + 1);
-        std::map<std::string, std::string>::const_iterator itr = __aliases.find(alias);
-        if (itr == __aliases.end())
-            return path; // no matching alias found
-        return itr->second.c_str();
-    }
-
-    return path;
-}
-
-bool FileSystem::listFiles(const char* dirPath, std::vector<std::string>& files)
-{
-#ifdef WIN32
-    std::string path(FileSystem::getResourcePath());
-    if (dirPath && strlen(dirPath) > 0)
-    {
-        path.append(dirPath);
-    }
-    path.append("/*");
-    // Convert char to wchar
-    std::basic_string<TCHAR> wPath;
-    wPath.assign(path.begin(), path.end());
-
-    WIN32_FIND_DATA FindFileData;
-    HANDLE hFind = FindFirstFile(wPath.c_str(), &FindFileData);
-    if (hFind == INVALID_HANDLE_VALUE) 
-    {
-        return false;
-    }
-    do
-    {
-        // Add to the list if this is not a directory
-        if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
-        {
-            // Convert wchar to char
-            std::basic_string<TCHAR> wfilename(FindFileData.cFileName);
-            std::string filename;
-            filename.assign(wfilename.begin(), wfilename.end());
-            files.push_back(filename);
-        }
-    } while (FindNextFile(hFind, &FindFileData) != 0);
-
-    FindClose(hFind);
-    return true;
-#else
-    std::string path(FileSystem::getResourcePath());
-    if (dirPath && strlen(dirPath) > 0)
-    {
-        path.append(dirPath);
-    }
-    path.append("/.");
-    bool result = false;
-
-    struct dirent* dp;
-    DIR* dir = opendir(path.c_str());
-    if (dir != NULL)
-    {
-        while ((dp = readdir(dir)) != NULL)
-        {
-            std::string filepath(path);
-            filepath.append("/");
-            filepath.append(dp->d_name);
-
-            struct stat buf;
-            if (!stat(filepath.c_str(), &buf))
-            {
-                // Add to the list if this is not a directory
-                if (!S_ISDIR(buf.st_mode))
-                {
-                    files.push_back(dp->d_name);
-                }
-            }
-        }
-        closedir(dir);
-        result = true;
-    }
-
-#ifdef __ANDROID__
-    // List the files that are in the android APK at this path
-    AAssetDir* assetDir = AAssetManager_openDir(__assetManager, dirPath);
-    if (assetDir != NULL)
-    {
-        AAssetDir_rewind(assetDir);
-        const char* file = NULL;
-        while ((file = AAssetDir_getNextFileName(assetDir)) != NULL)
-        {
-            std::string filename(file);
-            // Check if this file was already added to the list because it was copied to the SD card.
-            if (find(files.begin(), files.end(), filename) == files.end())
-            {
-                files.push_back(filename);
-            }
-        }
-        AAssetDir_close(assetDir);
-        result = true;
-    }
-#endif
-
-    return result;
-#endif
-}
-
-bool FileSystem::fileExists(const char* filePath)
-{
-    GP_ASSERT(filePath);
-
-#ifdef __ANDROID__
-    if (androidFileExists(resolvePath(filePath)))
-    {
-        return true;
-    }
-#endif
-
-    std::string fullPath;
-    getFullPath(filePath, fullPath);
-
-    gp_stat_struct s;
-
-#ifdef WIN32
-    if (!isAbsolutePath(filePath) && stat(fullPath.c_str(), &s) != 0)
-    {
-        fullPath = __resourcePath;
-        fullPath += "../../gameplay/";
-        fullPath += filePath;
-        
-        int result = stat(fullPath.c_str(), &s);
-        if (result != 0)
-        {
-            fullPath = __resourcePath;
-            fullPath += "../gameplay/";
-            fullPath += filePath;
-            return stat(fullPath.c_str(), &s) == 0;
-        }
-    }
-    return true;
-#else
-    return stat(fullPath.c_str(), &s) == 0;
-#endif
-}
-
-Stream* FileSystem::open(const char* path, size_t mode)
-{
-    char modeStr[] = "rb";
-    if ((mode & WRITE) != 0)
-        modeStr[0] = 'w';
-#ifdef __ANDROID__
-    if ((mode & WRITE) != 0)
-    {
-        // Open a file on the SD card
-        std::string fullPath(__resourcePath);
-        fullPath += resolvePath(path);
-
-        size_t index = fullPath.rfind('/');
-        if (index != std::string::npos)
-        {
-            std::string directoryPath = fullPath.substr(0, index);
-            struct stat s;
-            if (stat(directoryPath.c_str(), &s) != 0)
-                makepath(directoryPath, 0777);
-        }
-        return FileStream::create(fullPath.c_str(), modeStr);
-    }
-    else
-    {
-        // Open a file in the read-only asset directory
-        return FileStreamAndroid::create(resolvePath(path), modeStr);
-    }
-#else
-    std::string fullPath;
-    getFullPath(path, fullPath);
-    
-#ifdef WIN32
-    gp_stat_struct s;
-    if (!isAbsolutePath(path) && stat(fullPath.c_str(), &s) != 0 && (mode & WRITE) == 0)
-    {
-        fullPath = __resourcePath;
-        fullPath += "../../gameplay/";
-        fullPath += path;
-        
-        int result = stat(fullPath.c_str(), &s);
-        if (result != 0)
-        {
-            fullPath = __resourcePath;
-            fullPath += "../gameplay/";
-            fullPath += path;
-            if (stat(fullPath.c_str(), &s) != 0)
-            {
-                return NULL;
-            }
-        }
-    }
-#endif
-    FileStream* stream = FileStream::create(fullPath.c_str(), modeStr);
-    return stream;
-#endif
-}
-
-FILE* FileSystem::openFile(const char* filePath, const char* mode)
-{
-    GP_ASSERT(filePath);
-    GP_ASSERT(mode);
-
-    std::string fullPath;
-    getFullPath(filePath, fullPath);
-
-    createFileFromAsset(filePath);
-    
-    FILE* fp = fopen(fullPath.c_str(), mode);
-    
-#ifdef WIN32
-    if (fp == NULL && !isAbsolutePath(filePath))
-    {
-        fullPath = __resourcePath;
-        fullPath += "../../gameplay/";
-        fullPath += filePath;
-        
-        fp = fopen(fullPath.c_str(), mode);
-        if (!fp)
-        {
-            fullPath = __resourcePath;
-            fullPath += "../gameplay/";
-            fullPath += filePath;
-            fp = fopen(fullPath.c_str(), mode);
-        }
-    }
-#endif
-
-    return fp;
-}
-
-char* FileSystem::readAll(const char* filePath, int* fileSize)
-{
-    GP_ASSERT(filePath);
-
-    // Open file for reading.
-    std::auto_ptr<Stream> stream(open(filePath));
-    if (stream.get() == NULL)
-    {
-        GP_ERROR("Failed to load file: %s", filePath);
-        return NULL;
-    }
-    size_t size = stream->length();
-
-    // Read entire file contents.
-    char* buffer = new char[size + 1];
-    size_t read = stream->read(buffer, 1, size);
-    if (read != size)
-    {
-        GP_ERROR("Failed to read complete contents of file '%s' (amount read vs. file size: %u < %u).", filePath, read, size);
-        SAFE_DELETE_ARRAY(buffer);
-        return NULL;
-    }
-
-    // Force the character buffer to be NULL-terminated.
-    buffer[size] = '\0';
-
-    if (fileSize)
-    {
-        *fileSize = (int)size; 
-    }
-    return buffer;
-}
-
-bool FileSystem::isAbsolutePath(const char* filePath)
-{
-    if (filePath == 0 || filePath[0] == '\0')
-        return false;
-#ifdef WIN32
-    if (filePath[1] != '\0')
-    {
-        char first = filePath[0];
-        return (filePath[1] == ':' && ((first >= 'a' && first <= 'z') || (first >= 'A' && first <= 'Z')));
-    }
-    return false;
-#else
-    return filePath[0] == '/';
-#endif
-}
-
-void FileSystem::createFileFromAsset(const char* path)
-{
-#ifdef __ANDROID__
-    static std::set<std::string> upToDateAssets;
-
-    GP_ASSERT(path);
-    std::string fullPath(__resourcePath);
-    std::string resolvedPath = FileSystem::resolvePath(path);
-    fullPath += resolvedPath;
-
-    std::string directoryPath = fullPath.substr(0, fullPath.rfind('/'));
-    struct stat s;
-    if (stat(directoryPath.c_str(), &s) != 0)
-        makepath(directoryPath, 0777);
-
-    // To ensure that the files on the file system corresponding to the assets in the APK bundle
-    // are always up to date (and in sync), we copy them from the APK to the file system once
-    // for each time the process (game) runs.
-    if (upToDateAssets.find(fullPath) == upToDateAssets.end())
-    {
-        AAsset* asset = AAssetManager_open(__assetManager, resolvedPath.c_str(), AASSET_MODE_RANDOM);
-        if (asset)
-        {
-            const void* data = AAsset_getBuffer(asset);
-            int length = AAsset_getLength(asset);
-            FILE* file = fopen(fullPath.c_str(), "wb");
-            if (file != NULL)
-            {
-                int ret = fwrite(data, sizeof(unsigned char), length, file);
-                if (fclose(file) != 0)
-                {
-                    GP_ERROR("Failed to close file on file system created from APK asset '%s'.", path);
-                    return;
-                }
-                if (ret != length)
-                {
-                    GP_ERROR("Failed to write all data from APK asset '%s' to file on file system.", path);
-                    return;
-                }
-            }
-            else
-            {
-                GP_ERROR("Failed to create file on file system from APK asset '%s'.", path);
-                return;
-            }
-
-            upToDateAssets.insert(fullPath);
-        }
-    }
-#endif
-}
-
-std::string FileSystem::getDirectoryName(const char* path)
-{
-    if (path == NULL || strlen(path) == 0)
-    {
-        return "";
-    }
-#ifdef WIN32
-    char drive[_MAX_DRIVE];
-    char dir[_MAX_DIR];
-    _splitpath(path, drive, dir, NULL, NULL);
-    std::string dirname;
-    size_t driveLength = strlen(drive);
-    if (driveLength > 0)
-    {
-        dirname.reserve(driveLength + strlen(dir));
-        dirname.append(drive);
-        dirname.append(dir);
-    }
-    else
-    {
-        dirname.assign(dir);
-    }
-    std::replace(dirname.begin(), dirname.end(), '\\', '/');
-    return dirname;
-#else
-    // dirname() modifies the input string so create a temp string
-    std::string dirname;
-    char* tempPath = new char[strlen(path) + 1];
-    strcpy(tempPath, path);
-    char* dir = ::dirname(tempPath);
-    if (dir && strlen(dir) > 0)
-    {
-        dirname.assign(dir);
-        // dirname() strips off the trailing '/' so add it back to be consistent with Windows
-        dirname.append("/");
-    }
-    SAFE_DELETE_ARRAY(tempPath);
-    return dirname;
-#endif
-}
-
-std::string FileSystem::getExtension(const char* path)
-{
-    const char* str = strrchr(path, '.');
-    if (str == NULL)
-        return "";
-
-    std::string ext;
-    size_t len = strlen(str);
-    for (size_t i = 0; i < len; ++i)
-        ext += std::toupper(str[i]);
-
-    return ext;
-}
-
-//////////////////
-
-FileStream::FileStream(FILE* file)
-    : _file(file), _canRead(false), _canWrite(false)
-{
-    
-}
-
-FileStream::~FileStream()
-{
-    if (_file)
-    {
-        close();
-    }
-}
-
-FileStream* FileStream::create(const char* filePath, const char* mode)
-{
-    FILE* file = fopen(filePath, mode);
-    if (file)
-    {
-        FileStream* stream = new FileStream(file);
-        const char* s = mode;
-        while (s != NULL && *s != '\0')
-        {
-            if (*s == 'r')
-                stream->_canRead = true;
-            else if (*s == 'w')
-                stream->_canWrite = true;
-            ++s;
-        }
-
-        return stream;
-    }
-    return NULL;
-}
-
-bool FileStream::canRead()
-{
-    return _file && _canRead;
-}
-
-bool FileStream::canWrite()
-{
-    return _file && _canWrite;
-}
-
-bool FileStream::canSeek()
-{
-    return _file != NULL;
-}
-
-void FileStream::close()
-{
-    if (_file)
-        fclose(_file);
-    _file = NULL;
-}
-
-size_t FileStream::read(void* ptr, size_t size, size_t count)
-{
-    if (!_file)
-        return 0;
-    return fread(ptr, size, count, _file);
-}
-
-char* FileStream::readLine(char* str, int num)
-{
-    if (!_file)
-        return 0;
-    return fgets(str, num, _file);
-}
-
-size_t FileStream::write(const void* ptr, size_t size, size_t count)
-{
-    if (!_file)
-        return 0;
-    return fwrite(ptr, size, count, _file);
-}
-
-bool FileStream::eof()
-{
-    if (!_file || feof(_file))
-        return true;
-    return ((size_t)position()) >= length();
-}
-
-size_t FileStream::length()
-{
-    size_t len = 0;
-    if (canSeek())
-    {
-        long int pos = position();
-        if (seek(0, SEEK_END))
-        {
-            len = position();
-        }
-        seek(pos, SEEK_SET);
-    }
-    return len;
-}
-
-long int FileStream::position()
-{
-    if (!_file)
-        return -1;
-    return ftell(_file);
-}
-
-bool FileStream::seek(long int offset, int origin)
-{
-    if (!_file)
-        return false;
-    return fseek(_file, offset, origin) == 0;
-}
-
-bool FileStream::rewind()
-{
-    if (canSeek())
-    {
-        ::rewind(_file);
-        return true;
-    }
-    return false;
-}
-
-////////////////////////////////
-
-#ifdef __ANDROID__
-
-FileStreamAndroid::FileStreamAndroid(AAsset* asset)
-    : _asset(asset)
-{
-}
-
-FileStreamAndroid::~FileStreamAndroid()
-{
-    if (_asset)
-        close();
-}
-
-FileStreamAndroid* FileStreamAndroid::create(const char* filePath, const char* mode)
-{
-    AAsset* asset = AAssetManager_open(__assetManager, filePath, AASSET_MODE_RANDOM);
-    if (asset)
-    {
-        FileStreamAndroid* stream = new FileStreamAndroid(asset);
-        return stream;
-    }
-    return NULL;
-}
-
-bool FileStreamAndroid::canRead()
-{
-    return true;
-}
-
-bool FileStreamAndroid::canWrite()
-{
-    return false;
-}
-
-bool FileStreamAndroid::canSeek()
-{
-    return true;
-}
-
-void FileStreamAndroid::close()
-{
-    if (_asset)
-        AAsset_close(_asset);
-    _asset = NULL;
-}
-
-size_t FileStreamAndroid::read(void* ptr, size_t size, size_t count)
-{
-    int result = AAsset_read(_asset, ptr, size * count);
-    return result > 0 ? ((size_t)result) / size : 0;
-}
-
-char* FileStreamAndroid::readLine(char* str, int num)
-{
-    if (num <= 0)
-        return NULL;
-    char c = 0;
-    size_t maxCharsToRead = num - 1;
-    for (size_t i = 0; i < maxCharsToRead; ++i)
-    {
-        size_t result = read(&c, 1, 1);
-        if (result != 1)
-        {
-            str[i] = '\0';
-            break;
-        }
-        if (c == '\n')
-        {
-            str[i] = c;
-            str[i + 1] = '\0';
-            break;
-        }
-        else if(c == '\r')
-        {
-            str[i] = c;
-            // next may be '\n'
-            size_t pos = position();
-
-            char nextChar = 0;
-            if (read(&nextChar, 1, 1) != 1)
-            {
-                // no more characters
-                str[i + 1] = '\0';
-                break;
-            }
-            if (nextChar == '\n')
-            {
-                if (i == maxCharsToRead - 1)
-                {
-                    str[i + 1] = '\0';
-                    break;
-                }
-                else
-                {
-                    str[i + 1] = nextChar;
-                    str[i + 2] = '\0';
-                    break;
-                }
-            }
-            else
-            {
-                seek(pos, SEEK_SET);
-                str[i + 1] = '\0';
-                break;
-            }
-        }
-        str[i] = c;
-    }
-    return str; // what if first read failed?
-}
-
-size_t FileStreamAndroid::write(const void* ptr, size_t size, size_t count)
-{
-    return 0;
-}
-
-bool FileStreamAndroid::eof()
-{
-    return position() >= length();
-}
-
-size_t FileStreamAndroid::length()
-{
-    return (size_t)AAsset_getLength(_asset);
-}
-
-long int FileStreamAndroid::position()
-{
-    return AAsset_getLength(_asset) - AAsset_getRemainingLength(_asset);
-}
-
-bool FileStreamAndroid::seek(long int offset, int origin)
-{
-    return AAsset_seek(_asset, offset, origin) != -1;
-}
-
-bool FileStreamAndroid::rewind()
-{
-    if (canSeek())
-    {
-        return AAsset_seek(_asset, 0, SEEK_SET) != -1;
-    }
-    return false;
-}
-
-#endif
-
-}
+#include "Base.h"
+#include "FileSystem.h"
+#include "Properties.h"
+#include "Stream.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef WIN32
+    #include <windows.h>
+    #include <tchar.h>
+    #include <stdio.h>
+    #include <direct.h>
+    #define gp_stat _stat
+    #define gp_stat_struct struct stat
+#else
+    #define __EXT_POSIX2
+    #include <libgen.h>
+    #include <dirent.h>
+    #define gp_stat stat
+    #define gp_stat_struct struct stat
+#endif
+
+#ifdef __ANDROID__
+#include <android/asset_manager.h>
+extern AAssetManager* __assetManager;
+#endif
+
+namespace gameplay
+{
+
+#ifdef __ANDROID__
+#include <unistd.h>
+
+static void makepath(std::string path, int mode)
+{
+    std::vector<std::string> dirs;
+    while (path.length() > 0)
+    {
+        int index = path.find('/');
+        std::string dir = (index == -1 ) ? path : path.substr(0, index);
+        if (dir.length() > 0)
+            dirs.push_back(dir);
+        
+        if (index + 1 >= path.length() || index == -1)
+            break;
+            
+        path = path.substr(index + 1);
+    }
+    
+    struct stat s;
+    std::string dirPath;
+    for (unsigned int i = 0; i < dirs.size(); i++)
+    {
+        dirPath += "/";
+        dirPath += dirs[i];
+        if (stat(dirPath.c_str(), &s) != 0)
+        {
+            // Directory does not exist.
+            if (mkdir(dirPath.c_str(), 0777) != 0)
+            {
+                GP_ERROR("Failed to create directory: '%s'", dirPath.c_str());
+                return;
+            }
+        }
+    }
+    
+    return;
+}
+
+/**
+ * Returns true if the file exists in the android read-only asset directory.
+ */
+static bool androidFileExists(const char* filePath)
+{
+    AAsset* asset = AAssetManager_open(__assetManager, filePath, AASSET_MODE_RANDOM);
+    if (asset)
+    {
+        int lenght = AAsset_getLength(asset);
+        AAsset_close(asset);
+        return length > 0;
+    }
+    return false;
+}
+
+#endif
+
+/** @script{ignore} */
+static std::string __resourcePath("./");
+static std::map<std::string, std::string> __aliases;
+
+/**
+ * Gets the fully resolved path.
+ * If the path is relative then it will be prefixed with the resource path.
+ * Aliases will be converted to a relative path.
+ * 
+ * @param path The path to resolve.
+ * @param fullPath The full resolved path. (out param)
+ */
+static void getFullPath(const char* path, std::string& fullPath)
+{
+    if (FileSystem::isAbsolutePath(path))
+    {
+        fullPath.assign(path);
+    }
+    else
+    {
+        fullPath.assign(__resourcePath);
+        fullPath += FileSystem::resolvePath(path);
+    }
+}
+
+/**
+ * 
+ * @script{ignore}
+ */
+class FileStream : public Stream
+{
+public:
+    friend class FileSystem;
+    
+    ~FileStream();
+    virtual bool canRead();
+    virtual bool canWrite();
+    virtual bool canSeek();
+    virtual void close();
+    virtual size_t read(void* ptr, size_t size, size_t count);
+    virtual char* readLine(char* str, int num);
+    virtual size_t write(const void* ptr, size_t size, size_t count);
+    virtual bool eof();
+    virtual size_t length();
+    virtual long int position();
+    virtual bool seek(long int offset, int origin);
+    virtual bool rewind();
+
+    static FileStream* create(const char* filePath, const char* mode);
+
+private:
+    FileStream(FILE* file);
+
+private:
+    FILE* _file;
+    bool _canRead;
+    bool _canWrite;
+};
+
+#ifdef __ANDROID__
+
+/**
+ * 
+ * @script{ignore}
+ */
+class FileStreamAndroid : public Stream
+{
+public:
+    friend class FileSystem;
+    
+    ~FileStreamAndroid();
+    virtual bool canRead();
+    virtual bool canWrite();
+    virtual bool canSeek();
+    virtual void close();
+    virtual size_t read(void* ptr, size_t size, size_t count);
+    virtual char* readLine(char* str, int num);
+    virtual size_t write(const void* ptr, size_t size, size_t count);
+    virtual bool eof();
+    virtual size_t length();
+    virtual long int position();
+    virtual bool seek(long int offset, int origin);
+    virtual bool rewind();
+
+    static FileStreamAndroid* create(const char* filePath, const char* mode);
+
+private:
+    FileStreamAndroid(AAsset* asset);
+
+private:
+    AAsset* _asset;
+};
+
+#endif
+
+/////////////////////////////
+
+FileSystem::FileSystem()
+{
+}
+
+FileSystem::~FileSystem()
+{
+}
+
+void FileSystem::setResourcePath(const char* path)
+{
+    __resourcePath = path == NULL ? "" : path;
+}
+
+const char* FileSystem::getResourcePath()
+{
+    return __resourcePath.c_str();
+}
+
+void FileSystem::loadResourceAliases(const char* aliasFilePath)
+{
+    Properties* properties = Properties::create(aliasFilePath);
+    if (properties)
+    {
+        Properties* aliases;
+        while ((aliases = properties->getNextNamespace()) != NULL)
+        {
+            loadResourceAliases(aliases);
+        }
+    }
+    SAFE_DELETE(properties);
+}
+
+void FileSystem::loadResourceAliases(Properties* properties)
+{
+    assert(properties);
+
+    const char* name;
+    while ((name = properties->getNextProperty()) != NULL)
+    {
+        __aliases[name] = properties->getString();
+    }
+}
+
+const char* FileSystem::resolvePath(const char* path)
+{
+    GP_ASSERT(path);
+
+    size_t len = strlen(path);
+    if (len > 1 && path[0] == '@')
+    {
+        std::string alias(path + 1);
+        std::map<std::string, std::string>::const_iterator itr = __aliases.find(alias);
+        if (itr == __aliases.end())
+            return path; // no matching alias found
+        return itr->second.c_str();
+    }
+
+    return path;
+}
+
+bool FileSystem::listFiles(const char* dirPath, std::vector<std::string>& files)
+{
+#ifdef WIN32
+    std::string path(FileSystem::getResourcePath());
+    if (dirPath && strlen(dirPath) > 0)
+    {
+        path.append(dirPath);
+    }
+    path.append("/*");
+    // Convert char to wchar
+    std::basic_string<TCHAR> wPath;
+    wPath.assign(path.begin(), path.end());
+
+    WIN32_FIND_DATA FindFileData;
+    HANDLE hFind = FindFirstFile(wPath.c_str(), &FindFileData);
+    if (hFind == INVALID_HANDLE_VALUE) 
+    {
+        return false;
+    }
+    do
+    {
+        // Add to the list if this is not a directory
+        if ((FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
+        {
+            // Convert wchar to char
+            std::basic_string<TCHAR> wfilename(FindFileData.cFileName);
+            std::string filename;
+            filename.assign(wfilename.begin(), wfilename.end());
+            files.push_back(filename);
+        }
+    } while (FindNextFile(hFind, &FindFileData) != 0);
+
+    FindClose(hFind);
+    return true;
+#else
+    std::string path(FileSystem::getResourcePath());
+    if (dirPath && strlen(dirPath) > 0)
+    {
+        path.append(dirPath);
+    }
+    path.append("/.");
+    bool result = false;
+
+    struct dirent* dp;
+    DIR* dir = opendir(path.c_str());
+    if (dir != NULL)
+    {
+        while ((dp = readdir(dir)) != NULL)
+        {
+            std::string filepath(path);
+            filepath.append("/");
+            filepath.append(dp->d_name);
+
+            struct stat buf;
+            if (!stat(filepath.c_str(), &buf))
+            {
+                // Add to the list if this is not a directory
+                if (!S_ISDIR(buf.st_mode))
+                {
+                    files.push_back(dp->d_name);
+                }
+            }
+        }
+        closedir(dir);
+        result = true;
+    }
+
+#ifdef __ANDROID__
+    // List the files that are in the android APK at this path
+    AAssetDir* assetDir = AAssetManager_openDir(__assetManager, dirPath);
+    if (assetDir != NULL)
+    {
+        AAssetDir_rewind(assetDir);
+        const char* file = NULL;
+        while ((file = AAssetDir_getNextFileName(assetDir)) != NULL)
+        {
+            std::string filename(file);
+            // Check if this file was already added to the list because it was copied to the SD card.
+            if (find(files.begin(), files.end(), filename) == files.end())
+            {
+                files.push_back(filename);
+            }
+        }
+        AAssetDir_close(assetDir);
+        result = true;
+    }
+#endif
+
+    return result;
+#endif
+}
+
+bool FileSystem::fileExists(const char* filePath)
+{
+    GP_ASSERT(filePath);
+
+#ifdef __ANDROID__
+    if (androidFileExists(resolvePath(filePath)))
+    {
+        return true;
+    }
+#endif
+
+    std::string fullPath;
+    getFullPath(filePath, fullPath);
+
+    gp_stat_struct s;
+    return stat(fullPath.c_str(), &s) == 0;
+
+}
+
+Stream* FileSystem::open(const char* path, size_t mode)
+{
+    char modeStr[] = "rb";
+    if ((mode & WRITE) != 0)
+        modeStr[0] = 'w';
+#ifdef __ANDROID__
+    if ((mode & WRITE) != 0)
+    {
+        // Open a file on the SD card
+        std::string fullPath(__resourcePath);
+        fullPath += resolvePath(path);
+
+        size_t index = fullPath.rfind('/');
+        if (index != std::string::npos)
+        {
+            std::string directoryPath = fullPath.substr(0, index);
+            struct stat s;
+            if (stat(directoryPath.c_str(), &s) != 0)
+                makepath(directoryPath, 0777);
+        }
+        return FileStream::create(fullPath.c_str(), modeStr);
+    }
+    else
+    {
+        // Open a file in the read-only asset directory
+        return FileStreamAndroid::create(resolvePath(path), modeStr);
+    }
+#else
+    std::string fullPath;
+    getFullPath(path, fullPath);
+    FileStream* stream = FileStream::create(fullPath.c_str(), modeStr);
+    return stream;
+#endif
+}
+
+FILE* FileSystem::openFile(const char* filePath, const char* mode)
+{
+    GP_ASSERT(filePath);
+    GP_ASSERT(mode);
+
+    std::string fullPath;
+    getFullPath(filePath, fullPath);
+
+    createFileFromAsset(filePath);
+    
+    FILE* fp = fopen(fullPath.c_str(), mode);
+    return fp;
+}
+
+char* FileSystem::readAll(const char* filePath, int* fileSize)
+{
+    GP_ASSERT(filePath);
+
+    // Open file for reading.
+    std::auto_ptr<Stream> stream(open(filePath));
+    if (stream.get() == NULL)
+    {
+        GP_ERROR("Failed to load file: %s", filePath);
+        return NULL;
+    }
+    size_t size = stream->length();
+
+    // Read entire file contents.
+    char* buffer = new char[size + 1];
+    size_t read = stream->read(buffer, 1, size);
+    if (read != size)
+    {
+        GP_ERROR("Failed to read complete contents of file '%s' (amount read vs. file size: %u < %u).", filePath, read, size);
+        SAFE_DELETE_ARRAY(buffer);
+        return NULL;
+    }
+
+    // Force the character buffer to be NULL-terminated.
+    buffer[size] = '\0';
+
+    if (fileSize)
+    {
+        *fileSize = (int)size; 
+    }
+    return buffer;
+}
+
+bool FileSystem::isAbsolutePath(const char* filePath)
+{
+    if (filePath == 0 || filePath[0] == '\0')
+        return false;
+#ifdef WIN32
+    if (filePath[1] != '\0')
+    {
+        char first = filePath[0];
+        return (filePath[1] == ':' && ((first >= 'a' && first <= 'z') || (first >= 'A' && first <= 'Z')));
+    }
+    return false;
+#else
+    return filePath[0] == '/';
+#endif
+}
+
+void FileSystem::createFileFromAsset(const char* path)
+{
+#ifdef __ANDROID__
+    static std::set<std::string> upToDateAssets;
+
+    GP_ASSERT(path);
+    std::string fullPath(__resourcePath);
+    std::string resolvedPath = FileSystem::resolvePath(path);
+    fullPath += resolvedPath;
+
+    std::string directoryPath = fullPath.substr(0, fullPath.rfind('/'));
+    struct stat s;
+    if (stat(directoryPath.c_str(), &s) != 0)
+        makepath(directoryPath, 0777);
+
+    // To ensure that the files on the file system corresponding to the assets in the APK bundle
+    // are always up to date (and in sync), we copy them from the APK to the file system once
+    // for each time the process (game) runs.
+    if (upToDateAssets.find(fullPath) == upToDateAssets.end())
+    {
+        AAsset* asset = AAssetManager_open(__assetManager, resolvedPath.c_str(), AASSET_MODE_RANDOM);
+        if (asset)
+        {
+            const void* data = AAsset_getBuffer(asset);
+            int length = AAsset_getLength(asset);
+            FILE* file = fopen(fullPath.c_str(), "wb");
+            if (file != NULL)
+            {
+                int ret = fwrite(data, sizeof(unsigned char), length, file);
+                if (fclose(file) != 0)
+                {
+                    GP_ERROR("Failed to close file on file system created from APK asset '%s'.", path);
+                    return;
+                }
+                if (ret != length)
+                {
+                    GP_ERROR("Failed to write all data from APK asset '%s' to file on file system.", path);
+                    return;
+                }
+            }
+            else
+            {
+                GP_ERROR("Failed to create file on file system from APK asset '%s'.", path);
+                return;
+            }
+
+            upToDateAssets.insert(fullPath);
+        }
+    }
+#endif
+}
+
+std::string FileSystem::getDirectoryName(const char* path)
+{
+    if (path == NULL || strlen(path) == 0)
+    {
+        return "";
+    }
+#ifdef WIN32
+    char drive[_MAX_DRIVE];
+    char dir[_MAX_DIR];
+    _splitpath(path, drive, dir, NULL, NULL);
+    std::string dirname;
+    size_t driveLength = strlen(drive);
+    if (driveLength > 0)
+    {
+        dirname.reserve(driveLength + strlen(dir));
+        dirname.append(drive);
+        dirname.append(dir);
+    }
+    else
+    {
+        dirname.assign(dir);
+    }
+    std::replace(dirname.begin(), dirname.end(), '\\', '/');
+    return dirname;
+#else
+    // dirname() modifies the input string so create a temp string
+    std::string dirname;
+    char* tempPath = new char[strlen(path) + 1];
+    strcpy(tempPath, path);
+    char* dir = ::dirname(tempPath);
+    if (dir && strlen(dir) > 0)
+    {
+        dirname.assign(dir);
+        // dirname() strips off the trailing '/' so add it back to be consistent with Windows
+        dirname.append("/");
+    }
+    SAFE_DELETE_ARRAY(tempPath);
+    return dirname;
+#endif
+}
+
+std::string FileSystem::getExtension(const char* path)
+{
+    const char* str = strrchr(path, '.');
+    if (str == NULL)
+        return "";
+
+    std::string ext;
+    size_t len = strlen(str);
+    for (size_t i = 0; i < len; ++i)
+        ext += std::toupper(str[i]);
+
+    return ext;
+}
+
+//////////////////
+
+FileStream::FileStream(FILE* file)
+    : _file(file), _canRead(false), _canWrite(false)
+{
+    
+}
+
+FileStream::~FileStream()
+{
+    if (_file)
+    {
+        close();
+    }
+}
+
+FileStream* FileStream::create(const char* filePath, const char* mode)
+{
+    FILE* file = fopen(filePath, mode);
+    if (file)
+    {
+        FileStream* stream = new FileStream(file);
+        const char* s = mode;
+        while (s != NULL && *s != '\0')
+        {
+            if (*s == 'r')
+                stream->_canRead = true;
+            else if (*s == 'w')
+                stream->_canWrite = true;
+            ++s;
+        }
+
+        return stream;
+    }
+    return NULL;
+}
+
+bool FileStream::canRead()
+{
+    return _file && _canRead;
+}
+
+bool FileStream::canWrite()
+{
+    return _file && _canWrite;
+}
+
+bool FileStream::canSeek()
+{
+    return _file != NULL;
+}
+
+void FileStream::close()
+{
+    if (_file)
+        fclose(_file);
+    _file = NULL;
+}
+
+size_t FileStream::read(void* ptr, size_t size, size_t count)
+{
+    if (!_file)
+        return 0;
+    return fread(ptr, size, count, _file);
+}
+
+char* FileStream::readLine(char* str, int num)
+{
+    if (!_file)
+        return 0;
+    return fgets(str, num, _file);
+}
+
+size_t FileStream::write(const void* ptr, size_t size, size_t count)
+{
+    if (!_file)
+        return 0;
+    return fwrite(ptr, size, count, _file);
+}
+
+bool FileStream::eof()
+{
+    if (!_file || feof(_file))
+        return true;
+    return ((size_t)position()) >= length();
+}
+
+size_t FileStream::length()
+{
+    size_t len = 0;
+    if (canSeek())
+    {
+        long int pos = position();
+        if (seek(0, SEEK_END))
+        {
+            len = position();
+        }
+        seek(pos, SEEK_SET);
+    }
+    return len;
+}
+
+long int FileStream::position()
+{
+    if (!_file)
+        return -1;
+    return ftell(_file);
+}
+
+bool FileStream::seek(long int offset, int origin)
+{
+    if (!_file)
+        return false;
+    return fseek(_file, offset, origin) == 0;
+}
+
+bool FileStream::rewind()
+{
+    if (canSeek())
+    {
+        ::rewind(_file);
+        return true;
+    }
+    return false;
+}
+
+////////////////////////////////
+
+#ifdef __ANDROID__
+
+FileStreamAndroid::FileStreamAndroid(AAsset* asset)
+    : _asset(asset)
+{
+}
+
+FileStreamAndroid::~FileStreamAndroid()
+{
+    if (_asset)
+        close();
+}
+
+FileStreamAndroid* FileStreamAndroid::create(const char* filePath, const char* mode)
+{
+    AAsset* asset = AAssetManager_open(__assetManager, filePath, AASSET_MODE_RANDOM);
+    if (asset)
+    {
+        FileStreamAndroid* stream = new FileStreamAndroid(asset);
+        return stream;
+    }
+    return NULL;
+}
+
+bool FileStreamAndroid::canRead()
+{
+    return true;
+}
+
+bool FileStreamAndroid::canWrite()
+{
+    return false;
+}
+
+bool FileStreamAndroid::canSeek()
+{
+    return true;
+}
+
+void FileStreamAndroid::close()
+{
+    if (_asset)
+        AAsset_close(_asset);
+    _asset = NULL;
+}
+
+size_t FileStreamAndroid::read(void* ptr, size_t size, size_t count)
+{
+    int result = AAsset_read(_asset, ptr, size * count);
+    return result > 0 ? ((size_t)result) / size : 0;
+}
+
+char* FileStreamAndroid::readLine(char* str, int num)
+{
+    if (num <= 0)
+        return NULL;
+    char c = 0;
+    size_t maxCharsToRead = num - 1;
+    for (size_t i = 0; i < maxCharsToRead; ++i)
+    {
+        size_t result = read(&c, 1, 1);
+        if (result != 1)
+        {
+            str[i] = '\0';
+            break;
+        }
+        if (c == '\n')
+        {
+            str[i] = c;
+            str[i + 1] = '\0';
+            break;
+        }
+        else if(c == '\r')
+        {
+            str[i] = c;
+            // next may be '\n'
+            size_t pos = position();
+
+            char nextChar = 0;
+            if (read(&nextChar, 1, 1) != 1)
+            {
+                // no more characters
+                str[i + 1] = '\0';
+                break;
+            }
+            if (nextChar == '\n')
+            {
+                if (i == maxCharsToRead - 1)
+                {
+                    str[i + 1] = '\0';
+                    break;
+                }
+                else
+                {
+                    str[i + 1] = nextChar;
+                    str[i + 2] = '\0';
+                    break;
+                }
+            }
+            else
+            {
+                seek(pos, SEEK_SET);
+                str[i + 1] = '\0';
+                break;
+            }
+        }
+        str[i] = c;
+    }
+    return str; // what if first read failed?
+}
+
+size_t FileStreamAndroid::write(const void* ptr, size_t size, size_t count)
+{
+    return 0;
+}
+
+bool FileStreamAndroid::eof()
+{
+    return position() >= length();
+}
+
+size_t FileStreamAndroid::length()
+{
+    return (size_t)AAsset_getLength(_asset);
+}
+
+long int FileStreamAndroid::position()
+{
+    return AAsset_getLength(_asset) - AAsset_getRemainingLength(_asset);
+}
+
+bool FileStreamAndroid::seek(long int offset, int origin)
+{
+    return AAsset_seek(_asset, offset, origin) != -1;
+}
+
+bool FileStreamAndroid::rewind()
+{
+    if (canSeek())
+    {
+        return AAsset_seek(_asset, 0, SEEK_SET) != -1;
+    }
+    return false;
+}
+
+#endif
+
+}

BIN
samples/browser/res/common/box.gpb


+ 37 - 37
samples/browser/res/common/box.material

@@ -1,38 +1,38 @@
-material box
-{
-    technique
-    {
-        pass 0
-        {
-            // shaders
-            vertexShader = res/shaders/textured.vert
-            fragmentShader = res/shaders/textured.frag
-            defines = SPECULAR;DIRECTIONAL_LIGHT_COUNT 1
-            
-            // uniforms
-            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-            u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
-            u_cameraPosition = CAMERA_WORLD_POSITION
-            u_ambientColor = SCENE_AMBIENT_COLOR
-            u_specularExponent = 50
-            
-            // samplers
-            sampler u_diffuseTexture
-            {
-                path = res/png/box-diffuse.png
-                mipmap = true
-                wrapS = CLAMP
-                wrapT = CLAMP
-                minFilter = NEAREST_MIPMAP_LINEAR
-                magFilter = LINEAR
-            }
-
-            // render state
-            renderState
-            {
-                cullFace = true
-                depthTest = true
-            }
-        }
-    }
+material lambert1
+{
+    technique
+    {
+        pass 0
+        {
+            // shaders
+            vertexShader = res/shaders/textured.vert
+            fragmentShader = res/shaders/textured.frag
+            defines = SPECULAR;DIRECTIONAL_LIGHT_COUNT 1
+            
+            // uniforms
+            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
+            u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
+            u_cameraPosition = CAMERA_WORLD_POSITION
+            u_ambientColor = SCENE_AMBIENT_COLOR
+            u_specularExponent = 50
+            
+            // samplers
+            sampler u_diffuseTexture
+            {
+                path = res/png/logo.png
+                mipmap = true
+                wrapS = CLAMP
+                wrapT = CLAMP
+                minFilter = NEAREST_MIPMAP_LINEAR
+                magFilter = LINEAR
+            }
+
+            // render state
+            renderState
+            {
+                cullFace = true
+                depthTest = true
+            }
+        }
+    }
 }

+ 37 - 37
samples/browser/res/common/duck.material

@@ -1,38 +1,38 @@
-material duck
-{
-    technique
-    {
-        pass 0
-        {
-            // shaders
-            vertexShader = res/shaders/textured.vert
-            fragmentShader = res/shaders/textured.frag
-            defines = SPECULAR;DIRECTIONAL_LIGHT_COUNT 1
-            
-            // uniforms
-            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-            u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
-            u_cameraPosition = CAMERA_WORLD_POSITION
-            u_ambientColor = SCENE_AMBIENT_COLOR
-            u_specularExponent = 50
-            
-            // samplers
-            sampler u_diffuseTexture
-            {
-                path = res/png/duck-diffuse.png
-                mipmap = true
-                wrapS = CLAMP
-                wrapT = CLAMP
-                minFilter = NEAREST_MIPMAP_LINEAR
-                magFilter = LINEAR
-            }
-
-            // render state
-            renderState
-            {
-                cullFace = true
-                depthTest = true
-            }
-        }
-    }
+material duck
+{
+    technique
+    {
+        pass 0
+        {
+            // shaders
+            vertexShader = res/shaders/textured.vert
+            fragmentShader = res/shaders/textured.frag
+            defines = SPECULAR;DIRECTIONAL_LIGHT_COUNT 1
+            
+            // uniforms
+            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
+            u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
+            u_cameraPosition = CAMERA_WORLD_POSITION
+            u_ambientColor = SCENE_AMBIENT_COLOR
+            u_specularExponent = 50
+            
+            // samplers
+            sampler u_diffuseTexture
+            {
+                path = res/png/duck.png
+                mipmap = true
+                wrapS = CLAMP
+                wrapT = CLAMP
+                minFilter = NEAREST_MIPMAP_LINEAR
+                magFilter = LINEAR
+            }
+
+            // render state
+            renderState
+            {
+                cullFace = true
+                depthTest = true
+            }
+        }
+    }
 }

+ 127 - 129
samples/browser/res/common/forms/formBasicControls.form

@@ -1,129 +1,127 @@
-form basicControls
-{
-    theme = res/common/default.theme
-    layout = LAYOUT_ABSOLUTE
-    style = basicContainer
-    size = 600, 600
-	consumeInputEvents = true
-    	
-	label title
-	{
-		style = underlined
-		position = 185, 0
-		size = 200, 50
-		text = This is a label.
-	}
-		
-	button testButton
-	{
-		style = buttonHover
-		position = 20, 80
-		size = 200, 100
-		text = This is a button with a hover state.
-	}
-
-	checkbox testCheckbox
-	{
-		style = iconNoBorder
-		position = 20, 220
-		size = 200, 40
-		text = This is a checkbox.
-	}
-	
-	slider testSlider
-	{
-		style = topLeftNoBorder
-		position = 25, 315
-		size = 190, 60
-		orientation = HORIZONTAL
-		min = -100
-		max = 100
-		value = 0
-		//step = 5
-		text = This is a slider.
-		valueTextVisible = true
-		consumeInputEvents = true
-	}
-
-    label textBoxLabel
-    {
-        style = iconNoBorder
-        position = 25, 400
-        size = 200, 60
-        text = Label:
-    }
-
-    textBox testTextBox
-    {
-        style = topLeftAlignedEntry
-        position = 20, 450
-        size = 250, 80
-        text = This is a text box.
-		consumeInputEvents = true
-    }
-
-    textBox testPasswordTextBox
-    {
-        style = topLeftAlignedEntry
-        position = 20, 540
-        size = 250, 40
-        text = PASSWORD
-        consumeInputEvents = true
-        inputMode = PASSWORD
-    }
-
-	container radioButtonContainer
-	{
-		layout = LAYOUT_VERTICAL
-		style = basic
-		position = 330, 100
-		size = 200, 140
-		
-		radioButton choice1
-		{
-			style = iconNoBorder
-			text = Radio button 1.
-			group = testRadio
-			//position = 350, 80
-			size = 180, 40
-			selected = true
-		}
-
-		radioButton choice2 : choice1
-		{
-			text = Radio button 2.
-			//position = 350, 130
-			selected = false
-		}
-
-		radioButton choice3 : choice2
-		{
-			text = Radio button 3.
-			//position = 350, 180
-		}
-	}
-	
-	image testImage
-	{
-		position = 300, 250
-		style = basic
-		size = 256, 256
-		path = res/png/box-diffuse.png
-		//srcRegion = 20, 20, 100, 100
-		//dstRegion = 20, 20, 100, 100
-	}
-	
-	button alignedButton
-    {
-		margin
-		{
-			right = 50
-			bottom = 100
-		}
-	
-        style = buttonStyle
-        alignment = ALIGN_BOTTOM_RIGHT
-        size = 200, 100
-        text = Alignment: bottom-right. Right margin: 50. Bottom margin: 100.
-    }
-}
+form basicControls
+{
+    theme = res/common/default.theme
+    layout = LAYOUT_ABSOLUTE
+    style = basicContainer
+    size = 600, 600
+	consumeInputEvents = true
+    	
+	label title
+	{
+		style = underlined
+		position = 185, 0
+		size = 200, 50
+		text = This is a label.
+	}
+		
+	button testButton
+	{
+		style = buttonHover
+		position = 20, 80
+		size = 200, 100
+		text = This is a button with a hover state.
+	}
+
+	checkbox testCheckbox
+	{
+		style = iconNoBorder
+		position = 20, 220
+		size = 200, 40
+		text = This is a checkbox.
+	}
+	
+	slider testSlider
+	{
+		style = topLeftNoBorder
+		position = 25, 315
+		size = 190, 60
+		orientation = HORIZONTAL
+		min = -100
+		max = 100
+		value = 0
+		//step = 5
+		text = This is a slider.
+		valueTextVisible = true
+		consumeInputEvents = true
+	}
+
+    label textBoxLabel
+    {
+        style = iconNoBorder
+        position = 25, 400
+        size = 200, 60
+        text = Label:
+    }
+
+    textBox testTextBox
+    {
+        style = topLeftAlignedEntry
+        position = 20, 450
+        size = 250, 80
+        text = This is a text box.
+		consumeInputEvents = true
+    }
+
+    textBox testPasswordTextBox
+    {
+        style = topLeftAlignedEntry
+        position = 20, 540
+        size = 250, 40
+        text = PASSWORD
+        consumeInputEvents = true
+        inputMode = PASSWORD
+    }
+
+	container radioButtonContainer
+	{
+		layout = LAYOUT_VERTICAL
+		style = basic
+		position = 330, 100
+		size = 200, 140
+		
+		radioButton choice1
+		{
+			style = iconNoBorder
+			text = Radio button 1.
+			group = testRadio
+			//position = 350, 80
+			size = 180, 40
+			selected = true
+		}
+
+		radioButton choice2 : choice1
+		{
+			text = Radio button 2.
+			//position = 350, 130
+			selected = false
+		}
+
+		radioButton choice3 : choice2
+		{
+			text = Radio button 3.
+			//position = 350, 180
+		}
+	}
+	
+	image testImage
+	{
+		position = 300, 250
+		style = basic
+		size = 256, 256
+		path = res/png/logo.png
+	}
+	
+	button alignedButton
+    {
+		margin
+		{
+			right = 50
+			bottom = 100
+		}
+	
+        style = buttonStyle
+        alignment = ALIGN_BOTTOM_RIGHT
+        size = 200, 100
+        text = Alignment: bottom-right. Right margin: 50. Bottom margin: 100.
+    }
+}

BIN
samples/browser/res/design/box.mb


BIN
samples/browser/res/png/box-diffuse.png


BIN
samples/browser/res/png/duck-diffuse.png


+ 23 - 6
samples/browser/sample-browser.vcxproj

@@ -154,8 +154,8 @@
       <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>
-      </Command>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     </PostBuildEvent>
     <CustomBuildStep>
       <Command>
@@ -218,8 +218,8 @@
       <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>
-      </Command>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     </PostBuildEvent>
     <CustomBuildStep>
       <Command>
@@ -282,8 +282,8 @@
       <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>
-      </Command>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     </PostBuildEvent>
     <CustomBuildStep>
       <Command>
@@ -390,6 +390,22 @@
     <None Include="res\common\terrain\sky.material" />
     <None Include="res\common\terrain\terrain.form" />
     <None Include="res\common\text.form" />
+    <None Include="res\shaders\colored.frag" />
+    <None Include="res\shaders\colored.vert" />
+    <None Include="res\shaders\font.frag" />
+    <None Include="res\shaders\font.vert" />
+    <None Include="res\shaders\form.frag" />
+    <None Include="res\shaders\form.vert" />
+    <None Include="res\shaders\lighting.frag" />
+    <None Include="res\shaders\lighting.vert" />
+    <None Include="res\shaders\skinning-none.vert" />
+    <None Include="res\shaders\skinning.vert" />
+    <None Include="res\shaders\sprite.frag" />
+    <None Include="res\shaders\sprite.vert" />
+    <None Include="res\shaders\terrain.frag" />
+    <None Include="res\shaders\terrain.vert" />
+    <None Include="res\shaders\textured.frag" />
+    <None Include="res\shaders\textured.vert" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="src\Audio3DSample.cpp" />
@@ -447,6 +463,7 @@
     <Image Include="res\common\terrain\normalmap.dds" />
     <Image Include="res\common\terrain\rock.dds" />
     <Image Include="res\common\terrain\sky.dds" />
+    <Image Include="res\logo_powered_white.png" />
     <Image Include="res\png\box-diffuse.png" />
     <Image Include="res\png\brick.png" />
     <Image Include="res\png\brickn.png" />

+ 457 - 403
samples/browser/sample-browser.vcxproj.filters

@@ -1,404 +1,458 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="src">
-    </Filter>
-    <Filter Include="src\common">
-      <UniqueIdentifier>{c35d9ec0-a966-49e8-af48-14cbcb2d6818}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res">
-      <UniqueIdentifier>{b0da65f8-9ff6-4813-9af3-3bb222d54acf}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res\common">
-      <UniqueIdentifier>{6cb7d9bf-0b2d-44df-a48d-d8150c67f38c}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res\png">
-      <UniqueIdentifier>{6a436bab-00f5-4c87-9e53-b360dba474c2}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res\common\forms">
-      <UniqueIdentifier>{a3201c29-9b57-40a3-839e-e5b8ad1fe53d}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res\common\terrain">
-      <UniqueIdentifier>{7486d723-ca70-4cf7-a8fb-034679fad89f}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res\common\postprocess">
-      <UniqueIdentifier>{97b23ce2-184f-46f4-a2fc-11aca4473fb3}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="game.config" />
-    <None Include="icon.png" />
-    <None Include="bar-descriptor.xml" />
-    <None Include="res\common\forms\formBasicControls.form">
-      <Filter>res\common\forms</Filter>
-    </None>
-    <None Include="res\common\forms\formFlowLayout.form">
-      <Filter>res\common\forms</Filter>
-    </None>
-    <None Include="res\common\forms\formScrolling.form">
-      <Filter>res\common\forms</Filter>
-    </None>
-    <None Include="res\common\forms\formSelect.form">
-      <Filter>res\common\forms</Filter>
-    </None>
-    <None Include="res\common\forms\formVerticalLayout.form">
-      <Filter>res\common\forms</Filter>
-    </None>
-    <None Include="res\common\forms\formZOrder.form">
-      <Filter>res\common\forms</Filter>
-    </None>
-    <None Include="res\common\postprocess\postprocess.material">
-      <Filter>res\common\postprocess</Filter>
-    </None>
-    <None Include="res\common\postprocess\postprocess.vert">
-      <Filter>res\common\postprocess</Filter>
-    </None>
-    <None Include="res\common\postprocess\postprocess_gaussianblur.frag">
-      <Filter>res\common\postprocess</Filter>
-    </None>
-    <None Include="res\common\postprocess\postprocess_grayscale.frag">
-      <Filter>res\common\postprocess</Filter>
-    </None>
-    <None Include="res\common\postprocess\postprocess_oldfilm.frag">
-      <Filter>res\common\postprocess</Filter>
-    </None>
-    <None Include="res\common\postprocess\postprocess_passthrough.frag">
-      <Filter>res\common\postprocess</Filter>
-    </None>
-    <None Include="res\common\postprocess\postprocess_pixelate.frag">
-      <Filter>res\common\postprocess</Filter>
-    </None>
-    <None Include="res\common\postprocess\postprocess_sepia.frag">
-      <Filter>res\common\postprocess</Filter>
-    </None>
-    <None Include="res\common\postprocess\postprocess_sobeledge.frag">
-      <Filter>res\common\postprocess</Filter>
-    </None>
-    <None Include="res\common\terrain\encode.bat">
-      <Filter>res\common\terrain</Filter>
-    </None>
-    <None Include="res\common\terrain\heightmap.r16">
-      <Filter>res\common\terrain</Filter>
-    </None>
-    <None Include="res\common\terrain\sample.scene">
-      <Filter>res\common\terrain</Filter>
-    </None>
-    <None Include="res\common\terrain\sample.terrain">
-      <Filter>res\common\terrain</Filter>
-    </None>
-    <None Include="res\common\terrain\shapes.material">
-      <Filter>res\common\terrain</Filter>
-    </None>
-    <None Include="res\common\terrain\sky.fbx">
-      <Filter>res\common\terrain</Filter>
-    </None>
-    <None Include="res\common\terrain\sky.gpb">
-      <Filter>res\common\terrain</Filter>
-    </None>
-    <None Include="res\common\terrain\sky.material">
-      <Filter>res\common\terrain</Filter>
-    </None>
-    <None Include="res\common\terrain\terrain.form">
-      <Filter>res\common\terrain</Filter>
-    </None>
-    <None Include="res\common\arial.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\arial-distance.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\badaboom.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\box.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\box.material">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\camera.lua">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\constraints.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\constraints.physics">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\constraints.scene">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\custom.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\default.theme">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\duck.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\duck.material">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\fishfingers.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\gamepad.form">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\gamepad.theme">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\grid.material">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\inputs.form">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\light.form">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\light.material">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\lightBrickWall.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\neuropol.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\physics.form">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\physics.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\physics.material">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\physics.physics">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\physics.scene">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\sample.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\sample.material">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\sample.scene">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\sphere.gpb">
-      <Filter>res\common</Filter>
-    </None>
-    <None Include="res\common\text.form">
-      <Filter>res\common</Filter>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\MeshPrimitiveSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\CreateSceneSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Audio3DSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\InputSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\LoadSceneSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\TextSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\TextureSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SpriteBatchSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Grid.h">
-      <Filter>src\common</Filter>
-    </ClInclude>
-    <ClInclude Include="src\FirstPersonCamera.h">
-      <Filter>src\common</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SamplesGame.h">
-      <Filter>src\common</Filter>
-    </ClInclude>
-    <ClInclude Include="src\Sample.h">
-      <Filter>src\common</Filter>
-    </ClInclude>
-    <ClInclude Include="src\MeshBatchSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\TriangleSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\GestureSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\BillboardSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\FormsSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\LightSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PostProcessSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\GamepadSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\PhysicsCollisionObjectSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\TerrainSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-    <ClInclude Include="src\SceneRendererSample.h">
-      <Filter>src</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\MeshPrimitiveSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\CreateSceneSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Audio3DSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\InputSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\LoadSceneSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\TextSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\TextureSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SpriteBatchSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Grid.cpp">
-      <Filter>src\common</Filter>
-    </ClCompile>
-    <ClCompile Include="src\FirstPersonCamera.cpp">
-      <Filter>src\common</Filter>
-    </ClCompile>
-    <ClCompile Include="src\Sample.cpp">
-      <Filter>src\common</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SamplesGame.cpp">
-      <Filter>src\common</Filter>
-    </ClCompile>
-    <ClCompile Include="src\MeshBatchSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\TriangleSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\GestureSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\BillboardSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\FormsSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\LightSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PostProcessSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\GamepadSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\PhysicsCollisionObjectSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\TerrainSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-    <ClCompile Include="src\SceneRendererSample.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <Image Include="res\common\terrain\dirt.dds">
-      <Filter>res\common\terrain</Filter>
-    </Image>
-    <Image Include="res\common\terrain\grass.dds">
-      <Filter>res\common\terrain</Filter>
-    </Image>
-    <Image Include="res\common\terrain\normalmap.dds">
-      <Filter>res\common\terrain</Filter>
-    </Image>
-    <Image Include="res\common\terrain\rock.dds">
-      <Filter>res\common\terrain</Filter>
-    </Image>
-    <Image Include="res\common\terrain\sky.dds">
-      <Filter>res\common\terrain</Filter>
-    </Image>
-    <Image Include="res\png\box-diffuse.png">
-      <Filter>res\png</Filter>
-    </Image>
-    <Image Include="res\png\brick.png">
-      <Filter>res\png</Filter>
-    </Image>
-    <Image Include="res\png\brickn.png">
-      <Filter>res\png</Filter>
-    </Image>
-    <Image Include="res\png\color-wheel.png">
-      <Filter>res\png</Filter>
-    </Image>
-    <Image Include="res\png\crate.png">
-      <Filter>res\png</Filter>
-    </Image>
-    <Image Include="res\png\default-theme.png">
-      <Filter>res\png</Filter>
-    </Image>
-    <Image Include="res\png\dirt.png">
-      <Filter>res\png</Filter>
-    </Image>
-    <Image Include="res\png\duck-diffuse.png">
-      <Filter>res\png</Filter>
-    </Image>
-    <Image Include="res\png\gamepad.png">
-      <Filter>res\png</Filter>
-    </Image>
-    <Image Include="res\png\grass.png">
-      <Filter>res\png</Filter>
-    </Image>
-    <Image Include="res\png\light-directional.png">
-      <Filter>res\png</Filter>
-    </Image>
-    <Image Include="res\png\light-point.png">
-      <Filter>res\png</Filter>
-    </Image>
-    <Image Include="res\png\light-spot.png">
-      <Filter>res\png</Filter>
-    </Image>
-  </ItemGroup>
-  <ItemGroup>
-    <Media Include="res\common\footsteps.wav">
-      <Filter>res\common</Filter>
-    </Media>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="src">
+    </Filter>
+    <Filter Include="src\common">
+      <UniqueIdentifier>{c35d9ec0-a966-49e8-af48-14cbcb2d6818}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res">
+      <UniqueIdentifier>{b0da65f8-9ff6-4813-9af3-3bb222d54acf}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\common">
+      <UniqueIdentifier>{6cb7d9bf-0b2d-44df-a48d-d8150c67f38c}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\png">
+      <UniqueIdentifier>{6a436bab-00f5-4c87-9e53-b360dba474c2}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\common\forms">
+      <UniqueIdentifier>{a3201c29-9b57-40a3-839e-e5b8ad1fe53d}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\common\terrain">
+      <UniqueIdentifier>{7486d723-ca70-4cf7-a8fb-034679fad89f}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\common\postprocess">
+      <UniqueIdentifier>{97b23ce2-184f-46f4-a2fc-11aca4473fb3}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\shaders">
+      <UniqueIdentifier>{e1543678-e81b-48de-b753-3d5f000fd70b}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="game.config" />
+    <None Include="icon.png" />
+    <None Include="bar-descriptor.xml" />
+    <None Include="res\common\forms\formBasicControls.form">
+      <Filter>res\common\forms</Filter>
+    </None>
+    <None Include="res\common\forms\formFlowLayout.form">
+      <Filter>res\common\forms</Filter>
+    </None>
+    <None Include="res\common\forms\formScrolling.form">
+      <Filter>res\common\forms</Filter>
+    </None>
+    <None Include="res\common\forms\formSelect.form">
+      <Filter>res\common\forms</Filter>
+    </None>
+    <None Include="res\common\forms\formVerticalLayout.form">
+      <Filter>res\common\forms</Filter>
+    </None>
+    <None Include="res\common\forms\formZOrder.form">
+      <Filter>res\common\forms</Filter>
+    </None>
+    <None Include="res\common\postprocess\postprocess.material">
+      <Filter>res\common\postprocess</Filter>
+    </None>
+    <None Include="res\common\postprocess\postprocess.vert">
+      <Filter>res\common\postprocess</Filter>
+    </None>
+    <None Include="res\common\postprocess\postprocess_gaussianblur.frag">
+      <Filter>res\common\postprocess</Filter>
+    </None>
+    <None Include="res\common\postprocess\postprocess_grayscale.frag">
+      <Filter>res\common\postprocess</Filter>
+    </None>
+    <None Include="res\common\postprocess\postprocess_oldfilm.frag">
+      <Filter>res\common\postprocess</Filter>
+    </None>
+    <None Include="res\common\postprocess\postprocess_passthrough.frag">
+      <Filter>res\common\postprocess</Filter>
+    </None>
+    <None Include="res\common\postprocess\postprocess_pixelate.frag">
+      <Filter>res\common\postprocess</Filter>
+    </None>
+    <None Include="res\common\postprocess\postprocess_sepia.frag">
+      <Filter>res\common\postprocess</Filter>
+    </None>
+    <None Include="res\common\postprocess\postprocess_sobeledge.frag">
+      <Filter>res\common\postprocess</Filter>
+    </None>
+    <None Include="res\common\terrain\encode.bat">
+      <Filter>res\common\terrain</Filter>
+    </None>
+    <None Include="res\common\terrain\heightmap.r16">
+      <Filter>res\common\terrain</Filter>
+    </None>
+    <None Include="res\common\terrain\sample.scene">
+      <Filter>res\common\terrain</Filter>
+    </None>
+    <None Include="res\common\terrain\sample.terrain">
+      <Filter>res\common\terrain</Filter>
+    </None>
+    <None Include="res\common\terrain\shapes.material">
+      <Filter>res\common\terrain</Filter>
+    </None>
+    <None Include="res\common\terrain\sky.fbx">
+      <Filter>res\common\terrain</Filter>
+    </None>
+    <None Include="res\common\terrain\sky.gpb">
+      <Filter>res\common\terrain</Filter>
+    </None>
+    <None Include="res\common\terrain\sky.material">
+      <Filter>res\common\terrain</Filter>
+    </None>
+    <None Include="res\common\terrain\terrain.form">
+      <Filter>res\common\terrain</Filter>
+    </None>
+    <None Include="res\common\arial.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\arial-distance.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\badaboom.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\box.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\box.material">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\camera.lua">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\constraints.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\constraints.physics">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\constraints.scene">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\custom.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\default.theme">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\duck.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\duck.material">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\fishfingers.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\gamepad.form">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\gamepad.theme">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\grid.material">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\inputs.form">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\light.form">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\light.material">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\lightBrickWall.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\neuropol.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\physics.form">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\physics.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\physics.material">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\physics.physics">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\physics.scene">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\sample.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\sample.material">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\sample.scene">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\sphere.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\text.form">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\shaders\colored.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\colored.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning-none.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\MeshPrimitiveSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\CreateSceneSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Audio3DSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\InputSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\LoadSceneSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\TextSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\TextureSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SpriteBatchSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Grid.h">
+      <Filter>src\common</Filter>
+    </ClInclude>
+    <ClInclude Include="src\FirstPersonCamera.h">
+      <Filter>src\common</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SamplesGame.h">
+      <Filter>src\common</Filter>
+    </ClInclude>
+    <ClInclude Include="src\Sample.h">
+      <Filter>src\common</Filter>
+    </ClInclude>
+    <ClInclude Include="src\MeshBatchSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\TriangleSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\GestureSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\BillboardSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\FormsSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\LightSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PostProcessSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\GamepadSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\PhysicsCollisionObjectSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\TerrainSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+    <ClInclude Include="src\SceneRendererSample.h">
+      <Filter>src</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\MeshPrimitiveSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\CreateSceneSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Audio3DSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\InputSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\LoadSceneSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\TextSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\TextureSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SpriteBatchSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Grid.cpp">
+      <Filter>src\common</Filter>
+    </ClCompile>
+    <ClCompile Include="src\FirstPersonCamera.cpp">
+      <Filter>src\common</Filter>
+    </ClCompile>
+    <ClCompile Include="src\Sample.cpp">
+      <Filter>src\common</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SamplesGame.cpp">
+      <Filter>src\common</Filter>
+    </ClCompile>
+    <ClCompile Include="src\MeshBatchSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\TriangleSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\GestureSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\BillboardSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\FormsSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\LightSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PostProcessSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\GamepadSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\PhysicsCollisionObjectSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\TerrainSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+    <ClCompile Include="src\SceneRendererSample.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\common\terrain\dirt.dds">
+      <Filter>res\common\terrain</Filter>
+    </Image>
+    <Image Include="res\common\terrain\grass.dds">
+      <Filter>res\common\terrain</Filter>
+    </Image>
+    <Image Include="res\common\terrain\normalmap.dds">
+      <Filter>res\common\terrain</Filter>
+    </Image>
+    <Image Include="res\common\terrain\rock.dds">
+      <Filter>res\common\terrain</Filter>
+    </Image>
+    <Image Include="res\common\terrain\sky.dds">
+      <Filter>res\common\terrain</Filter>
+    </Image>
+    <Image Include="res\png\box-diffuse.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\png\brick.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\png\brickn.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\png\color-wheel.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\png\crate.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\png\default-theme.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\png\dirt.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\png\duck-diffuse.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\png\gamepad.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\png\grass.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\png\light-directional.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\png\light-point.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\png\light-spot.png">
+      <Filter>res\png</Filter>
+    </Image>
+    <Image Include="res\logo_powered_white.png">
+      <Filter>res</Filter>
+    </Image>
+  </ItemGroup>
+  <ItemGroup>
+    <Media Include="res\common\footsteps.wav">
+      <Filter>res\common</Filter>
+    </Media>
+  </ItemGroup>
 </Project>

+ 355 - 355
samples/browser/src/Audio3DSample.cpp

@@ -1,356 +1,356 @@
-#include "Audio3DSample.h"
-#include "Grid.h"
-#include "SamplesGame.h"
-
-#if defined(ADD_SAMPLE)
-    ADD_SAMPLE("Audio", "3D Audio", Audio3DSample, 1);
-#endif
-
-static const unsigned int MOVE_FORWARD = 1;
-static const unsigned int MOVE_BACKWARD = 2;
-static const unsigned int MOVE_LEFT = 4;
-static const unsigned int MOVE_RIGHT = 8;
-static const unsigned int MOVE_UP = 16;
-static const unsigned int MOVE_DOWN = 32;
-
-static const float MOVE_SPEED = 15.0f;
-static const float UP_DOWN_SPEED = 10.0f;
-
-Audio3DSample::Audio3DSample()
-    : _font(NULL), _scene(NULL), _cubeNode(NULL), _gamepad(NULL), _moveFlags(0), _prevX(0), _prevY(0), _buttonPressed(false)
-{
-}
-
-void Audio3DSample::initialize()
-{
-    setMultiTouch(true);
-    _font = Font::create("res/common/arial.gpb");
-    // Load game scene from file
-    _scene = Scene::load("res/common/box.gpb");
-
-    // Get light node
-    Node* lightNode = _scene->findNode("directionalLight1");
-    Light* light = lightNode->getLight();
-
-    // Initialize box model
-    Node* boxNode = _scene->findNode("box");
-    Model* boxModel = boxNode->getModel();
-    Material* boxMaterial = boxModel->setMaterial("res/common/box.material");
-
-    boxMaterial->getParameter("u_directionalLightColor[0]")->setValue(light->getColor());
-    boxMaterial->getParameter("u_directionalLightDirection[0]")->setValue(lightNode->getForwardVectorView());
-
-    // Remove the cube from the scene but keep a reference to it.
-    _cubeNode = boxNode;
-    _cubeNode->addRef();
-    _scene->removeNode(_cubeNode);
-
-    loadGrid(_scene);
-
-    // Initialize cameraa
-    Vector3 cameraPosition(5, 5, 1);
-    if (Camera* camera = _scene->getActiveCamera())
-    {
-        camera->getNode()->getTranslation(&cameraPosition);
-    }
-
-    _fpCamera.initialize();
-    _fpCamera.setPosition(cameraPosition);
-    _scene->addNode(_fpCamera.getRootNode());
-    _scene->setActiveCamera(_fpCamera.getCamera());
-
-    _gamepad = getGamepad(0);
-    // This is needed because the virtual gamepad is shared between all samples.
-    // SamplesGame always ensures the virtual gamepad is disabled when a sample is exited.
-    if (_gamepad && _gamepad->isVirtual())
-        _gamepad->getForm()->setEnabled(true);
-}
-
-void Audio3DSample::finalize()
-{
-    SAFE_RELEASE(_scene);
-    SAFE_RELEASE(_font);
-    SAFE_RELEASE(_cubeNode);
-    for (std::map<std::string, Node*>::iterator it = _audioNodes.begin(); it != _audioNodes.end(); ++it)
-    {
-        it->second->release();
-    }
-    _audioNodes.clear();
-}
-
-void Audio3DSample::update(float elapsedTime)
-{
-    float time = (float)elapsedTime / 1000.0f;
-
-    Vector2 move;
-
-    if (_moveFlags != 0)
-    {
-        // Forward motion
-        if (_moveFlags & MOVE_FORWARD)
-        {
-            move.y = 1;
-        }
-        else if (_moveFlags & MOVE_BACKWARD)
-        {
-            move.y = -1;
-        }
-        // Strafing
-        if (_moveFlags & MOVE_LEFT)
-        {
-            move.x = 1;
-        }
-        else if (_moveFlags & MOVE_RIGHT)
-        {
-            move.x = -1;
-        }
-        move.normalize();
-
-        // Up and down
-        if (_moveFlags & MOVE_UP)
-        {
-            _fpCamera.moveUp(time * UP_DOWN_SPEED);
-        }
-        else if (_moveFlags & MOVE_DOWN)
-        {
-            _fpCamera.moveDown(time * UP_DOWN_SPEED);
-        }
-    }
-    else if (_gamepad->getJoystickCount() > 0)
-    {
-        _gamepad->getJoystickValues(0, &move);
-        move.x = -move.x;
-    }
-    if (_gamepad->getJoystickCount() > 1)
-    {
-        Vector2 joy2;
-        _gamepad->getJoystickValues(1, &joy2);
-        _fpCamera.rotate(MATH_DEG_TO_RAD(joy2.x * 2.0f), MATH_DEG_TO_RAD(joy2.y * 2.0f));
-    }
-
-    if (!move.isZero())
-    {
-        move.scale(time * MOVE_SPEED);
-        _fpCamera.moveForward(move.y);
-        _fpCamera.moveLeft(move.x);
-    }
-
-    if (!_buttonPressed && _gamepad->isButtonDown(Gamepad::BUTTON_A))
-    {
-        addSound("footsteps.wav");
-    }
-    _buttonPressed = _gamepad->isButtonDown(Gamepad::BUTTON_A);
-}
-
-void Audio3DSample::render(float elapsedTime)
-{
-    // Clear the color and depth buffers
-    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
-
-    // Visit all the nodes in the scene for drawing
-    _scene->visit(this, &Audio3DSample::drawScene);
-
-    drawDebugText(0, _font->getSize());
-
-    _gamepad->draw();
-    drawFrameRate(_font, Vector4(0, 0.5f, 1, 1), 5, 1, getFrameRate());
-}
-
-bool Audio3DSample::drawScene(Node* node)
-{
-    // If the node visited contains a model, draw it
-    Model* model = node->getModel(); 
-    if (model)
-    {
-        model->draw();
-    }
-    return true;
-}
-
-void Audio3DSample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
-{
-    switch (evt)
-    {
-    case Touch::TOUCH_PRESS:
-        if (x < 75 && y < 50)
-        {
-            // Toggle Vsync if the user touches the top left corner
-            setVsync(!isVsync());
-        }
-        _prevX = x;
-        _prevY = y;
-        break;
-    case Touch::TOUCH_RELEASE:
-        _prevX = 0;
-        _prevY = 0;
-        break;
-    case Touch::TOUCH_MOVE:
-    {
-        int deltaX = x - _prevX;
-        int deltaY = y - _prevY;
-        _prevX = x;
-        _prevY = y;
-        float pitch = -MATH_DEG_TO_RAD(deltaY * 0.5f);
-        float yaw = MATH_DEG_TO_RAD(deltaX * 0.5f);
-        _fpCamera.rotate(yaw, pitch);
-        break;
-    }   
-    };
-}
-
-void Audio3DSample::keyEvent(Keyboard::KeyEvent evt, int key)
-{
-    if (evt == Keyboard::KEY_PRESS)
-    {
-        switch (key)
-        {
-        case Keyboard::KEY_W:
-            _moveFlags |= MOVE_FORWARD;
-            break;
-        case Keyboard::KEY_S:
-            _moveFlags |= MOVE_BACKWARD;
-            break;
-        case Keyboard::KEY_A:
-            _moveFlags |= MOVE_LEFT;
-            break;
-        case Keyboard::KEY_D:
-            _moveFlags |= MOVE_RIGHT;
-            break;
-
-        case Keyboard::KEY_Q:
-            _moveFlags |= MOVE_DOWN;
-            break;
-        case Keyboard::KEY_E:
-            _moveFlags |= MOVE_UP;
-            break;
-        case Keyboard::KEY_PG_UP:
-            _fpCamera.rotate(0, MATH_PIOVER4);
-            break;
-        case Keyboard::KEY_PG_DOWN:
-            _fpCamera.rotate(0, -MATH_PIOVER4);
-            break;
-
-        case Keyboard::KEY_ONE:
-        case Keyboard::KEY_SPACE:
-            addSound("footsteps.wav");
-            break;
-        }
-    }
-    else if (evt == Keyboard::KEY_RELEASE)
-    {
-        switch (key)
-        {
-        case Keyboard::KEY_W:
-            _moveFlags &= ~MOVE_FORWARD;
-            break;
-        case Keyboard::KEY_S:
-            _moveFlags &= ~MOVE_BACKWARD;
-            break;
-        case Keyboard::KEY_A:
-            _moveFlags &= ~MOVE_LEFT;
-            break;
-        case Keyboard::KEY_D:
-            _moveFlags &= ~MOVE_RIGHT;
-            break;
-        case Keyboard::KEY_Q:
-            _moveFlags &= ~MOVE_DOWN;
-            break;
-        case Keyboard::KEY_E:
-            _moveFlags &= ~MOVE_UP;
-            break;
-        }
-    }
-}
-
-bool Audio3DSample::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
-{
-    switch (evt)
-    {
-    case Mouse::MOUSE_WHEEL:
-        _fpCamera.moveForward(wheelDelta * MOVE_SPEED / 2.0f );
-        return true;
-    }
-    return false;
-}
-
-void Audio3DSample::addSound(const std::string& file)
-{
-    std::string path("res/common/");
-    path.append(file);
-
-    Node* node = NULL;
-    std::map<std::string, Node*>::iterator it = _audioNodes.find(path);
-    if (it != _audioNodes.end())
-    {
-        node = it->second->clone();
-    }
-    else
-    {
-        AudioSource* audioSource = AudioSource::create(path.c_str());
-        assert(audioSource);
-        audioSource->setLooped(true);
-
-        node = _cubeNode->clone();
-        node->setId(file.c_str());
-        node->setAudioSource(audioSource);
-        audioSource->release();
-        
-        _audioNodes[path] = node;
-        node->addRef();
-    }
-    assert(node);
-    Node* cameraNode = _scene->getActiveCamera()->getNode();
-    // Position the sound infront of the user
-    node->setTranslation(cameraNode->getTranslationWorld());
-    Vector3 dir = cameraNode->getForwardVectorWorld().normalize();
-    dir.scale(2);
-    node->translate(dir);
-    _scene->addNode(node);
-    node->getAudioSource()->play();
-    node->release();
-}
-
-void Audio3DSample::drawDebugText(int x, int y)
-{
-    _font->start();
-    static const int V_SPACE = 16;
-    AudioListener* audioListener = AudioListener::getInstance();
-    drawVector3("Position", audioListener->getPosition(), x, y);
-    drawVector3("Forward", audioListener->getOrientationForward(), x, y+=_font->getSize());
-    drawVector3("Orientation", audioListener->getOrientationUp(), x, y+=_font->getSize());
-    drawVector3("Velocity", audioListener->getVelocity(), x, y+=_font->getSize());
-    _font->finish();
-}
-
-void Audio3DSample::drawVector3(const char* str, const Vector3& vector, int x, int y)
-{
-    char buffer[255];
-    sprintf(buffer, "%s: (%f, %f, %f)", str, vector.x, vector.y, vector.z);
-    _font->drawText(buffer, x, y, Vector4::one(), _font->getSize());
-}
-
-void Audio3DSample::loadGrid(Scene* scene)
-{
-    assert(scene);
-    Model* gridModel = createGridModel();
-    assert(gridModel);
-    gridModel->setMaterial("res/common/grid.material");
-    Node* node = scene->addNode("grid");
-    node->setModel(gridModel);
-    gridModel->release();
-}
-
-void Audio3DSample::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad)
-{
-    switch(evt)
-    {
-    case Gamepad::CONNECTED_EVENT:
-    case Gamepad::DISCONNECTED_EVENT:
-        _gamepad = getGamepad(0);
-        // This is needed because the virtual gamepad is shared between all samples.
-        // SamplesGame always ensures the virtual gamepad is disabled when a sample is exited.
-        if (_gamepad && _gamepad->isVirtual())
-            _gamepad->getForm()->setEnabled(true);
-        break;
-    }
+#include "Audio3DSample.h"
+#include "Grid.h"
+#include "SamplesGame.h"
+
+#if defined(ADD_SAMPLE)
+    ADD_SAMPLE("Audio", "3D Audio", Audio3DSample, 1);
+#endif
+
+static const unsigned int MOVE_FORWARD = 1;
+static const unsigned int MOVE_BACKWARD = 2;
+static const unsigned int MOVE_LEFT = 4;
+static const unsigned int MOVE_RIGHT = 8;
+static const unsigned int MOVE_UP = 16;
+static const unsigned int MOVE_DOWN = 32;
+
+static const float MOVE_SPEED = 15.0f;
+static const float UP_DOWN_SPEED = 10.0f;
+
+Audio3DSample::Audio3DSample()
+    : _font(NULL), _scene(NULL), _cubeNode(NULL), _gamepad(NULL), _moveFlags(0), _prevX(0), _prevY(0), _buttonPressed(false)
+{
+}
+
+void Audio3DSample::initialize()
+{
+    setMultiTouch(true);
+    _font = Font::create("res/common/arial.gpb");
+    // Load game scene from file
+    _scene = Scene::load("res/common/box.gpb");
+
+    // Get light node
+    Node* lightNode = _scene->findNode("directionalLight1");
+    Light* light = lightNode->getLight();
+
+    // Initialize box model
+    Node* boxNode = _scene->findNode("box");
+    Model* boxModel = boxNode->getModel();
+    Material* boxMaterial = boxModel->setMaterial("res/common/box.material#lambert1");
+
+    boxMaterial->getParameter("u_directionalLightColor[0]")->setValue(light->getColor());
+    boxMaterial->getParameter("u_directionalLightDirection[0]")->setValue(lightNode->getForwardVectorView());
+
+    // Remove the cube from the scene but keep a reference to it.
+    _cubeNode = boxNode;
+    _cubeNode->addRef();
+    _scene->removeNode(_cubeNode);
+
+    loadGrid(_scene);
+
+    // Initialize cameraa
+    Vector3 cameraPosition(5, 5, 1);
+    if (Camera* camera = _scene->getActiveCamera())
+    {
+        camera->getNode()->getTranslation(&cameraPosition);
+    }
+
+    _fpCamera.initialize();
+    _fpCamera.setPosition(cameraPosition);
+    _scene->addNode(_fpCamera.getRootNode());
+    _scene->setActiveCamera(_fpCamera.getCamera());
+
+    _gamepad = getGamepad(0);
+    // This is needed because the virtual gamepad is shared between all samples.
+    // SamplesGame always ensures the virtual gamepad is disabled when a sample is exited.
+    if (_gamepad && _gamepad->isVirtual())
+        _gamepad->getForm()->setEnabled(true);
+}
+
+void Audio3DSample::finalize()
+{
+    SAFE_RELEASE(_scene);
+    SAFE_RELEASE(_font);
+    SAFE_RELEASE(_cubeNode);
+    for (std::map<std::string, Node*>::iterator it = _audioNodes.begin(); it != _audioNodes.end(); ++it)
+    {
+        it->second->release();
+    }
+    _audioNodes.clear();
+}
+
+void Audio3DSample::update(float elapsedTime)
+{
+    float time = (float)elapsedTime / 1000.0f;
+
+    Vector2 move;
+
+    if (_moveFlags != 0)
+    {
+        // Forward motion
+        if (_moveFlags & MOVE_FORWARD)
+        {
+            move.y = 1;
+        }
+        else if (_moveFlags & MOVE_BACKWARD)
+        {
+            move.y = -1;
+        }
+        // Strafing
+        if (_moveFlags & MOVE_LEFT)
+        {
+            move.x = 1;
+        }
+        else if (_moveFlags & MOVE_RIGHT)
+        {
+            move.x = -1;
+        }
+        move.normalize();
+
+        // Up and down
+        if (_moveFlags & MOVE_UP)
+        {
+            _fpCamera.moveUp(time * UP_DOWN_SPEED);
+        }
+        else if (_moveFlags & MOVE_DOWN)
+        {
+            _fpCamera.moveDown(time * UP_DOWN_SPEED);
+        }
+    }
+    else if (_gamepad->getJoystickCount() > 0)
+    {
+        _gamepad->getJoystickValues(0, &move);
+        move.x = -move.x;
+    }
+    if (_gamepad->getJoystickCount() > 1)
+    {
+        Vector2 joy2;
+        _gamepad->getJoystickValues(1, &joy2);
+        _fpCamera.rotate(MATH_DEG_TO_RAD(joy2.x * 2.0f), MATH_DEG_TO_RAD(joy2.y * 2.0f));
+    }
+
+    if (!move.isZero())
+    {
+        move.scale(time * MOVE_SPEED);
+        _fpCamera.moveForward(move.y);
+        _fpCamera.moveLeft(move.x);
+    }
+
+    if (!_buttonPressed && _gamepad->isButtonDown(Gamepad::BUTTON_A))
+    {
+        addSound("footsteps.wav");
+    }
+    _buttonPressed = _gamepad->isButtonDown(Gamepad::BUTTON_A);
+}
+
+void Audio3DSample::render(float elapsedTime)
+{
+    // Clear the color and depth buffers
+    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
+
+    // Visit all the nodes in the scene for drawing
+    _scene->visit(this, &Audio3DSample::drawScene);
+
+    drawDebugText(0, _font->getSize());
+
+    _gamepad->draw();
+    drawFrameRate(_font, Vector4(0, 0.5f, 1, 1), 5, 1, getFrameRate());
+}
+
+bool Audio3DSample::drawScene(Node* node)
+{
+    // If the node visited contains a model, draw it
+    Model* model = node->getModel(); 
+    if (model)
+    {
+        model->draw();
+    }
+    return true;
+}
+
+void Audio3DSample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
+{
+    switch (evt)
+    {
+    case Touch::TOUCH_PRESS:
+        if (x < 75 && y < 50)
+        {
+            // Toggle Vsync if the user touches the top left corner
+            setVsync(!isVsync());
+        }
+        _prevX = x;
+        _prevY = y;
+        break;
+    case Touch::TOUCH_RELEASE:
+        _prevX = 0;
+        _prevY = 0;
+        break;
+    case Touch::TOUCH_MOVE:
+    {
+        int deltaX = x - _prevX;
+        int deltaY = y - _prevY;
+        _prevX = x;
+        _prevY = y;
+        float pitch = -MATH_DEG_TO_RAD(deltaY * 0.5f);
+        float yaw = MATH_DEG_TO_RAD(deltaX * 0.5f);
+        _fpCamera.rotate(yaw, pitch);
+        break;
+    }   
+    };
+}
+
+void Audio3DSample::keyEvent(Keyboard::KeyEvent evt, int key)
+{
+    if (evt == Keyboard::KEY_PRESS)
+    {
+        switch (key)
+        {
+        case Keyboard::KEY_W:
+            _moveFlags |= MOVE_FORWARD;
+            break;
+        case Keyboard::KEY_S:
+            _moveFlags |= MOVE_BACKWARD;
+            break;
+        case Keyboard::KEY_A:
+            _moveFlags |= MOVE_LEFT;
+            break;
+        case Keyboard::KEY_D:
+            _moveFlags |= MOVE_RIGHT;
+            break;
+
+        case Keyboard::KEY_Q:
+            _moveFlags |= MOVE_DOWN;
+            break;
+        case Keyboard::KEY_E:
+            _moveFlags |= MOVE_UP;
+            break;
+        case Keyboard::KEY_PG_UP:
+            _fpCamera.rotate(0, MATH_PIOVER4);
+            break;
+        case Keyboard::KEY_PG_DOWN:
+            _fpCamera.rotate(0, -MATH_PIOVER4);
+            break;
+
+        case Keyboard::KEY_ONE:
+        case Keyboard::KEY_SPACE:
+            addSound("footsteps.wav");
+            break;
+        }
+    }
+    else if (evt == Keyboard::KEY_RELEASE)
+    {
+        switch (key)
+        {
+        case Keyboard::KEY_W:
+            _moveFlags &= ~MOVE_FORWARD;
+            break;
+        case Keyboard::KEY_S:
+            _moveFlags &= ~MOVE_BACKWARD;
+            break;
+        case Keyboard::KEY_A:
+            _moveFlags &= ~MOVE_LEFT;
+            break;
+        case Keyboard::KEY_D:
+            _moveFlags &= ~MOVE_RIGHT;
+            break;
+        case Keyboard::KEY_Q:
+            _moveFlags &= ~MOVE_DOWN;
+            break;
+        case Keyboard::KEY_E:
+            _moveFlags &= ~MOVE_UP;
+            break;
+        }
+    }
+}
+
+bool Audio3DSample::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
+{
+    switch (evt)
+    {
+    case Mouse::MOUSE_WHEEL:
+        _fpCamera.moveForward(wheelDelta * MOVE_SPEED / 2.0f );
+        return true;
+    }
+    return false;
+}
+
+void Audio3DSample::addSound(const std::string& file)
+{
+    std::string path("res/common/");
+    path.append(file);
+
+    Node* node = NULL;
+    std::map<std::string, Node*>::iterator it = _audioNodes.find(path);
+    if (it != _audioNodes.end())
+    {
+        node = it->second->clone();
+    }
+    else
+    {
+        AudioSource* audioSource = AudioSource::create(path.c_str());
+        assert(audioSource);
+        audioSource->setLooped(true);
+
+        node = _cubeNode->clone();
+        node->setId(file.c_str());
+        node->setAudioSource(audioSource);
+        audioSource->release();
+        
+        _audioNodes[path] = node;
+        node->addRef();
+    }
+    assert(node);
+    Node* cameraNode = _scene->getActiveCamera()->getNode();
+    // Position the sound infront of the user
+    node->setTranslation(cameraNode->getTranslationWorld());
+    Vector3 dir = cameraNode->getForwardVectorWorld().normalize();
+    dir.scale(2);
+    node->translate(dir);
+    _scene->addNode(node);
+    node->getAudioSource()->play();
+    node->release();
+}
+
+void Audio3DSample::drawDebugText(int x, int y)
+{
+    _font->start();
+    static const int V_SPACE = 16;
+    AudioListener* audioListener = AudioListener::getInstance();
+    drawVector3("Position", audioListener->getPosition(), x, y);
+    drawVector3("Forward", audioListener->getOrientationForward(), x, y+=_font->getSize());
+    drawVector3("Orientation", audioListener->getOrientationUp(), x, y+=_font->getSize());
+    drawVector3("Velocity", audioListener->getVelocity(), x, y+=_font->getSize());
+    _font->finish();
+}
+
+void Audio3DSample::drawVector3(const char* str, const Vector3& vector, int x, int y)
+{
+    char buffer[255];
+    sprintf(buffer, "%s: (%f, %f, %f)", str, vector.x, vector.y, vector.z);
+    _font->drawText(buffer, x, y, Vector4::one(), _font->getSize());
+}
+
+void Audio3DSample::loadGrid(Scene* scene)
+{
+    assert(scene);
+    Model* gridModel = createGridModel();
+    assert(gridModel);
+    gridModel->setMaterial("res/common/grid.material");
+    Node* node = scene->addNode("grid");
+    node->setModel(gridModel);
+    gridModel->release();
+}
+
+void Audio3DSample::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad)
+{
+    switch(evt)
+    {
+    case Gamepad::CONNECTED_EVENT:
+    case Gamepad::DISCONNECTED_EVENT:
+        _gamepad = getGamepad(0);
+        // This is needed because the virtual gamepad is shared between all samples.
+        // SamplesGame always ensures the virtual gamepad is disabled when a sample is exited.
+        if (_gamepad && _gamepad->isVirtual())
+            _gamepad->getForm()->setEnabled(true);
+        break;
+    }
 }

+ 177 - 177
samples/browser/src/CreateSceneSample.cpp

@@ -1,178 +1,178 @@
-#include "CreateSceneSample.h"
-#include "SamplesGame.h"
-
-#if defined(ADD_SAMPLE)
-    ADD_SAMPLE("Scene", "Create Scene", CreateSceneSample, 1);
-#endif
-
-static Mesh* createCubeMesh(float size = 1.0f)
-{
-    float a = size * 0.5f;
-    float vertices[] =
-    {
-        -a, -a,  a,    0.0,  0.0,  1.0,   0.0, 0.0,
-         a, -a,  a,    0.0,  0.0,  1.0,   1.0, 0.0,
-        -a,  a,  a,    0.0,  0.0,  1.0,   0.0, 1.0,
-         a,  a,  a,    0.0,  0.0,  1.0,   1.0, 1.0,
-        -a,  a,  a,    0.0,  1.0,  0.0,   0.0, 0.0,
-         a,  a,  a,    0.0,  1.0,  0.0,   1.0, 0.0,
-        -a,  a, -a,    0.0,  1.0,  0.0,   0.0, 1.0,
-         a,  a, -a,    0.0,  1.0,  0.0,   1.0, 1.0,
-        -a,  a, -a,    0.0,  0.0, -1.0,   0.0, 0.0,
-         a,  a, -a,    0.0,  0.0, -1.0,   1.0, 0.0,
-        -a, -a, -a,    0.0,  0.0, -1.0,   0.0, 1.0,
-         a, -a, -a,    0.0,  0.0, -1.0,   1.0, 1.0,
-        -a, -a, -a,    0.0, -1.0,  0.0,   0.0, 0.0,
-         a, -a, -a,    0.0, -1.0,  0.0,   1.0, 0.0,
-        -a, -a,  a,    0.0, -1.0,  0.0,   0.0, 1.0,
-         a, -a,  a,    0.0, -1.0,  0.0,   1.0, 1.0,
-         a, -a,  a,    1.0,  0.0,  0.0,   0.0, 0.0,
-         a, -a, -a,    1.0,  0.0,  0.0,   1.0, 0.0,
-         a,  a,  a,    1.0,  0.0,  0.0,   0.0, 1.0,
-         a,  a, -a,    1.0,  0.0,  0.0,   1.0, 1.0,
-        -a, -a, -a,   -1.0,  0.0,  0.0,   0.0, 0.0,
-        -a, -a,  a,   -1.0,  0.0,  0.0,   1.0, 0.0,
-        -a,  a, -a,   -1.0,  0.0,  0.0,   0.0, 1.0,
-        -a,  a,  a,   -1.0,  0.0,  0.0,   1.0, 1.0
-    };
-    short indices[] = 
-    {
-        0, 1, 2, 2, 1, 3, 4, 5, 6, 6, 5, 7, 8, 9, 10, 10, 9, 11, 12, 13, 14, 14, 13, 15, 16, 17, 18, 18, 17, 19, 20, 21, 22, 22, 21, 23
-    };
-    unsigned int vertexCount = 24;
-    unsigned int indexCount = 36;
-    VertexFormat::Element elements[] =
-    {
-        VertexFormat::Element(VertexFormat::POSITION, 3),
-        VertexFormat::Element(VertexFormat::NORMAL, 3),
-        VertexFormat::Element(VertexFormat::TEXCOORD0, 2)
-    };
-    Mesh* mesh = Mesh::createMesh(VertexFormat(elements, 3), vertexCount, false);
-    if (mesh == NULL)
-    {
-        GP_ERROR("Failed to create mesh.");
-        return NULL;
-    }
-    mesh->setVertexData(vertices, 0, vertexCount);
-    MeshPart* meshPart = mesh->addPart(Mesh::TRIANGLES, Mesh::INDEX16, indexCount, false);
-    meshPart->setIndexData(indices, 0, indexCount);
-    return mesh;
-}
-
-CreateSceneSample::CreateSceneSample()
-    : _font(NULL), _scene(NULL), _cubeNode(NULL)
-{
-}
-
-void CreateSceneSample::initialize()
-{
-    // Create the font for drawing the framerate.
-    _font = Font::create("res/common/arial.gpb");
-
-    // Create a new empty scene.
-    _scene = Scene::create();
-
-    // Create the camera.
-    Camera* camera = Camera::createPerspective(45.0f, getAspectRatio(), 1.0f, 10.0f);
-    Node* cameraNode = _scene->addNode("camera");
-
-    // Attach the camera to a node. This determines the position of the camera.
-    cameraNode->setCamera(camera);
-
-    // Make this the active camera of the scene.
-    _scene->setActiveCamera(camera);
-    SAFE_RELEASE(camera);
-
-    // Move the camera to look at the origin.
-    cameraNode->translate(0, 1, 5);
-    cameraNode->rotateX(MATH_DEG_TO_RAD(-11.25f));
-
-    // Create a white light.
-    Light* light = Light::createDirectional(1.0f, 1.0f, 1.0f);
-    Node* lightNode = _scene->addNode("light");
-    lightNode->setLight(light);
-    // Release the light because the node now holds a reference to it.
-    SAFE_RELEASE(light);
-    lightNode->rotateX(MATH_DEG_TO_RAD(-45.0f));
-
-    // Create the cube mesh and model.
-    Mesh* cubeMesh = createCubeMesh();
-    Model* cubeModel = Model::create(cubeMesh);
-    // Release the mesh because the model now holds a reference to it.
-    SAFE_RELEASE(cubeMesh);
-
-    // Create the material for the cube model and assign it to the first mesh part.
-    Material* material = cubeModel->setMaterial("res/shaders/textured.vert", "res/shaders/textured.frag", "DIRECTIONAL_LIGHT_COUNT 1");
-
-    // These parameters are normally set in a .material file but this example sets them programmatically.
-    // Bind the uniform "u_worldViewProjectionMatrix" to use the WORLD_VIEW_PROJECTION_MATRIX from the scene's active camera and the node that the model belongs to.
-    material->setParameterAutoBinding("u_worldViewProjectionMatrix", "WORLD_VIEW_PROJECTION_MATRIX");
-    material->setParameterAutoBinding("u_inverseTransposeWorldViewMatrix", "INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX");
-    // Set the ambient color of the material.
-    material->getParameter("u_ambientColor")->setValue(Vector3(1, 1, 1));
-
-    // Bind the light's color and direction to the material.
-    material->getParameter("u_directionalLightColor[0]")->setValue(lightNode->getLight()->getColor());
-    material->getParameter("u_directionalLightDirection[0]")->bindValue(lightNode, &Node::getForwardVectorView);
-
-    // Load the texture from file.
-    Texture::Sampler* sampler = material->getParameter("u_diffuseTexture")->setValue("res/png/box-diffuse.png", true);
-    sampler->setFilterMode(Texture::LINEAR_MIPMAP_LINEAR, Texture::LINEAR);
-    material->getStateBlock()->setCullFace(true);
-    material->getStateBlock()->setDepthTest(true);
-    material->getStateBlock()->setDepthWrite(true);
-
-    _cubeNode = _scene->addNode("cube");
-    _cubeNode->setModel(cubeModel);
-    _cubeNode->rotateY(MATH_PIOVER4);
-    SAFE_RELEASE(cubeModel);
-}
-
-void CreateSceneSample::finalize()
-{
-    SAFE_RELEASE(_font);
-    SAFE_RELEASE(_scene);
-}
-
-void CreateSceneSample::update(float elapsedTime)
-{
-    // Rotate the directional light.
-    _cubeNode->rotateY(elapsedTime * 0.002 * MATH_PI);
-}
-
-void CreateSceneSample::render(float elapsedTime)
-{
-    // Clear the color and depth buffers
-    clear(CLEAR_COLOR_DEPTH, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0);
-
-    // Visit all the nodes in the scene, drawing the models.
-    _scene->visit(this, &CreateSceneSample::drawScene);
-
-    drawFrameRate(_font, Vector4(0, 0.5f, 1, 1), 5, 1, getFrameRate());
-}
-
-void CreateSceneSample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
-{
-    switch (evt)
-    {
-    case Touch::TOUCH_PRESS:
-        if (x < 75 && y < 50)
-        {
-            // Toggle Vsync if the user touches the top left corner
-            setVsync(!isVsync());
-        }
-        break;
-    case Touch::TOUCH_RELEASE:
-        break;
-    case Touch::TOUCH_MOVE:
-        break;
-    };
-}
-
-bool CreateSceneSample::drawScene(Node* node)
-{
-    Model* model = node->getModel();
-    if (model)
-        model->draw();
-    return true;
+#include "CreateSceneSample.h"
+#include "SamplesGame.h"
+
+#if defined(ADD_SAMPLE)
+    ADD_SAMPLE("Scene", "Create Scene", CreateSceneSample, 1);
+#endif
+
+static Mesh* createCubeMesh(float size = 1.0f)
+{
+    float a = size * 0.5f;
+    float vertices[] =
+    {
+        -a, -a,  a,    0.0,  0.0,  1.0,   0.0, 0.0,
+         a, -a,  a,    0.0,  0.0,  1.0,   1.0, 0.0,
+        -a,  a,  a,    0.0,  0.0,  1.0,   0.0, 1.0,
+         a,  a,  a,    0.0,  0.0,  1.0,   1.0, 1.0,
+        -a,  a,  a,    0.0,  1.0,  0.0,   0.0, 0.0,
+         a,  a,  a,    0.0,  1.0,  0.0,   1.0, 0.0,
+        -a,  a, -a,    0.0,  1.0,  0.0,   0.0, 1.0,
+         a,  a, -a,    0.0,  1.0,  0.0,   1.0, 1.0,
+        -a,  a, -a,    0.0,  0.0, -1.0,   0.0, 0.0,
+         a,  a, -a,    0.0,  0.0, -1.0,   1.0, 0.0,
+        -a, -a, -a,    0.0,  0.0, -1.0,   0.0, 1.0,
+         a, -a, -a,    0.0,  0.0, -1.0,   1.0, 1.0,
+        -a, -a, -a,    0.0, -1.0,  0.0,   0.0, 0.0,
+         a, -a, -a,    0.0, -1.0,  0.0,   1.0, 0.0,
+        -a, -a,  a,    0.0, -1.0,  0.0,   0.0, 1.0,
+         a, -a,  a,    0.0, -1.0,  0.0,   1.0, 1.0,
+         a, -a,  a,    1.0,  0.0,  0.0,   0.0, 0.0,
+         a, -a, -a,    1.0,  0.0,  0.0,   1.0, 0.0,
+         a,  a,  a,    1.0,  0.0,  0.0,   0.0, 1.0,
+         a,  a, -a,    1.0,  0.0,  0.0,   1.0, 1.0,
+        -a, -a, -a,   -1.0,  0.0,  0.0,   0.0, 0.0,
+        -a, -a,  a,   -1.0,  0.0,  0.0,   1.0, 0.0,
+        -a,  a, -a,   -1.0,  0.0,  0.0,   0.0, 1.0,
+        -a,  a,  a,   -1.0,  0.0,  0.0,   1.0, 1.0
+    };
+    short indices[] = 
+    {
+        0, 1, 2, 2, 1, 3, 4, 5, 6, 6, 5, 7, 8, 9, 10, 10, 9, 11, 12, 13, 14, 14, 13, 15, 16, 17, 18, 18, 17, 19, 20, 21, 22, 22, 21, 23
+    };
+    unsigned int vertexCount = 24;
+    unsigned int indexCount = 36;
+    VertexFormat::Element elements[] =
+    {
+        VertexFormat::Element(VertexFormat::POSITION, 3),
+        VertexFormat::Element(VertexFormat::NORMAL, 3),
+        VertexFormat::Element(VertexFormat::TEXCOORD0, 2)
+    };
+    Mesh* mesh = Mesh::createMesh(VertexFormat(elements, 3), vertexCount, false);
+    if (mesh == NULL)
+    {
+        GP_ERROR("Failed to create mesh.");
+        return NULL;
+    }
+    mesh->setVertexData(vertices, 0, vertexCount);
+    MeshPart* meshPart = mesh->addPart(Mesh::TRIANGLES, Mesh::INDEX16, indexCount, false);
+    meshPart->setIndexData(indices, 0, indexCount);
+    return mesh;
+}
+
+CreateSceneSample::CreateSceneSample()
+    : _font(NULL), _scene(NULL), _cubeNode(NULL)
+{
+}
+
+void CreateSceneSample::initialize()
+{
+    // Create the font for drawing the framerate.
+    _font = Font::create("res/common/arial.gpb");
+
+    // Create a new empty scene.
+    _scene = Scene::create();
+
+    // Create the camera.
+    Camera* camera = Camera::createPerspective(45.0f, getAspectRatio(), 1.0f, 10.0f);
+    Node* cameraNode = _scene->addNode("camera");
+
+    // Attach the camera to a node. This determines the position of the camera.
+    cameraNode->setCamera(camera);
+
+    // Make this the active camera of the scene.
+    _scene->setActiveCamera(camera);
+    SAFE_RELEASE(camera);
+
+    // Move the camera to look at the origin.
+    cameraNode->translate(0, 1, 5);
+    cameraNode->rotateX(MATH_DEG_TO_RAD(-11.25f));
+
+    // Create a white light.
+    Light* light = Light::createDirectional(1.0f, 1.0f, 1.0f);
+    Node* lightNode = _scene->addNode("light");
+    lightNode->setLight(light);
+    // Release the light because the node now holds a reference to it.
+    SAFE_RELEASE(light);
+    lightNode->rotateX(MATH_DEG_TO_RAD(-45.0f));
+
+    // Create the cube mesh and model.
+    Mesh* cubeMesh = createCubeMesh();
+    Model* cubeModel = Model::create(cubeMesh);
+    // Release the mesh because the model now holds a reference to it.
+    SAFE_RELEASE(cubeMesh);
+
+    // Create the material for the cube model and assign it to the first mesh part.
+    Material* material = cubeModel->setMaterial("res/shaders/textured.vert", "res/shaders/textured.frag", "DIRECTIONAL_LIGHT_COUNT 1");
+
+    // These parameters are normally set in a .material file but this example sets them programmatically.
+    // Bind the uniform "u_worldViewProjectionMatrix" to use the WORLD_VIEW_PROJECTION_MATRIX from the scene's active camera and the node that the model belongs to.
+    material->setParameterAutoBinding("u_worldViewProjectionMatrix", "WORLD_VIEW_PROJECTION_MATRIX");
+    material->setParameterAutoBinding("u_inverseTransposeWorldViewMatrix", "INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX");
+    // Set the ambient color of the material.
+    material->getParameter("u_ambientColor")->setValue(Vector3(1, 1, 1));
+
+    // Bind the light's color and direction to the material.
+    material->getParameter("u_directionalLightColor[0]")->setValue(lightNode->getLight()->getColor());
+    material->getParameter("u_directionalLightDirection[0]")->bindValue(lightNode, &Node::getForwardVectorView);
+
+    // Load the texture from file.
+    Texture::Sampler* sampler = material->getParameter("u_diffuseTexture")->setValue("res/png/crate.png", true);
+    sampler->setFilterMode(Texture::LINEAR_MIPMAP_LINEAR, Texture::LINEAR);
+    material->getStateBlock()->setCullFace(true);
+    material->getStateBlock()->setDepthTest(true);
+    material->getStateBlock()->setDepthWrite(true);
+
+    _cubeNode = _scene->addNode("cube");
+    _cubeNode->setModel(cubeModel);
+    _cubeNode->rotateY(MATH_PIOVER4);
+    SAFE_RELEASE(cubeModel);
+}
+
+void CreateSceneSample::finalize()
+{
+    SAFE_RELEASE(_font);
+    SAFE_RELEASE(_scene);
+}
+
+void CreateSceneSample::update(float elapsedTime)
+{
+    // Rotate the directional light.
+    _cubeNode->rotateY(elapsedTime * 0.002 * MATH_PI);
+}
+
+void CreateSceneSample::render(float elapsedTime)
+{
+    // Clear the color and depth buffers
+    clear(CLEAR_COLOR_DEPTH, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0);
+
+    // Visit all the nodes in the scene, drawing the models.
+    _scene->visit(this, &CreateSceneSample::drawScene);
+
+    drawFrameRate(_font, Vector4(0, 0.5f, 1, 1), 5, 1, getFrameRate());
+}
+
+void CreateSceneSample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
+{
+    switch (evt)
+    {
+    case Touch::TOUCH_PRESS:
+        if (x < 75 && y < 50)
+        {
+            // Toggle Vsync if the user touches the top left corner
+            setVsync(!isVsync());
+        }
+        break;
+    case Touch::TOUCH_RELEASE:
+        break;
+    case Touch::TOUCH_MOVE:
+        break;
+    };
+}
+
+bool CreateSceneSample::drawScene(Node* node)
+{
+    Model* model = node->getModel();
+    if (model)
+        model->draw();
+    return true;
 }

+ 117 - 117
samples/browser/src/SpriteBatchSample.cpp

@@ -1,117 +1,117 @@
-#include "SpriteBatchSample.h"
-#include "SamplesGame.h"
-
-#if defined(ADD_SAMPLE)
-    ADD_SAMPLE("Graphics", "Sprite Batch", SpriteBatchSample, 8);
-#endif
-
-
-SpriteBatchSample::SpriteBatchSample()
-    : _font(NULL), _spriteBatch(NULL)
-{
-}
-
-void SpriteBatchSample::initialize()
-{
-    // Create the font for drawing the framerate.
-    _font = Font::create("res/common/arial.gpb");
-
-    // Create an orthographic projection matrix.
-    float width = getWidth() / (float)getHeight();
-    float height = 1.0f;
-    Matrix::createOrthographic(width, height, -1.0f, 1.0f, &_worldViewProjectionMatrix);
-    _spriteBatch = SpriteBatch::create("res/png/box-diffuse.png");
-}
-
-void SpriteBatchSample::finalize()
-{
-    SAFE_DELETE(_spriteBatch);
-    SAFE_RELEASE(_font);
-}
-
-void SpriteBatchSample::update(float elapsedTime)
-{
-}
-
-void SpriteBatchSample::render(float elapsedTime)
-{
-    // Clear the color and depth buffers
-    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
-
-    Rectangle dst(0, 0, 64, 64);
-    Rectangle src(0, 0, 256, 256);
-
-    _spriteBatch->start();
-
-    // Just a sprite dst from src no color tint
-    _spriteBatch->draw(dst, src);
-
-    // Color tint
-    _spriteBatch->draw(Rectangle( 64, 0, 64, 64), src, Vector4::fromColor(0xF68B28FF));
-    _spriteBatch->draw(Rectangle(128, 0, 64, 64), src, Vector4::fromColor(0xDA2128FF));
-    _spriteBatch->draw(Rectangle(192, 0, 64, 64), src, Vector4::fromColor(0xE21B52FF));
-    _spriteBatch->draw(Rectangle(256, 0, 64, 64), src, Vector4::fromColor(0xE12991FF));
-    _spriteBatch->draw(Rectangle(320, 0, 64, 64), src, Vector4::fromColor(0x9A258FFF));
-    _spriteBatch->draw(Rectangle(384, 0, 64, 64), src, Vector4::fromColor(0x4D3F99FF));
-    _spriteBatch->draw(Rectangle(448, 0, 64, 64), src, Vector4::fromColor(0x0073BCFF));
-    _spriteBatch->draw(Rectangle(512, 0, 64, 64), src, Vector4::fromColor(0x00A8DFFF));
-    _spriteBatch->draw(Rectangle(576, 0, 64, 64), src, Vector4::fromColor(0x00AFADFF));
-    _spriteBatch->draw(Rectangle(640, 0, 64, 64), src, Vector4::fromColor(0x00A95CFF));
-    _spriteBatch->draw(Rectangle(704, 0, 64, 64), src, Vector4::fromColor(0x8CC747FF));
-    _spriteBatch->draw(Rectangle(768, 0, 64, 64), src, Vector4::fromColor(0xFFE710FF));
-
-    // Negative height draw over top of the first one
-    _spriteBatch->draw(Rectangle(0, 0 , 64 * 2.0f, 64 * -2.0f), src);
-
-    // Scale
-    _spriteBatch->draw(Vector3(0, 64, 0), src, Vector2(dst.width * 2.0f, dst.height * 2.0f));
-    // rotate 90
-    _spriteBatch->draw(Vector3(128, 64, 0), src, Vector2(128, 128), Vector4(1, 1, 1, 1), Vector2(0.5f, 0.5f), MATH_DEG_TO_RAD(90));
-    _spriteBatch->draw(Vector3(256, 64, 0), src, Vector2(128, 128), Vector4(1, 1, 1, 1), Vector2(0.5f, 0.5f), MATH_DEG_TO_RAD(180));
-    _spriteBatch->draw(Vector3(384, 64, 0), src, Vector2(128, 128), Vector4(1, 1, 1, 1), Vector2(0.5f, 0.5f), MATH_DEG_TO_RAD(270));
-    _spriteBatch->draw(Vector3(512, 64, 0), src, Vector2(128, 128), Vector4(1, 1, 1, 1), Vector2(0.5f, 0.5f), MATH_DEG_TO_RAD(360));
-    _spriteBatch->draw(Vector3(640, 64, 0), src, Vector2(128, 128), Vector4(1, 1, 1, 1), Vector2(0.5f, 0.5f), MATH_DEG_TO_RAD(0));
-    
-    // Lots of them now small
-    unsigned int pointCount = 16;
-    unsigned int x = 0;
-    unsigned int y = 192;
-    for (unsigned int i = 0; i < pointCount; i++)
-    {
-        for (unsigned int j = 0; j < pointCount; j++)
-        {
-            _spriteBatch->draw(Rectangle(x, y, 32, 32), src); 
-            x += 32;    
-        }
-        x = 0;
-        y += 32;
-    }
-    _spriteBatch->finish();
-
-    // Draw a second batch to ensure no problems
-    _spriteBatch->start();
-
-    // 50% transparent
-    _spriteBatch->draw(Rectangle(x + 512, y - 512, 512, 512), src, Vector4(1, 1, 1, 0.5f)); 
-    _spriteBatch->finish();
-
-    drawFrameRate(_font, Vector4(0, 0.5f, 1, 1), 5, 1, getFrameRate());
-}
-
-void SpriteBatchSample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
-{
-    switch (evt)
-    {
-    case Touch::TOUCH_PRESS:
-        if (x < 75 && y < 50)
-        {
-            // Toggle Vsync if the user touches the top left corner
-            setVsync(!isVsync());
-        }
-        break;
-    case Touch::TOUCH_RELEASE:
-        break;
-    case Touch::TOUCH_MOVE:
-        break;
-    };
-}
+#include "SpriteBatchSample.h"
+#include "SamplesGame.h"
+
+#if defined(ADD_SAMPLE)
+    ADD_SAMPLE("Graphics", "Sprite Batch", SpriteBatchSample, 8);
+#endif
+
+
+SpriteBatchSample::SpriteBatchSample()
+    : _font(NULL), _spriteBatch(NULL)
+{
+}
+
+void SpriteBatchSample::initialize()
+{
+    // Create the font for drawing the framerate.
+    _font = Font::create("res/common/arial.gpb");
+
+    // Create an orthographic projection matrix.
+    float width = getWidth() / (float)getHeight();
+    float height = 1.0f;
+    Matrix::createOrthographic(width, height, -1.0f, 1.0f, &_worldViewProjectionMatrix);
+    _spriteBatch = SpriteBatch::create("res/png/logo.png");
+}
+
+void SpriteBatchSample::finalize()
+{
+    SAFE_DELETE(_spriteBatch);
+    SAFE_RELEASE(_font);
+}
+
+void SpriteBatchSample::update(float elapsedTime)
+{
+}
+
+void SpriteBatchSample::render(float elapsedTime)
+{
+    // Clear the color and depth buffers
+    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
+
+    Rectangle dst(0, 0, 64, 64);
+    Rectangle src(0, 0, 256, 256);
+
+    _spriteBatch->start();
+
+    // Just a sprite dst from src no color tint
+    _spriteBatch->draw(dst, src);
+
+    // Color tint
+    _spriteBatch->draw(Rectangle( 64, 0, 64, 64), src, Vector4::fromColor(0xF68B28FF));
+    _spriteBatch->draw(Rectangle(128, 0, 64, 64), src, Vector4::fromColor(0xDA2128FF));
+    _spriteBatch->draw(Rectangle(192, 0, 64, 64), src, Vector4::fromColor(0xE21B52FF));
+    _spriteBatch->draw(Rectangle(256, 0, 64, 64), src, Vector4::fromColor(0xE12991FF));
+    _spriteBatch->draw(Rectangle(320, 0, 64, 64), src, Vector4::fromColor(0x9A258FFF));
+    _spriteBatch->draw(Rectangle(384, 0, 64, 64), src, Vector4::fromColor(0x4D3F99FF));
+    _spriteBatch->draw(Rectangle(448, 0, 64, 64), src, Vector4::fromColor(0x0073BCFF));
+    _spriteBatch->draw(Rectangle(512, 0, 64, 64), src, Vector4::fromColor(0x00A8DFFF));
+    _spriteBatch->draw(Rectangle(576, 0, 64, 64), src, Vector4::fromColor(0x00AFADFF));
+    _spriteBatch->draw(Rectangle(640, 0, 64, 64), src, Vector4::fromColor(0x00A95CFF));
+    _spriteBatch->draw(Rectangle(704, 0, 64, 64), src, Vector4::fromColor(0x8CC747FF));
+    _spriteBatch->draw(Rectangle(768, 0, 64, 64), src, Vector4::fromColor(0xFFE710FF));
+
+    // Negative height draw over top of the first one
+    _spriteBatch->draw(Rectangle(0, 0 , 64 * 2.0f, 64 * -2.0f), src);
+
+    // Scale
+    _spriteBatch->draw(Vector3(0, 64, 0), src, Vector2(dst.width * 2.0f, dst.height * 2.0f));
+    // rotate 90
+    _spriteBatch->draw(Vector3(128, 64, 0), src, Vector2(128, 128), Vector4(1, 1, 1, 1), Vector2(0.5f, 0.5f), MATH_DEG_TO_RAD(90));
+    _spriteBatch->draw(Vector3(256, 64, 0), src, Vector2(128, 128), Vector4(1, 1, 1, 1), Vector2(0.5f, 0.5f), MATH_DEG_TO_RAD(180));
+    _spriteBatch->draw(Vector3(384, 64, 0), src, Vector2(128, 128), Vector4(1, 1, 1, 1), Vector2(0.5f, 0.5f), MATH_DEG_TO_RAD(270));
+    _spriteBatch->draw(Vector3(512, 64, 0), src, Vector2(128, 128), Vector4(1, 1, 1, 1), Vector2(0.5f, 0.5f), MATH_DEG_TO_RAD(360));
+    _spriteBatch->draw(Vector3(640, 64, 0), src, Vector2(128, 128), Vector4(1, 1, 1, 1), Vector2(0.5f, 0.5f), MATH_DEG_TO_RAD(0));
+    
+    // Lots of them now small
+    unsigned int pointCount = 16;
+    unsigned int x = 0;
+    unsigned int y = 192;
+    for (unsigned int i = 0; i < pointCount; i++)
+    {
+        for (unsigned int j = 0; j < pointCount; j++)
+        {
+            _spriteBatch->draw(Rectangle(x, y, 32, 32), src); 
+            x += 32;    
+        }
+        x = 0;
+        y += 32;
+    }
+    _spriteBatch->finish();
+
+    // Draw a second batch to ensure no problems
+    _spriteBatch->start();
+
+    // 50% transparent
+    _spriteBatch->draw(Rectangle(x + 512, y - 512, 512, 512), src, Vector4(1, 1, 1, 0.5f)); 
+    _spriteBatch->finish();
+
+    drawFrameRate(_font, Vector4(0, 0.5f, 1, 1), 5, 1, getFrameRate());
+}
+
+void SpriteBatchSample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
+{
+    switch (evt)
+    {
+    case Touch::TOUCH_PRESS:
+        if (x < 75 && y < 50)
+        {
+            // Toggle Vsync if the user touches the top left corner
+            setVsync(!isVsync());
+        }
+        break;
+    case Touch::TOUCH_RELEASE:
+        break;
+    case Touch::TOUCH_MOVE:
+        break;
+    };
+}

+ 197 - 197
samples/browser/src/TextureSample.cpp

@@ -1,197 +1,197 @@
-#include "TextureSample.h"
-#include "SamplesGame.h"
-
-#if defined(ADD_SAMPLE)
-    ADD_SAMPLE("Graphics", "Textures", TextureSample, 6);
-#endif
-
-Node* addQuadModelAndNode(Scene* scene, Mesh* mesh)
-{
-    Model* model = Model::create(mesh);
-    Node* node = scene->addNode();
-    node->setModel(model);
-    SAFE_RELEASE(model);
-    return node;
-}
-
-Node* addQuadModelAndNode(Scene* scene, float x, float y, float width, float height, 
-                          float s1 = 0.0f, float t1 = 0.0f, float s2 = 1.0f, float t2 = 1.0f)
-{
-    Mesh* mesh = Mesh::createQuad(x, y, width, height, s1, t1, s2, t2);
-    Node* node = addQuadModelAndNode(scene, mesh);
-    SAFE_RELEASE(mesh);
-    return node;
-}
-
-Material* setTextureUnlitMaterial(Model* model, const char* texturePath, bool mipmap = true)
-{
-    Material* material = model->setMaterial("res/shaders/textured.vert", "res/shaders/textured.frag");
-    material->setParameterAutoBinding("u_worldViewProjectionMatrix", "WORLD_VIEW_PROJECTION_MATRIX");
-
-    // Load the texture from file.
-    Texture::Sampler* sampler = material->getParameter("u_diffuseTexture")->setValue(texturePath, mipmap);
-    if (mipmap)
-        sampler->setFilterMode(Texture::LINEAR_MIPMAP_LINEAR, Texture::LINEAR);
-    else
-        sampler->setFilterMode(Texture::LINEAR, Texture::LINEAR);
-    sampler->setWrapMode(Texture::CLAMP, Texture::CLAMP);
-    material->getStateBlock()->setCullFace(true);
-    material->getStateBlock()->setDepthTest(true);
-    material->getStateBlock()->setDepthWrite(true);
-    return material;
-}
-
-TextureSample::TextureSample()
-    : _font(NULL), _scene(NULL), _zOffset(0.0f)
-{   
-}
-
-void TextureSample::initialize()
-{
-    // Create the font for drawing the framerate.
-    _font = Font::create("res/common/arial.gpb");
-
-    // Create an empty scene.
-    _scene = Scene::create();
-
-    // Create a camera and add it to the scene as the active camera.
-    Camera* camera = Camera::createPerspective(45.0f, getAspectRatio(), 1, 1000);
-    Node* cameraNode = _scene->addNode("camera");
-    cameraNode->setCamera(camera);
-    _scene->setActiveCamera(camera);
-    cameraNode->translate(0, 0, 50);
-    SAFE_RELEASE(camera);
-
-    const float fontSize = _font->getSize();
-    const float cubeSize = 10.0f;
-    float x, y, textWidth;
-    // Find the width of the cube in screen space
-    _scene->getActiveCamera()->project(getViewport(), Vector3(cubeSize, 0, 0), &x, &y);
-    textWidth = x - (getWidth() >> 1);
-    // Textured quad mesh
-    {
-        Node* node = addQuadModelAndNode(_scene, 0, 0, cubeSize, cubeSize);
-        setTextureUnlitMaterial(node->getModel(), "res/png/color-wheel.png");
-        node->setTranslation(-25, cubeSize, 0);
-        // Find the position of the node in screen space
-        _scene->getActiveCamera()->project(getViewport(), node->getTranslationWorld(), &x, &y);
-        _text.push_back(_font->createText("Quad: Textured", Rectangle(x, y, textWidth, fontSize), Vector4::one(), fontSize, Font::ALIGN_TOP_HCENTER, false));
-    }
-    // Textured quad points
-    {
-        Mesh* mesh = Mesh::createQuad(Vector3(0, cubeSize, 0), Vector3(0, 0, 0), Vector3(cubeSize, cubeSize, 0), Vector3(cubeSize, 0, 0));
-        Node* node = addQuadModelAndNode(_scene, mesh);
-        SAFE_RELEASE(mesh);
-        setTextureUnlitMaterial(node->getModel(), "res/png/color-wheel.png");
-        node->setTranslation(-14, cubeSize, 0);
-        _scene->getActiveCamera()->project(getViewport(), node->getTranslationWorld(), &x, &y);
-        _text.push_back(_font->createText("Quad: Points", Rectangle(x, y, textWidth, fontSize), Vector4::one(), fontSize, Font::ALIGN_TOP_HCENTER, false));
-    }
-    // Texture clamp
-    {
-        Node* node = addQuadModelAndNode(_scene, 0, 0, cubeSize, cubeSize, -1, -1, 2, 2);
-        setTextureUnlitMaterial(node->getModel(), "res/png/color-wheel.png");
-        node->setId("clamp");
-        node->setTranslation(-3, cubeSize, 0);
-        _scene->getActiveCamera()->project(getViewport(), node->getTranslationWorld(), &x, &y);
-        _text.push_back(_font->createText("Wrap: Clamp", Rectangle(x, y, textWidth, fontSize), Vector4::one(), fontSize, Font::ALIGN_TOP_HCENTER, false));
-    }
-    // Texture wrapped+repeat
-    {
-        Node* node = addQuadModelAndNode(_scene, 0, 0, cubeSize, cubeSize, -1, -1, 2, 2);
-        setTextureUnlitMaterial(node->getModel(), "res/png/color-wheel.png");
-        node->setId("repeat");
-        Texture::Sampler* sampler = node->getModel()->getMaterial()->getParameter("u_diffuseTexture")->getSampler();
-        if (sampler)
-        {
-            sampler->setWrapMode(Texture::REPEAT, Texture::REPEAT);
-        }
-        node->setTranslation(8, cubeSize, 0);
-        _scene->getActiveCamera()->project(getViewport(), node->getTranslationWorld(), &x, &y);
-        _text.push_back(_font->createText("Wrap: Repeat", Rectangle(x, y, textWidth, fontSize), Vector4::one(), fontSize, Font::ALIGN_HCENTER, false));
-    }
-    // Mipmapping Off
-    {
-        Node* node = addQuadModelAndNode(_scene, 0, 0, cubeSize, cubeSize);
-        setTextureUnlitMaterial(node->getModel(), "res/png/box-diffuse.png", false);
-        node->setId("mipmap off");
-        node->setTranslation(-25.5f, -2.5f, 0);
-        _scene->getActiveCamera()->project(getViewport(), node->getTranslationWorld(), &x, &y);
-        _text.push_back(_font->createText("MipMap: Off", Rectangle(x, y, textWidth, fontSize), Vector4::one(), fontSize, Font::ALIGN_HCENTER, false));
-    }
-    // Mipmapping On
-    {
-        Node* node = addQuadModelAndNode(_scene, 0, 0, cubeSize, cubeSize);
-        setTextureUnlitMaterial(node->getModel(), "res/png/box-diffuse.png");
-        node->setId("mipmap on");
-        node->setTranslation(-5.5f, -2.5f, 0);
-        _scene->getActiveCamera()->project(getViewport(), node->getTranslationWorld(), &x, &y);
-        _text.push_back(_font->createText("MipMap: On", Rectangle(x, y, textWidth, fontSize), Vector4::one(), fontSize, Font::ALIGN_HCENTER, false));
-    }
-}
-
-void TextureSample::finalize()
-{
-    // Model and font are reference counted and should be released before closing this sample.
-    SAFE_RELEASE(_scene);
-    SAFE_RELEASE(_font);
-    for (std::list<Font::Text*>::iterator it = _text.begin(); it != _text.end(); ++it)
-    {
-        SAFE_DELETE(*it);
-    }
-    _text.clear();
-}
-
-void TextureSample::update(float elapsedTime)
-{
-    Node* n1 = _scene->findNode("mipmap on");
-    Node* n2 = _scene->findNode("mipmap off");
-    // move these nodes between 0 and -900 using a sine wave
-    float z = -(sin((getAbsoluteTime() / 1500.0L) * MATH_PI) + 1)  * 900.0f / 2.0f;
-    n1->setTranslationZ(z);
-    n2->setTranslationZ(z);
-}
-
-void TextureSample::render(float elapsedTime)
-{
-    // Clear the color and depth buffers
-    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
-
-    // Visit all the nodes in the scene, drawing the models/mesh.
-    _scene->visit(this, &TextureSample::drawScene);
-
-    drawFrameRate(_font, Vector4(0, 0.5f, 1, 1), 5, 1, getFrameRate());
-
-    _font->start();
-    for (std::list<Font::Text*>::const_iterator it = _text.begin(); it != _text.end(); ++it)
-    {
-        _font->drawText(*it);
-    }
-    _font->finish();
-}
-
-void TextureSample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
-{
-    switch (evt)
-    {
-    case Touch::TOUCH_PRESS:
-        if (x < 75 && y < 50)
-        {
-            // Toggle Vsync if the user touches the top left corner
-            setVsync(!isVsync());
-        }
-        break;
-    case Touch::TOUCH_RELEASE:
-        break;
-    case Touch::TOUCH_MOVE:
-        break;
-    };
-}
-
-bool TextureSample::drawScene(Node* node)
-{
-    Model* model = node->getModel();
-    if (model)
-        model->draw();
-    return true;
-}
+#include "TextureSample.h"
+#include "SamplesGame.h"
+
+#if defined(ADD_SAMPLE)
+    ADD_SAMPLE("Graphics", "Textures", TextureSample, 6);
+#endif
+
+Node* addQuadModelAndNode(Scene* scene, Mesh* mesh)
+{
+    Model* model = Model::create(mesh);
+    Node* node = scene->addNode();
+    node->setModel(model);
+    SAFE_RELEASE(model);
+    return node;
+}
+
+Node* addQuadModelAndNode(Scene* scene, float x, float y, float width, float height, 
+                          float s1 = 0.0f, float t1 = 0.0f, float s2 = 1.0f, float t2 = 1.0f)
+{
+    Mesh* mesh = Mesh::createQuad(x, y, width, height, s1, t1, s2, t2);
+    Node* node = addQuadModelAndNode(scene, mesh);
+    SAFE_RELEASE(mesh);
+    return node;
+}
+
+Material* setTextureUnlitMaterial(Model* model, const char* texturePath, bool mipmap = true)
+{
+    Material* material = model->setMaterial("res/shaders/textured.vert", "res/shaders/textured.frag");
+    material->setParameterAutoBinding("u_worldViewProjectionMatrix", "WORLD_VIEW_PROJECTION_MATRIX");
+
+    // Load the texture from file.
+    Texture::Sampler* sampler = material->getParameter("u_diffuseTexture")->setValue(texturePath, mipmap);
+    if (mipmap)
+        sampler->setFilterMode(Texture::LINEAR_MIPMAP_LINEAR, Texture::LINEAR);
+    else
+        sampler->setFilterMode(Texture::LINEAR, Texture::LINEAR);
+    sampler->setWrapMode(Texture::CLAMP, Texture::CLAMP);
+    material->getStateBlock()->setCullFace(true);
+    material->getStateBlock()->setDepthTest(true);
+    material->getStateBlock()->setDepthWrite(true);
+    return material;
+}
+
+TextureSample::TextureSample()
+    : _font(NULL), _scene(NULL), _zOffset(0.0f)
+{   
+}
+
+void TextureSample::initialize()
+{
+    // Create the font for drawing the framerate.
+    _font = Font::create("res/common/arial.gpb");
+
+    // Create an empty scene.
+    _scene = Scene::create();
+
+    // Create a camera and add it to the scene as the active camera.
+    Camera* camera = Camera::createPerspective(45.0f, getAspectRatio(), 1, 1000);
+    Node* cameraNode = _scene->addNode("camera");
+    cameraNode->setCamera(camera);
+    _scene->setActiveCamera(camera);
+    cameraNode->translate(0, 0, 50);
+    SAFE_RELEASE(camera);
+
+    const float fontSize = _font->getSize();
+    const float cubeSize = 10.0f;
+    float x, y, textWidth;
+    // Find the width of the cube in screen space
+    _scene->getActiveCamera()->project(getViewport(), Vector3(cubeSize, 0, 0), &x, &y);
+    textWidth = x - (getWidth() >> 1);
+    // Textured quad mesh
+    {
+        Node* node = addQuadModelAndNode(_scene, 0, 0, cubeSize, cubeSize);
+        setTextureUnlitMaterial(node->getModel(), "res/png/color-wheel.png");
+        node->setTranslation(-25, cubeSize, 0);
+        // Find the position of the node in screen space
+        _scene->getActiveCamera()->project(getViewport(), node->getTranslationWorld(), &x, &y);
+        _text.push_back(_font->createText("Quad: Textured", Rectangle(x, y, textWidth, fontSize), Vector4::one(), fontSize, Font::ALIGN_TOP_HCENTER, false));
+    }
+    // Textured quad points
+    {
+        Mesh* mesh = Mesh::createQuad(Vector3(0, cubeSize, 0), Vector3(0, 0, 0), Vector3(cubeSize, cubeSize, 0), Vector3(cubeSize, 0, 0));
+        Node* node = addQuadModelAndNode(_scene, mesh);
+        SAFE_RELEASE(mesh);
+        setTextureUnlitMaterial(node->getModel(), "res/png/color-wheel.png");
+        node->setTranslation(-14, cubeSize, 0);
+        _scene->getActiveCamera()->project(getViewport(), node->getTranslationWorld(), &x, &y);
+        _text.push_back(_font->createText("Quad: Points", Rectangle(x, y, textWidth, fontSize), Vector4::one(), fontSize, Font::ALIGN_TOP_HCENTER, false));
+    }
+    // Texture clamp
+    {
+        Node* node = addQuadModelAndNode(_scene, 0, 0, cubeSize, cubeSize, -1, -1, 2, 2);
+        setTextureUnlitMaterial(node->getModel(), "res/png/color-wheel.png");
+        node->setId("clamp");
+        node->setTranslation(-3, cubeSize, 0);
+        _scene->getActiveCamera()->project(getViewport(), node->getTranslationWorld(), &x, &y);
+        _text.push_back(_font->createText("Wrap: Clamp", Rectangle(x, y, textWidth, fontSize), Vector4::one(), fontSize, Font::ALIGN_TOP_HCENTER, false));
+    }
+    // Texture wrapped+repeat
+    {
+        Node* node = addQuadModelAndNode(_scene, 0, 0, cubeSize, cubeSize, -1, -1, 2, 2);
+        setTextureUnlitMaterial(node->getModel(), "res/png/color-wheel.png");
+        node->setId("repeat");
+        Texture::Sampler* sampler = node->getModel()->getMaterial()->getParameter("u_diffuseTexture")->getSampler();
+        if (sampler)
+        {
+            sampler->setWrapMode(Texture::REPEAT, Texture::REPEAT);
+        }
+        node->setTranslation(8, cubeSize, 0);
+        _scene->getActiveCamera()->project(getViewport(), node->getTranslationWorld(), &x, &y);
+        _text.push_back(_font->createText("Wrap: Repeat", Rectangle(x, y, textWidth, fontSize), Vector4::one(), fontSize, Font::ALIGN_HCENTER, false));
+    }
+    // Mipmapping Off
+    {
+        Node* node = addQuadModelAndNode(_scene, 0, 0, cubeSize, cubeSize);
+        setTextureUnlitMaterial(node->getModel(), "res/png/logo.png", false);
+        node->setId("mipmap off");
+        node->setTranslation(-25.5f, -2.5f, 0);
+        _scene->getActiveCamera()->project(getViewport(), node->getTranslationWorld(), &x, &y);
+        _text.push_back(_font->createText("MipMap: Off", Rectangle(x, y, textWidth, fontSize), Vector4::one(), fontSize, Font::ALIGN_HCENTER, false));
+    }
+    // Mipmapping On
+    {
+        Node* node = addQuadModelAndNode(_scene, 0, 0, cubeSize, cubeSize);
+        setTextureUnlitMaterial(node->getModel(), "res/png/logo.png");
+        node->setId("mipmap on");
+        node->setTranslation(-5.5f, -2.5f, 0);
+        _scene->getActiveCamera()->project(getViewport(), node->getTranslationWorld(), &x, &y);
+        _text.push_back(_font->createText("MipMap: On", Rectangle(x, y, textWidth, fontSize), Vector4::one(), fontSize, Font::ALIGN_HCENTER, false));
+    }
+}
+
+void TextureSample::finalize()
+{
+    // Model and font are reference counted and should be released before closing this sample.
+    SAFE_RELEASE(_scene);
+    SAFE_RELEASE(_font);
+    for (std::list<Font::Text*>::iterator it = _text.begin(); it != _text.end(); ++it)
+    {
+        SAFE_DELETE(*it);
+    }
+    _text.clear();
+}
+
+void TextureSample::update(float elapsedTime)
+{
+    Node* n1 = _scene->findNode("mipmap on");
+    Node* n2 = _scene->findNode("mipmap off");
+    // move these nodes between 0 and -900 using a sine wave
+    float z = -(sin((getAbsoluteTime() / 1500.0L) * MATH_PI) + 1)  * 900.0f / 2.0f;
+    n1->setTranslationZ(z);
+    n2->setTranslationZ(z);
+}
+
+void TextureSample::render(float elapsedTime)
+{
+    // Clear the color and depth buffers
+    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
+
+    // Visit all the nodes in the scene, drawing the models/mesh.
+    _scene->visit(this, &TextureSample::drawScene);
+
+    drawFrameRate(_font, Vector4(0, 0.5f, 1, 1), 5, 1, getFrameRate());
+
+    _font->start();
+    for (std::list<Font::Text*>::const_iterator it = _text.begin(); it != _text.end(); ++it)
+    {
+        _font->drawText(*it);
+    }
+    _font->finish();
+}
+
+void TextureSample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
+{
+    switch (evt)
+    {
+    case Touch::TOUCH_PRESS:
+        if (x < 75 && y < 50)
+        {
+            // Toggle Vsync if the user touches the top left corner
+            setVsync(!isVsync());
+        }
+        break;
+    case Touch::TOUCH_RELEASE:
+        break;
+    case Touch::TOUCH_MOVE:
+        break;
+    };
+}
+
+bool TextureSample::drawScene(Node* node)
+{
+    Model* model = node->getModel();
+    if (model)
+        model->draw();
+    return true;
+}

BIN
samples/character/res/common/scene.gpb


+ 0 - 513
samples/character/res/common/scene.material

@@ -1,513 +0,0 @@
-material texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            vertexShader = res/shaders/textured.vert
-            fragmentShader = res/shaders/textured.frag
-
-            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-            
-            sampler u_diffuseTexture
-            {
-                mipmap = true
-                wrapS = CLAMP
-                wrapT = CLAMP
-                minFilter = LINEAR_MIPMAP_LINEAR
-                magFilter = LINEAR
-            }
-
-            renderState
-            {
-                cullFace = true
-                depthTest = true
-            }
-        }
-    }
-}
-
-material texturedSpecular
-{
-    technique
-    {
-        pass
-        {
-            vertexShader = res/shaders/textured.vert
-            fragmentShader = res/shaders/textured.frag
-			defines = SPECULAR;DIRECTIONAL_LIGHT_COUNT 1
-
-            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-            u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
-            u_worldViewMatrix = WORLD_VIEW_MATRIX
-            u_cameraPosition = CAMERA_VIEW_POSITION
-            u_ambientColor = SCENE_AMBIENT_COLOR
-            u_specularExponent = 50
-
-            sampler u_diffuseTexture
-            {
-                mipmap = true
-                wrapS = CLAMP
-                wrapT = CLAMP
-                minFilter = LINEAR_MIPMAP_LINEAR
-                magFilter = LINEAR
-            }
-
-            renderState
-            {
-                cullFace = true
-                depthTest = true
-            }
-        }
-    }
-}
-
-material texturedTransparent
-{
-    technique
-    {
-        pass
-        {
-            vertexShader = res/shaders/textured.vert
-            fragmentShader = res/shaders/textured.frag
-            defines = DIRECTIONAL_LIGHT_COUNT 1
-
-            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-            u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
-            
-            sampler u_diffuseTexture
-            {
-                mipmap = true
-                wrapS = CLAMP
-                wrapT = CLAMP
-                minFilter = LINEAR_MIPMAP_LINEAR
-                magFilter = LINEAR
-            }
-
-            renderState
-            {
-                cullFace = true
-                depthTest = true
-	            blend = true
-                blendSrc = SRC_ALPHA
-                blendDst = ONE_MINUS_SRC_ALPHA
-            }
-        }
-    }
-}
-
-material colored
-{
-    technique
-    {
-        pass
-        {
-            vertexShader = res/shaders/colored.vert
-            fragmentShader = res/shaders/colored.frag
-            defines = DIRECTIONAL_LIGHT_COUNT 1
-
-            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-            u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
-            
-            renderState
-            {
-                cullFace = true
-                depthTest = true
-            }
-        }
-    }
-}
-
-material boy : texturedTransparent
-{
-    technique
-    {
-        pass
-        {
-            defines = SKINNING;SKINNING_JOINT_COUNT 31;MODULATE_ALPHA;DIRECTIONAL_LIGHT_COUNT 1
-            u_matrixPalette = MATRIX_PALETTE
-            u_modulateAlpha = 1.0
-
-            sampler u_diffuseTexture
-            {
-                path = @character
-            }
-        }
-    }
-}
-
-material boyshadow : texturedTransparent
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @shadow
-            }
-        }
-    }
-}
-
-material floortiles : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @floortiles
-            }
-        }
-    }
-}
-
-material floor : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @floor
-            }
-        }
-    }
-}
-
-material wallwest : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @wallwest
-            }
-        }
-    }
-}
-
-material walleast : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @walleast
-            }
-        }
-    }
-}
-
-material wallnorth : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @wallnorth
-            }
-        }
-    }
-}
-
-material wallsouth : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @wallsouth
-            }
-        }
-    }
-}
-
-material walloverhang : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @walloverhang
-            }
-        }
-    }
-}
-
-material toybox : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @toybox
-            }
-        }
-    }
-}
-
-material green : colored
-{
-    technique
-    {
-        pass
-        {
-            u_diffuseColor = 0.65, 0.7, 0, 1
-        }
-    }
-}
-
-material lightblue : colored
-{
-    technique
-    {
-        pass
-        {
-            u_diffuseColor = 0.38, 0.72, 0.85, 1
-        }
-    }
-}
-
-material basketball : texturedSpecular
-{
-    technique
-    {
-        pass
-        {
-            u_specularExponent = 12
-
-            sampler u_diffuseTexture
-            {
-                path = @basketball
-                wrapS = REPEAT
-                wrapT = REPEAT
-            }
-        }
-    }
-}
-
-material playtable : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @playtable
-            }
-        }
-    }
-}
-
-material easel : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @easel
-            }
-        }
-    }
-}
-
-material door : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @door
-            }
-        }
-    }
-}
-
-material basketballnet : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @basketballnet
-            }
-        }
-    }
-}
-
-material backboard : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @backboard
-            }
-        }
-    }
-}
-
-material doorframe : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @doorframe
-            }
-        }
-    }
-}
-
-material windowledge : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @windowledge
-            }
-        }
-    }
-}
-
-material bookshelf : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @bookshelf
-            }
-        }
-    }
-}
-
-material book : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @book
-            }
-        }
-    }
-}
-
-material tabletop : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @tabletop
-            }
-        }
-    }
-}
-
-material tableleg1 : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @tableleg1
-            }
-        }
-    }
-}
-
-material tableleg2 : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @tableleg2
-            }
-        }
-    }
-}
-
-material tableleg3 : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @tableleg3
-            }
-        }
-    }
-}
-
-material tableleg4 : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @tableleg4
-            }
-        }
-    }
-}
-
-material storageorganizer : texturedUnlit
-{
-    technique
-    {
-        pass
-        {
-            sampler u_diffuseTexture
-            {
-                path = @storageorganizer
-            }
-        }
-    }
-}

+ 0 - 74
samples/character/res/common/scene.physics

@@ -1,74 +0,0 @@
-collisionObject basketball
-{
-    type = RIGID_BODY
-    shape = SPHERE
-    mass = 1.0
-    friction = 0.5
-    restitution = 1.0
-    linearDamping = 0.1
-    angularDamping = 0.5
-}
-
-collisionObject chair
-{
-    type = RIGID_BODY
-    shape = BOX
-    mass = 5.0
-    friction = 1.0
-    restitution = 0.0
-    linearDamping = 0.9
-    angularDamping = 0.5
-}
-
-collisionObject table
-{
-    type = RIGID_BODY
-    shape = BOX
-    mass = 0.0
-    friction = 0.5
-    restitution = 0.75
-    linearDamping = 0.1
-    angularDamping = 0.5
-}
-
-collisionObject staticBox
-{
-    type = RIGID_BODY
-    shape = BOX
-    mass = 0.0
-    friction = 0.5
-    restitution = 0.75
-    linearDamping = 0.025
-    angularDamping = 0.16
-}
-
-collisionObject staticMesh
-{
-    type = RIGID_BODY
-    shape = MESH
-    mass = 0.0
-    friction = 0.5
-    restitution = 0.75
-    linearDamping = 0.025
-    angularDamping = 0.16
-}
-
-collisionObject boy
-{
-    type = CHARACTER
-    shape = CAPSULE  
-    radius = 1.2
-    height = 6.0
-    center = 0, 3.0, 0
-    centerAbsolute = true
-    mass = 20.0
-    maxStepHeight = 0
-    maxSlopeAngle = 0
-}
-
-collisionObject camera
-{
-    type = GHOST_OBJECT
-    shape = SPHERE
-    radius = 0.5
-}

+ 0 - 208
samples/character/res/common/scene.scene

@@ -1,208 +0,0 @@
-scene
-{
-    path = res/common/scene.gpb
-
-    node boycharacter
-    {
-        collisionObject = res/common/scene.physics#boy
-    }
-
-    node boymesh
-    {
-        material = res/common/scene.material#boy
-        tags
-        {
-            dynamic
-        }
-    }
-
-    node boyshadow
-    {
-        material = res/common/scene.material#boyshadow
-        tags
-        {
-            transparent
-            dynamic
-        }
-    }
-
-    node camera
-    {
-        collisionObject = res/common/scene.physics#camera
-    }
-
-    node tabletop
-    {
-        material = res/common/scene.material#tabletop
-        collisionObject = res/common/scene.physics#table
-    }
-
-    node tableleg1
-    {
-        material = res/common/scene.material#tableleg1
-        collisionObject = res/common/scene.physics#table
-    }
-
-    node tableleg2
-    {
-        material = res/common/scene.material#tableleg2
-        collisionObject = res/common/scene.physics#table
-    }
-
-    node tableleg3
-    {
-        material = res/common/scene.material#tableleg3
-        collisionObject = res/common/scene.physics#table
-    }
-
-    node tableleg4
-    {
-        material = res/common/scene.material#tableleg4
-        collisionObject = res/common/scene.physics#table
-    }
-
-    node greenchair1
-    {
-        material = res/common/scene.material#green
-        collisionObject = res/common/scene.physics#chair
-        tags
-        {
-            dynamic
-        }
-    }
-    node greenchair2 : greenchair1 {}
-    node greenchair3 : greenchair1 {}
-
-    node bluechair1
-    {
-        material = res/common/scene.material#lightblue
-        collisionObject = res/common/scene.physics#chair
-        tags
-        {
-            dynamic
-        }
-    }
-    node bluechair2 : bluechair1 {}
-    node bluechair3 : bluechair1 {}
-
-    node playtable
-    {
-        material = res/common/scene.material#playtable
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node easel
-    {
-        material = res/common/scene.material#easel
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node storageorganizer
-    {
-        material = res/common/scene.material#storageorganizer
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node floor
-    {
-        material = res/common/scene.material#floor
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node wallwest
-    {
-        material = res/common/scene.material#wallwest
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node walleast
-    {
-        material = res/common/scene.material#walleast
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node wallnorth
-    {
-        material = res/common/scene.material#wallnorth
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node wallsouth
-    {
-        material = res/common/scene.material#wallsouth
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node walloverhang
-    {
-        material = res/common/scene.material#walloverhang
-        collisionObject = res/common/scene.physics#staticMesh
-    }
-
-    node windowledge
-    {
-        material = res/common/scene.material#windowledge
-    }
-
-    node door
-    {
-        material = res/common/scene.material#door
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node doorframe
-    {
-        material = res/common/scene.material#doorframe
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node bookshelf
-    {
-        material = res/common/scene.material#bookshelf
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node book
-    {
-        material = res/common/scene.material#book
-    }
-
-    node toybox
-    {
-        material = res/common/scene.material#toybox
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node floortiles
-    {
-        material = res/common/scene.material#floortiles
-    }
-
-    node basketball
-    {
-        material = res/common/scene.material#basketball
-        collisionObject = res/common/scene.physics#basketball
-        tags
-        {
-            dynamic
-        }
-    }
-
-    node basketballnet
-    {
-        material = res/common/scene.material#basketballnet
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    node backboard
-    {
-        material = res/common/scene.material#backboard
-        collisionObject = res/common/scene.physics#staticBox
-    }
-
-    physics
-    {
-        // Note: Gravity is set to 3x normal gravity to compenate for larger scale of scene.
-        gravity = 0.0, -29.4, 0.0
-    }
-}

BIN
samples/character/res/design/boy.mb


BIN
samples/character/res/design/character.png


+ 1 - 1
samples/character/res/design/scene-encode.bat

@@ -4,6 +4,6 @@ REM This script converts scene.fbx to a gameplay binary format (.gpb) and groups
 REM targeting nodes/joints under 'HIKCharacterNode_Boy_Reference' the specified id into a single 
 REM animation called 'animations'.
 
-"..\..\..\..\bin\windows\gameplay-encoder.exe" -g HIKCharacterNode_Boy_Reference animations scene.fbx ../common/scene.gpb
+"..\..\..\..\bin\windows\gameplay-encoder.exe" -g HIKCharacterNode_Boy_Reference animations room.fbx ../common/room.gpb
 
 pause

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 2838
samples/character/res/design/scene.dae


BIN
samples/character/res/design/scene.mb


+ 36 - 3
samples/character/sample-character.vcxproj

@@ -155,6 +155,10 @@
     <CustomBuildStep>
       <Outputs>game.config.dummy</Outputs>
     </CustomBuildStep>
+    <PostBuildEvent>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
+    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
@@ -210,6 +214,10 @@
     <CustomBuildStep>
       <Outputs>game.config.dummy</Outputs>
     </CustomBuildStep>
+    <PostBuildEvent>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
+    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
     <ClCompile>
@@ -266,6 +274,10 @@
     <CustomBuildStep>
       <Outputs>game.config.dummy</Outputs>
     </CustomBuildStep>
+    <PostBuildEvent>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
+    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
@@ -307,12 +319,30 @@
       <SubType>Designer</SubType>
     </None>
     <None Include="icon.png" />
+    <None Include="res\common\arial.gpb" />
     <None Include="res\common\boy.animation" />
     <None Include="res\common\gamepad.form" />
     <None Include="res\common\gamepad.theme" />
-    <None Include="res\common\scene.material" />
-    <None Include="res\common\scene.physics" />
-    <None Include="res\common\scene.scene" />
+    <None Include="res\common\sample.gpb" />
+    <None Include="res\common\sample.material" />
+    <None Include="res\common\sample.physics" />
+    <None Include="res\common\sample.scene" />
+    <None Include="res\shaders\colored.frag" />
+    <None Include="res\shaders\colored.vert" />
+    <None Include="res\shaders\font.frag" />
+    <None Include="res\shaders\font.vert" />
+    <None Include="res\shaders\form.frag" />
+    <None Include="res\shaders\form.vert" />
+    <None Include="res\shaders\lighting.frag" />
+    <None Include="res\shaders\lighting.vert" />
+    <None Include="res\shaders\skinning-none.vert" />
+    <None Include="res\shaders\skinning.vert" />
+    <None Include="res\shaders\sprite.frag" />
+    <None Include="res\shaders\sprite.vert" />
+    <None Include="res\shaders\terrain.frag" />
+    <None Include="res\shaders\terrain.vert" />
+    <None Include="res\shaders\textured.frag" />
+    <None Include="res\shaders\textured.vert" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="src\CharacterGame.cpp" />
@@ -320,6 +350,9 @@
   <ItemGroup>
     <ClInclude Include="src\CharacterGame.h" />
   </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\logo_powered_white.png" />
+  </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>

+ 109 - 44
samples/character/sample-character.vcxproj.filters

@@ -1,45 +1,110 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="src">
-      <UniqueIdentifier>{D13574C5-9904-426f-9463-B52758AD8786}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res">
-      <UniqueIdentifier>{5A542532-0A08-4fb1-8F5A-94FB3D7CF3F7}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="icon.png" />
-    <None Include="bar-descriptor.xml" />
-    <None Include="game.config" />
-    <None Include="res\common\scene.physics">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\common\scene.scene">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\common\boy.animation">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\common\scene.material">
-      <Filter>res</Filter>
-    </None>
-    <None Include="game.dxt.config" />
-    <None Include="res\common\gamepad.form">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\common\gamepad.theme">
-      <Filter>res</Filter>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\CharacterGame.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\CharacterGame.h">
-      <Filter>src</Filter>
-    </ClInclude>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="src">
+      <UniqueIdentifier>{D13574C5-9904-426f-9463-B52758AD8786}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res">
+      <UniqueIdentifier>{5A542532-0A08-4fb1-8F5A-94FB3D7CF3F7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\common">
+      <UniqueIdentifier>{3d8c9a8a-dd0d-492f-bcc8-7f1c24a7e897}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\shaders">
+      <UniqueIdentifier>{1a9f2ecc-195a-45c7-bdd2-1b39eb2e1132}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="icon.png" />
+    <None Include="bar-descriptor.xml" />
+    <None Include="game.config" />
+    <None Include="game.dxt.config" />
+    <None Include="res\common\arial.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\boy.animation">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\gamepad.form">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\gamepad.theme">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\sample.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\sample.material">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\sample.physics">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\sample.scene">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\shaders\colored.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\colored.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning-none.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\CharacterGame.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\CharacterGame.h">
+      <Filter>src</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\logo_powered_white.png">
+      <Filter>res</Filter>
+    </Image>
+  </ItemGroup>
 </Project>

+ 670 - 670
samples/character/src/CharacterGame.cpp

@@ -1,670 +1,670 @@
-#include "CharacterGame.h"
-
-// Declare our game instance
-CharacterGame game;
-
-// Input flags
-#define NORTH 1
-#define SOUTH 2
-#define EAST 4
-#define WEST 8
-#define RUNNING 16
-
-// Character defines
-#define WALK_SPEED  5.0f
-#define STRAFE_SPEED 1.5f
-#define RUN_SPEED 15.0f
-#define CAMERA_FOCUS_DISTANCE 16.0f
-
-#define BUTTON_1 0
-#define BUTTON_2 1
-
-CharacterGame::CharacterGame()
-    : _font(NULL), _scene(NULL), _character(NULL), _characterNode(NULL), _characterMeshNode(NULL), _characterShadowNode(NULL), _basketballNode(NULL),
-      _animation(NULL), _currentClip(NULL), _jumpClip(NULL), _kickClip(NULL), _rotateX(0), _materialParameterAlpha(NULL),
-      _keyFlags(0), _drawDebug(0), _wireframe(false), _hasBall(false), _applyKick(false), _gamepad(NULL)
-{
-    _buttonPressed = new bool[2];
-}
-
-void CharacterGame::initialize()
-{
-    // Enable multi-touch (only affects devices that support multi-touch).
-    setMultiTouch(true);
-
-    // Display the gameplay splash screen for at least 1 second.
-    displayScreen(this, &CharacterGame::drawSplash, NULL, 1000L);
-
-    // Load the font.
-    _font = Font::create("res/common/arial.gpb");
-
-    // Load scene.
-    _scene = Scene::load("res/common/scene.scene");
-
-    // Update the aspect ratio for our scene's camera to match the current device resolution.
-    _scene->getActiveCamera()->setAspectRatio(getAspectRatio());
-    
-    // Initialize the physics character.
-    initializeCharacter();
-
-    // Create a collision object for the ceiling.
-    Node* ceiling = _scene->addNode("ceiling");
-    ceiling->setTranslationY(14.5f);
-    PhysicsRigidBody::Parameters rbParams;
-    rbParams.mass = 0.0f;
-    rbParams.friction = 0.5f;
-    rbParams.restitution = 0.75f;
-    rbParams.linearDamping = 0.025f;
-    rbParams.angularDamping = 0.16f;
-    ceiling->setCollisionObject(PhysicsCollisionObject::RIGID_BODY, PhysicsCollisionShape::box(Vector3(49.5f, 1.0f, 49.5f)), &rbParams);
-
-    // Initialize scene.
-    _scene->visit(this, &CharacterGame::initializeScene);
-
-    _gamepad = getGamepad(0);
-}
-
-bool CharacterGame::initializeScene(Node* node)
-{
-    Model* model = node->getModel();
-    if (model && model->getMaterial())
-    {
-        initializeMaterial(_scene, node, model->getMaterial());
-    }
-
-    return true;
-}
-
-void CharacterGame::initializeMaterial(Scene* scene, Node* node, Material* material)
-{
-    // Bind light shader parameters to dynamic objects only
-    if (node->hasTag("dynamic"))
-    {
-        material->getParameter("u_ambientColor")->bindValue(scene, &Scene::getAmbientColor);
-        Node* lightNode = scene->findNode("sun");
-        if (lightNode)
-        {
-            material->getParameter("u_directionalLightColor[0]")->bindValue(lightNode->getLight(), &Light::getColor);
-            material->getParameter("u_directionalLightDirection[0]")->bindValue(lightNode, &Node::getForwardVectorView);
-        }
-    }
-}
-
-void CharacterGame::initializeCharacter()
-{
-    Node* node = _scene->findNode("boycharacter");
-    
-    // Store the physics character object.
-    _character = static_cast<PhysicsCharacter*>(node->getCollisionObject());
-    
-    // Store character nodes.
-    _characterNode = node->findNode("boyScale");
-    _characterMeshNode = _scene->findNode("boymesh");
-    _characterShadowNode = _scene->findNode("boyshadow");
-
-    // Get the basketball node.
-    _basketballNode = _scene->findNode("basketball");
-    _basketballNode->getCollisionObject()->addCollisionListener(this);
-
-    _floorLevel = _basketballNode->getTranslationY();
-
-    // Store the alpha material parameter from the character's model.
-    _materialParameterAlpha = _characterMeshNode->getModel()->getMaterial()->getTechniqueByIndex(0)->getPassByIndex(0)->getParameter("u_modulateAlpha");
-
-    // Load character animations.
-    _animation = node->getAnimation("animations");
-    _animation->createClips("res/common/boy.animation");
-    _jumpClip = _animation->getClip("jump");
-    _jumpClip->addListener(this, _jumpClip->getDuration() - 250);
-    _kickClip = _animation->getClip("kick");
-    // when to cross fade
-    _kickClip->addListener(this, _kickClip->getDuration() - 250); 
-    // when to turn on _isKicking.
-    _kickClip->addListener(this, 416);  
-
-    // Start playing the idle animation when we load.
-    play("idle", true);
-}
-
-void CharacterGame::finalize()
-{
-    SAFE_RELEASE(_scene);
-    SAFE_RELEASE(_font);
-    SAFE_DELETE_ARRAY(_buttonPressed);
-}
-
-void CharacterGame::drawSplash(void* param)
-{
-    clear(CLEAR_COLOR_DEPTH, Vector4(0, 0, 0, 1), 1.0f, 0);
-    SpriteBatch* batch = SpriteBatch::create("res/logo_powered_white.png");
-    batch->start();
-    batch->draw(getWidth() * 0.5f, getHeight() * 0.5f, 0.0f, 512.0f, 512.0f, 0.0f, 1.0f, 1.0f, 0.0f, Vector4::one(), true);
-    batch->finish();
-    SAFE_DELETE(batch);
-}
-
-bool CharacterGame::drawScene(Node* node, bool transparent)
-{
-    if (node->getModel() && (transparent == node->hasTag("transparent")))
-        node->getModel()->draw(_wireframe);
-
-    return true;
-}
-
-void CharacterGame::play(const char* id, bool repeat, float speed)
-{
-    AnimationClip* clip = _animation->getClip(id);
-
-    // Set clip properties
-    clip->setSpeed(speed);
-    clip->setRepeatCount(repeat ? AnimationClip::REPEAT_INDEFINITE : 1);
-
-    // Is the clip already playing?
-    if (clip == _currentClip && clip->isPlaying())
-        return;
-
-    if (_jumpClip->isPlaying() || _kickClip->isPlaying())
-    {
-        _currentClip = clip;
-        return;
-    }
-
-    // If a current clip is playing, crossfade into the new one
-    if (_currentClip && _currentClip->isPlaying())
-    {
-        _currentClip->crossFade(clip, 150);
-    }
-    else
-    {
-        clip->play();
-    }
-    _currentClip = clip;
-}
-
-void CharacterGame::jump()
-{
-    if (isOnFloor() && !_kickClip->isPlaying())
-    {
-        play("jump", false, 0.55f);
-        _character->jump(3.0f);
-    }
-}
-
-void CharacterGame::kick()
-{
-    if (!_jumpClip->isPlaying())
-        play("kick", false, 1.75f);
-    _kicking = true;
-}
-
-bool CharacterGame::isOnFloor() const
-{
-    return (std::fabs(_character->getCurrentVelocity().y) < MATH_EPSILON);
-}
-
-void CharacterGame::update(float elapsedTime)
-{
-    if (_applyKick)
-    {
-        // apply impulse from kick.
-        Vector3 impulse(-_characterNode->getForwardVectorWorld());
-        impulse.normalize();
-        // add some lift to kick
-        impulse.y = 1.0f; 
-        //scale the impulse.
-        impulse.scale(16.6f);
-        ((PhysicsRigidBody*)_basketballNode->getCollisionObject())->applyImpulse(impulse);
-        _hasBall = false;
-        _applyKick = false;
-    }
-    if (!_kickClip->isPlaying())
-        _kicking = false;
-
-    if (_gamepad->isButtonDown(Gamepad::BUTTON_A))
-    {
-        if (_buttonPressed[BUTTON_1])
-        {
-            _buttonPressed[BUTTON_1] = false;
-            // Jump while the gamepad button is being pressed
-            jump();
-        }
-    }
-    else
-    {
-        _buttonPressed[BUTTON_1] = true;
-    }
-
-    if (_gamepad->isButtonDown(Gamepad::BUTTON_B))
-    {
-        if (_buttonPressed[BUTTON_2])
-        {
-            _buttonPressed[BUTTON_2] = false;
-            kick();
-        }
-    }
-    else
-    {
-        _buttonPressed[BUTTON_2] = true;
-    }
-
-    _currentDirection.set(Vector2::zero());
-
-    if (!_kicking)
-    {
-        if (_gamepad->getJoystickCount() > 0)
-        {
-            _gamepad->getJoystickValues(0, &_currentDirection);
-        }
-    }
-    if (_gamepad->getJoystickCount() > 1)
-    {
-        Vector2 out;
-        _gamepad->getJoystickValues(1, &out);
-       _character->getNode()->rotateY(-MATH_DEG_TO_RAD(out.x * 2.0f));
-    }
-    
-    if (_currentDirection.isZero())
-    {
-        // Construct direction vector from keyboard input
-        if (_keyFlags & NORTH)
-            _currentDirection.y = 1;
-        else if (_keyFlags & SOUTH)
-            _currentDirection.y = -1;
-        else
-            _currentDirection.y = 0;
-
-        if (_keyFlags & EAST)
-            _currentDirection.x = 1;
-        else if (_keyFlags & WEST)
-            _currentDirection.x = -1;
-        else 
-            _currentDirection.x = 0;
-
-        _currentDirection.normalize();
-        if ((_keyFlags & RUNNING) == 0)
-            _currentDirection *= 0.5f;
-    }
-
-    // Update character animation and velocity
-    if (_currentDirection.isZero())
-    {
-        play("idle", true);
-        _character->setVelocity(Vector3::zero());
-    }
-    else
-    {
-        bool running = (_currentDirection.lengthSquared() > 0.75f);
-        float speed = running ? RUN_SPEED : WALK_SPEED;
-
-        play(running ? "running" : "walking", true, 1.0f);
-
-        // Orient the character relative to the camera so he faces the direction we want to move.
-        const Matrix& cameraMatrix = _scene->getActiveCamera()->getNode()->getWorldMatrix();
-        Vector3 cameraRight, cameraForward;
-        cameraMatrix.getRightVector(&cameraRight);
-        cameraMatrix.getForwardVector(&cameraForward);
-
-        // Get the current forward vector for the mesh node (negate it since the character was modelled facing +z)
-        Vector3 currentHeading(-_characterNode->getForwardVectorWorld());
-
-        // Construct a new forward vector for the mesh node
-        Vector3 newHeading(cameraForward * _currentDirection.y + cameraRight * _currentDirection.x);
-
-        // Compute the rotation amount based on the difference between the current and new vectors
-        float angle = atan2f(newHeading.x, newHeading.z) - atan2f(currentHeading.x, currentHeading.z);
-        if (angle > MATH_PI)
-            angle -= MATH_PIX2;
-        else if (angle < -MATH_PI)
-            angle += MATH_PIX2;
-        angle *= (float)elapsedTime * 0.001f * MATH_PIX2;
-        _characterNode->rotate(Vector3::unitY(), angle);
-
-        // Update the character's velocity
-        Vector3 velocity = -_characterNode->getForwardVectorWorld();
-        velocity.normalize();
-        velocity *= speed;
-        _character->setVelocity(velocity);
-    }
-
-    // Adjust camera to avoid it from being obstructed by walls and objects in the scene.
-    adjustCamera(elapsedTime);
-
-    // Project the character's shadow node onto the surface directly below him.
-    PhysicsController::HitResult hitResult;
-    Vector3 v = _character->getNode()->getTranslationWorld();
-    if (getPhysicsController()->rayTest(Ray(Vector3(v.x, v.y + 1.0f, v.z), Vector3(0, -1, 0)), 100.0f, &hitResult, NULL))
-    {
-        _characterShadowNode->setTranslation(Vector3(hitResult.point.x, hitResult.point.y + 0.1f, hitResult.point.z));
-    }
-
-    if (_hasBall)
-    {
-        // This is the first time entering this block of code if the basketball is still enabled.
-        // Disable physics on basketball, and create a bigger collision object around the boy to include the ball.
-        // This will ensure the boy cannot walk through walls/objects with the basketball.
-        PhysicsRigidBody* basketball = (PhysicsRigidBody*)_basketballNode->getCollisionObject();
-        if (basketball->isEnabled())
-        {
-            grabBall();
-        }
-
-        // Capture the basketball's old position, and then calculate the basketball's new position in front of the character
-        _oldBallPosition = _basketballNode->getTranslationWorld();
-        Vector3 characterForwardVector(_characterNode->getForwardVectorWorld());
-        Vector3 translation(_characterNode->getTranslationWorld() + characterForwardVector.normalize() * -2.2f);
-        translation.y = _floorLevel;
-
-        // Calculates rotation to be applied to the basketball.
-        Vector3 rotationVector(0.0f, -_basketballNode->getBoundingSphere().radius, 0.0f);
-        Vector3::cross(rotationVector, _oldBallPosition - translation, &rotationVector);
-        if (!rotationVector.isZero())
-        {
-            Matrix m;
-            _basketballNode->getWorldMatrix().transpose(&m);
-
-            Vector3 rotNorm;
-            m.transformVector(rotationVector, &rotNorm);
-            rotNorm.normalize();
-            _basketballNode->rotate(rotNorm, rotationVector.length());
-        }
-        _basketballNode->setTranslation(translation.x, _floorLevel, translation.z);
-    }
-}
-
-void CharacterGame::render(float elapsedTime)
-{
-    // Clear the color and depth buffers.
-    clear(CLEAR_COLOR_DEPTH, Vector4(0.41f, 0.48f, 0.54f, 1.0f), 1.0f, 0);
-
-    // Draw our scene, with separate passes for opaque and transparent objects.
-    _scene->visit(this, &CharacterGame::drawScene, false);
-    _scene->visit(this, &CharacterGame::drawScene, true);
-
-    // Draw debug info (physics bodies, bounds, etc).
-    switch (_drawDebug)
-    {
-    case 1:
-        getPhysicsController()->drawDebug(_scene->getActiveCamera()->getViewProjectionMatrix());
-        break;
-    case 2:
-        _scene->drawDebug(Scene::DEBUG_BOXES);
-        break;
-    case 3:
-        _scene->drawDebug(Scene::DEBUG_SPHERES);
-        break;
-    }
-
-    _gamepad->draw();
-
-    // Draw FPS
-    _font->start();
-    char fps[32];
-    sprintf(fps, "%d", getFrameRate());
-    _font->drawText(fps, 5, 5, Vector4(1,1,0,1), 20);
-    _font->finish();
-}
-
-void CharacterGame::keyEvent(Keyboard::KeyEvent evt, int key)
-{
-    if (evt == Keyboard::KEY_PRESS)
-    {
-        switch (key)
-        {
-        case Keyboard::KEY_ESCAPE:
-            exit();
-            break;
-        case Keyboard::KEY_W:
-        case Keyboard::KEY_CAPITAL_W:
-            _keyFlags |= NORTH;
-            _keyFlags &= ~SOUTH;
-            break;
-        case Keyboard::KEY_S:
-        case Keyboard::KEY_CAPITAL_S:
-            _keyFlags |= SOUTH;
-            _keyFlags &= ~NORTH;
-            break;
-        case Keyboard::KEY_A:
-        case Keyboard::KEY_CAPITAL_A:
-            _keyFlags |= WEST;
-            _keyFlags &= ~EAST;
-            break;
-        case Keyboard::KEY_D:
-        case Keyboard::KEY_CAPITAL_D:
-            _keyFlags |= EAST;
-            _keyFlags &= ~WEST;
-            break;
-        case Keyboard::KEY_B:
-            _drawDebug++;
-            if (_drawDebug > 3)
-                _drawDebug = 0;
-            break;
-        case Keyboard::KEY_SPACE:
-            jump();
-            break;
-        case Keyboard::KEY_SHIFT:
-            _keyFlags |= RUNNING;
-            break;
-        case Keyboard::KEY_M:
-        case Keyboard::KEY_CAPITAL_M:
-            _wireframe = !_wireframe;
-            break;
-        case Keyboard::KEY_C:
-        case Keyboard::KEY_CAPITAL_C:
-            clone();
-            break;
-        }
-    }
-    else if (evt == Keyboard::KEY_RELEASE)
-    {
-        switch (key)
-        {
-        case Keyboard::KEY_W:
-        case Keyboard::KEY_CAPITAL_W:
-            _keyFlags &= ~NORTH;
-            break;
-        case Keyboard::KEY_S:
-        case Keyboard::KEY_CAPITAL_S:
-            _keyFlags &= ~SOUTH;
-            break;
-        case Keyboard::KEY_A:
-        case Keyboard::KEY_CAPITAL_A:
-            _keyFlags &= ~WEST;
-            break;
-        case Keyboard::KEY_D:
-        case Keyboard::KEY_CAPITAL_D:
-            _keyFlags &= ~EAST;
-            break;
-        case Keyboard::KEY_SHIFT:
-            _keyFlags &= ~RUNNING;
-            break;
-        }
-    }
-}
-
-void CharacterGame::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
-{
-    // This should only be called if the gamepad did not handle the touch event.
-    switch (evt)
-    {
-    case Touch::TOUCH_PRESS:
-        {
-            _rotateX = x;
-        }
-        break;
-    case Touch::TOUCH_RELEASE:
-        {
-            _rotateX = 0;
-        }
-        break;
-    case Touch::TOUCH_MOVE:
-        {
-            int deltaX = x - _rotateX;
-            _rotateX = x;
-            _character->getNode()->rotateY(-MATH_DEG_TO_RAD(deltaX * 0.5f));
-        }
-        break;
-    default:
-        break;
-    }
-}
-
-bool CharacterGame::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
-{
-    if (evt == Mouse::MOUSE_PRESS_RIGHT_BUTTON)
-    {
-        kick();
-        return true;
-    }
-    return false;
-}
-
-void CharacterGame::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad)
-{
-    switch(evt)
-    {
-    case Gamepad::CONNECTED_EVENT:
-    case Gamepad::DISCONNECTED_EVENT:
-        _gamepad = getGamepad(0);
-        break;
-    }
-}
-
-void CharacterGame::adjustCamera(float elapsedTime)
-{
-    static float cameraOffset = 0.0f;
-
-    PhysicsController* physics = getPhysicsController();
-    Node* cameraNode = _scene->getActiveCamera()->getNode();
-
-    // Reset camera
-    if (cameraOffset != 0.0f)
-    {
-        cameraNode->translateForward(-cameraOffset);
-        cameraOffset = 0.0f;
-    }
-
-    Vector3 cameraPosition = cameraNode->getTranslationWorld();
-    Vector3 cameraDirection = cameraNode->getForwardVectorWorld();
-    cameraDirection.normalize();
-
-    // Get focal point of camera (use the resolved world location of the head joint as a focal point)
-    Vector3 focalPoint(cameraPosition + (cameraDirection * CAMERA_FOCUS_DISTANCE));
-
-    Vector3 oldPosition = cameraNode->getTranslationWorld();
-
-    PhysicsController::HitResult result;
-    PhysicsCollisionObject* occlusion = NULL;
-    do
-    {
-        // Perform a ray test to check for camera collisions
-        if (!physics->sweepTest(cameraNode->getCollisionObject(), focalPoint, &result) || result.object == _character)
-            break;
-
-        occlusion = result.object;
-
-        // Step the camera closer to the focal point to resolve the occlusion
-        float d = cameraNode->getTranslationWorld().distance(result.point);
-        cameraNode->translateForward(d);
-        cameraOffset += d;
-        while (physics->sweepTest(cameraNode->getCollisionObject(), focalPoint, &result) && result.object == occlusion)
-        {
-            // Prevent the camera from getting too close to the character.
-            // Without this check, it's possible for the camera to fly past the character
-            // and essentially end up in an infinite loop here.
-            if (cameraNode->getTranslationWorld().distanceSquared(focalPoint) <= 2.0f)
-                return;
-
-            cameraNode->translateForward(0.1f);
-            cameraOffset += 0.1f;
-        }
-    } while (true);
-
-    // If the character is closer than 10 world units to the camera, apply transparency to the character so he does not obstruct the view.
-    if (occlusion)
-    {
-        float d = _scene->getActiveCamera()->getNode()->getTranslationWorld().distance(_characterNode->getTranslationWorld());
-        float alpha = d < 10 ? (d * 0.1f) : 1.0f;
-        _characterMeshNode->setTag("transparent", alpha < 1.0f ? "true" : NULL);
-        _materialParameterAlpha->setValue(alpha);
-    }
-    else
-    {
-        _characterMeshNode->setTag("transparent", NULL);
-        _materialParameterAlpha->setValue(1.0f);
-    }
-}
-
-void CharacterGame::animationEvent(AnimationClip* clip, AnimationClip::Listener::EventType type)
-{
-    if (clip == _kickClip && !_applyKick)
-    {
-        if (_hasBall)
-        {
-            _applyKick = true;
-            releaseBall();
-        }
-    }
-    else
-    {
-        clip->crossFade(_currentClip, 150);
-    }
-}
-
-void CharacterGame::clone()
-{
-    Node* clone = _scene->findNode("boycharacter")->clone();
-    Animation* cloneAnimation = clone->getAnimation();
-
-    // Find the current clip and have the clone play that clip repeatedly.
-    const char* clipId = _currentClip->getId();
-    if (_jumpClip->isPlaying())
-        clipId = _jumpClip->getId();
-    AnimationClip* clip = cloneAnimation->getClip(clipId);
-    clip->setRepeatCount(AnimationClip::REPEAT_INDEFINITE);
-    clip->play();
-
-    _scene->addNode(clone);
-    clone->release();
-}
-
-void CharacterGame::collisionEvent(PhysicsCollisionObject::CollisionListener::EventType type,
-                                    const PhysicsCollisionObject::CollisionPair& collisionPair,
-                                    const Vector3& contactPointA,
-                                    const Vector3& contactPointB)
-{
-    // objectA -> basketball, only care about collisions between the physics character and the basketball.
-    if (type == PhysicsCollisionObject::CollisionListener::COLLIDING && collisionPair.objectB == _character)
-        _hasBall = true;
-}
-
-void CharacterGame::grabBall()
-{
-    // Disables physics on the basketball, and increases the size of the character's collison object to include the basketball.
-    _basketballNode->getCollisionObject()->setEnabled(false);
-    PhysicsRigidBody::Parameters rbParams;
-    rbParams.mass = 20.0f;
-    Vector3 currentVelocity = _character->getCurrentVelocity();
-    Node* boy = _character->getNode();
-    boy->setCollisionObject(PhysicsCollisionObject::CHARACTER, PhysicsCollisionShape::capsule(2.9f, 6.0f, Vector3(0.0f, 3.0f, 0.0f), true), &rbParams);
-    _character = static_cast<PhysicsCharacter*>(boy->getCollisionObject());
-    _character->setMaxSlopeAngle(0.0f);
-    _character->setMaxStepHeight(0.0f);
-    _character->setVelocity(currentVelocity);
-}
-
-void CharacterGame::releaseBall()
-{
-    // Decreases the size of the character's collision object and re-enables physics simulation on the basketball.
-    PhysicsRigidBody::Parameters rbParams;
-    rbParams.mass = 20.0f;
-    Vector3 velocity = _character->getCurrentVelocity();
-    Node* boy = _character->getNode();
-    boy->setCollisionObject(PhysicsCollisionObject::CHARACTER, PhysicsCollisionShape::capsule(1.2f, 6.0f, Vector3(0.0f, 3.0f, 0.0f), true), &rbParams);
-    _character = static_cast<PhysicsCharacter*>(boy->getCollisionObject());
-    _character->setVelocity(velocity);
-    _character->setMaxSlopeAngle(0.0f);
-    _character->setMaxStepHeight(0.0f);
-    
-    PhysicsRigidBody* basketball = (PhysicsRigidBody*) _basketballNode->getCollisionObject();
-    basketball->setEnabled(true);
-}
+#include "CharacterGame.h"
+
+// Declare our game instance
+CharacterGame game;
+
+// Input flags
+#define NORTH 1
+#define SOUTH 2
+#define EAST 4
+#define WEST 8
+#define RUNNING 16
+
+// Character defines
+#define WALK_SPEED  5.0f
+#define STRAFE_SPEED 1.5f
+#define RUN_SPEED 15.0f
+#define CAMERA_FOCUS_DISTANCE 16.0f
+
+#define BUTTON_1 0
+#define BUTTON_2 1
+
+CharacterGame::CharacterGame()
+    : _font(NULL), _scene(NULL), _character(NULL), _characterNode(NULL), _characterMeshNode(NULL), _characterShadowNode(NULL), _basketballNode(NULL),
+      _animation(NULL), _currentClip(NULL), _jumpClip(NULL), _kickClip(NULL), _rotateX(0), _materialParameterAlpha(NULL),
+      _keyFlags(0), _drawDebug(0), _wireframe(false), _hasBall(false), _applyKick(false), _gamepad(NULL)
+{
+    _buttonPressed = new bool[2];
+}
+
+void CharacterGame::initialize()
+{
+    // Enable multi-touch (only affects devices that support multi-touch).
+    setMultiTouch(true);
+
+    // Display the gameplay splash screen for at least 1 second.
+    displayScreen(this, &CharacterGame::drawSplash, NULL, 1000L);
+
+    // Load the font.
+    _font = Font::create("res/common/arial.gpb");
+
+    // Load scene.
+    _scene = Scene::load("res/common/sample.scene");
+
+    // Update the aspect ratio for our scene's camera to match the current device resolution.
+    _scene->getActiveCamera()->setAspectRatio(getAspectRatio());
+    
+    // Initialize the physics character.
+    initializeCharacter();
+
+    // Create a collision object for the ceiling.
+    Node* ceiling = _scene->addNode("ceiling");
+    ceiling->setTranslationY(14.5f);
+    PhysicsRigidBody::Parameters rbParams;
+    rbParams.mass = 0.0f;
+    rbParams.friction = 0.5f;
+    rbParams.restitution = 0.75f;
+    rbParams.linearDamping = 0.025f;
+    rbParams.angularDamping = 0.16f;
+    ceiling->setCollisionObject(PhysicsCollisionObject::RIGID_BODY, PhysicsCollisionShape::box(Vector3(49.5f, 1.0f, 49.5f)), &rbParams);
+
+    // Initialize scene.
+    _scene->visit(this, &CharacterGame::initializeScene);
+
+    _gamepad = getGamepad(0);
+}
+
+bool CharacterGame::initializeScene(Node* node)
+{
+    Model* model = node->getModel();
+    if (model && model->getMaterial())
+    {
+        initializeMaterial(_scene, node, model->getMaterial());
+    }
+
+    return true;
+}
+
+void CharacterGame::initializeMaterial(Scene* scene, Node* node, Material* material)
+{
+    // Bind light shader parameters to dynamic objects only
+    if (node->hasTag("dynamic"))
+    {
+        material->getParameter("u_ambientColor")->bindValue(scene, &Scene::getAmbientColor);
+        Node* lightNode = scene->findNode("sun");
+        if (lightNode)
+        {
+            material->getParameter("u_directionalLightColor[0]")->bindValue(lightNode->getLight(), &Light::getColor);
+            material->getParameter("u_directionalLightDirection[0]")->bindValue(lightNode, &Node::getForwardVectorView);
+        }
+    }
+}
+
+void CharacterGame::initializeCharacter()
+{
+    Node* node = _scene->findNode("boycharacter");
+    
+    // Store the physics character object.
+    _character = static_cast<PhysicsCharacter*>(node->getCollisionObject());
+    
+    // Store character nodes.
+    _characterNode = node->findNode("boyScale");
+    _characterMeshNode = _scene->findNode("boymesh");
+    _characterShadowNode = _scene->findNode("boyshadow");
+
+    // Get the basketball node.
+    _basketballNode = _scene->findNode("basketball");
+    _basketballNode->getCollisionObject()->addCollisionListener(this);
+
+    _floorLevel = _basketballNode->getTranslationY();
+
+    // Store the alpha material parameter from the character's model.
+    _materialParameterAlpha = _characterMeshNode->getModel()->getMaterial()->getTechniqueByIndex(0)->getPassByIndex(0)->getParameter("u_modulateAlpha");
+
+    // Load character animations.
+    _animation = node->getAnimation("animations");
+    _animation->createClips("res/common/boy.animation");
+    _jumpClip = _animation->getClip("jump");
+    _jumpClip->addListener(this, _jumpClip->getDuration() - 250);
+    _kickClip = _animation->getClip("kick");
+    // when to cross fade
+    _kickClip->addListener(this, _kickClip->getDuration() - 250); 
+    // when to turn on _isKicking.
+    _kickClip->addListener(this, 416);  
+
+    // Start playing the idle animation when we load.
+    play("idle", true);
+}
+
+void CharacterGame::finalize()
+{
+    SAFE_RELEASE(_scene);
+    SAFE_RELEASE(_font);
+    SAFE_DELETE_ARRAY(_buttonPressed);
+}
+
+void CharacterGame::drawSplash(void* param)
+{
+    clear(CLEAR_COLOR_DEPTH, Vector4(0, 0, 0, 1), 1.0f, 0);
+    SpriteBatch* batch = SpriteBatch::create("res/logo_powered_white.png");
+    batch->start();
+    batch->draw(getWidth() * 0.5f, getHeight() * 0.5f, 0.0f, 512.0f, 512.0f, 0.0f, 1.0f, 1.0f, 0.0f, Vector4::one(), true);
+    batch->finish();
+    SAFE_DELETE(batch);
+}
+
+bool CharacterGame::drawScene(Node* node, bool transparent)
+{
+    if (node->getModel() && (transparent == node->hasTag("transparent")))
+        node->getModel()->draw(_wireframe);
+
+    return true;
+}
+
+void CharacterGame::play(const char* id, bool repeat, float speed)
+{
+    AnimationClip* clip = _animation->getClip(id);
+
+    // Set clip properties
+    clip->setSpeed(speed);
+    clip->setRepeatCount(repeat ? AnimationClip::REPEAT_INDEFINITE : 1);
+
+    // Is the clip already playing?
+    if (clip == _currentClip && clip->isPlaying())
+        return;
+
+    if (_jumpClip->isPlaying() || _kickClip->isPlaying())
+    {
+        _currentClip = clip;
+        return;
+    }
+
+    // If a current clip is playing, crossfade into the new one
+    if (_currentClip && _currentClip->isPlaying())
+    {
+        _currentClip->crossFade(clip, 150);
+    }
+    else
+    {
+        clip->play();
+    }
+    _currentClip = clip;
+}
+
+void CharacterGame::jump()
+{
+    if (isOnFloor() && !_kickClip->isPlaying())
+    {
+        play("jump", false, 0.55f);
+        _character->jump(3.0f);
+    }
+}
+
+void CharacterGame::kick()
+{
+    if (!_jumpClip->isPlaying())
+        play("kick", false, 1.75f);
+    _kicking = true;
+}
+
+bool CharacterGame::isOnFloor() const
+{
+    return (std::fabs(_character->getCurrentVelocity().y) < MATH_EPSILON);
+}
+
+void CharacterGame::update(float elapsedTime)
+{
+    if (_applyKick)
+    {
+        // apply impulse from kick.
+        Vector3 impulse(-_characterNode->getForwardVectorWorld());
+        impulse.normalize();
+        // add some lift to kick
+        impulse.y = 1.0f; 
+        //scale the impulse.
+        impulse.scale(16.6f);
+        ((PhysicsRigidBody*)_basketballNode->getCollisionObject())->applyImpulse(impulse);
+        _hasBall = false;
+        _applyKick = false;
+    }
+    if (!_kickClip->isPlaying())
+        _kicking = false;
+
+    if (_gamepad->isButtonDown(Gamepad::BUTTON_A))
+    {
+        if (_buttonPressed[BUTTON_1])
+        {
+            _buttonPressed[BUTTON_1] = false;
+            // Jump while the gamepad button is being pressed
+            jump();
+        }
+    }
+    else
+    {
+        _buttonPressed[BUTTON_1] = true;
+    }
+
+    if (_gamepad->isButtonDown(Gamepad::BUTTON_B))
+    {
+        if (_buttonPressed[BUTTON_2])
+        {
+            _buttonPressed[BUTTON_2] = false;
+            kick();
+        }
+    }
+    else
+    {
+        _buttonPressed[BUTTON_2] = true;
+    }
+
+    _currentDirection.set(Vector2::zero());
+
+    if (!_kicking)
+    {
+        if (_gamepad->getJoystickCount() > 0)
+        {
+            _gamepad->getJoystickValues(0, &_currentDirection);
+        }
+    }
+    if (_gamepad->getJoystickCount() > 1)
+    {
+        Vector2 out;
+        _gamepad->getJoystickValues(1, &out);
+       _character->getNode()->rotateY(-MATH_DEG_TO_RAD(out.x * 2.0f));
+    }
+    
+    if (_currentDirection.isZero())
+    {
+        // Construct direction vector from keyboard input
+        if (_keyFlags & NORTH)
+            _currentDirection.y = 1;
+        else if (_keyFlags & SOUTH)
+            _currentDirection.y = -1;
+        else
+            _currentDirection.y = 0;
+
+        if (_keyFlags & EAST)
+            _currentDirection.x = 1;
+        else if (_keyFlags & WEST)
+            _currentDirection.x = -1;
+        else 
+            _currentDirection.x = 0;
+
+        _currentDirection.normalize();
+        if ((_keyFlags & RUNNING) == 0)
+            _currentDirection *= 0.5f;
+    }
+
+    // Update character animation and velocity
+    if (_currentDirection.isZero())
+    {
+        play("idle", true);
+        _character->setVelocity(Vector3::zero());
+    }
+    else
+    {
+        bool running = (_currentDirection.lengthSquared() > 0.75f);
+        float speed = running ? RUN_SPEED : WALK_SPEED;
+
+        play(running ? "running" : "walking", true, 1.0f);
+
+        // Orient the character relative to the camera so he faces the direction we want to move.
+        const Matrix& cameraMatrix = _scene->getActiveCamera()->getNode()->getWorldMatrix();
+        Vector3 cameraRight, cameraForward;
+        cameraMatrix.getRightVector(&cameraRight);
+        cameraMatrix.getForwardVector(&cameraForward);
+
+        // Get the current forward vector for the mesh node (negate it since the character was modelled facing +z)
+        Vector3 currentHeading(-_characterNode->getForwardVectorWorld());
+
+        // Construct a new forward vector for the mesh node
+        Vector3 newHeading(cameraForward * _currentDirection.y + cameraRight * _currentDirection.x);
+
+        // Compute the rotation amount based on the difference between the current and new vectors
+        float angle = atan2f(newHeading.x, newHeading.z) - atan2f(currentHeading.x, currentHeading.z);
+        if (angle > MATH_PI)
+            angle -= MATH_PIX2;
+        else if (angle < -MATH_PI)
+            angle += MATH_PIX2;
+        angle *= (float)elapsedTime * 0.001f * MATH_PIX2;
+        _characterNode->rotate(Vector3::unitY(), angle);
+
+        // Update the character's velocity
+        Vector3 velocity = -_characterNode->getForwardVectorWorld();
+        velocity.normalize();
+        velocity *= speed;
+        _character->setVelocity(velocity);
+    }
+
+    // Adjust camera to avoid it from being obstructed by walls and objects in the scene.
+    adjustCamera(elapsedTime);
+
+    // Project the character's shadow node onto the surface directly below him.
+    PhysicsController::HitResult hitResult;
+    Vector3 v = _character->getNode()->getTranslationWorld();
+    if (getPhysicsController()->rayTest(Ray(Vector3(v.x, v.y + 1.0f, v.z), Vector3(0, -1, 0)), 100.0f, &hitResult, NULL))
+    {
+        _characterShadowNode->setTranslation(Vector3(hitResult.point.x, hitResult.point.y + 0.1f, hitResult.point.z));
+    }
+
+    if (_hasBall)
+    {
+        // This is the first time entering this block of code if the basketball is still enabled.
+        // Disable physics on basketball, and create a bigger collision object around the boy to include the ball.
+        // This will ensure the boy cannot walk through walls/objects with the basketball.
+        PhysicsRigidBody* basketball = (PhysicsRigidBody*)_basketballNode->getCollisionObject();
+        if (basketball->isEnabled())
+        {
+            grabBall();
+        }
+
+        // Capture the basketball's old position, and then calculate the basketball's new position in front of the character
+        _oldBallPosition = _basketballNode->getTranslationWorld();
+        Vector3 characterForwardVector(_characterNode->getForwardVectorWorld());
+        Vector3 translation(_characterNode->getTranslationWorld() + characterForwardVector.normalize() * -2.2f);
+        translation.y = _floorLevel;
+
+        // Calculates rotation to be applied to the basketball.
+        Vector3 rotationVector(0.0f, -_basketballNode->getBoundingSphere().radius, 0.0f);
+        Vector3::cross(rotationVector, _oldBallPosition - translation, &rotationVector);
+        if (!rotationVector.isZero())
+        {
+            Matrix m;
+            _basketballNode->getWorldMatrix().transpose(&m);
+
+            Vector3 rotNorm;
+            m.transformVector(rotationVector, &rotNorm);
+            rotNorm.normalize();
+            _basketballNode->rotate(rotNorm, rotationVector.length());
+        }
+        _basketballNode->setTranslation(translation.x, _floorLevel, translation.z);
+    }
+}
+
+void CharacterGame::render(float elapsedTime)
+{
+    // Clear the color and depth buffers.
+    clear(CLEAR_COLOR_DEPTH, Vector4(0.41f, 0.48f, 0.54f, 1.0f), 1.0f, 0);
+
+    // Draw our scene, with separate passes for opaque and transparent objects.
+    _scene->visit(this, &CharacterGame::drawScene, false);
+    _scene->visit(this, &CharacterGame::drawScene, true);
+
+    // Draw debug info (physics bodies, bounds, etc).
+    switch (_drawDebug)
+    {
+    case 1:
+        getPhysicsController()->drawDebug(_scene->getActiveCamera()->getViewProjectionMatrix());
+        break;
+    case 2:
+        _scene->drawDebug(Scene::DEBUG_BOXES);
+        break;
+    case 3:
+        _scene->drawDebug(Scene::DEBUG_SPHERES);
+        break;
+    }
+
+    _gamepad->draw();
+
+    // Draw FPS
+    _font->start();
+    char fps[32];
+    sprintf(fps, "%d", getFrameRate());
+    _font->drawText(fps, 5, 5, Vector4(1,1,0,1), 20);
+    _font->finish();
+}
+
+void CharacterGame::keyEvent(Keyboard::KeyEvent evt, int key)
+{
+    if (evt == Keyboard::KEY_PRESS)
+    {
+        switch (key)
+        {
+        case Keyboard::KEY_ESCAPE:
+            exit();
+            break;
+        case Keyboard::KEY_W:
+        case Keyboard::KEY_CAPITAL_W:
+            _keyFlags |= NORTH;
+            _keyFlags &= ~SOUTH;
+            break;
+        case Keyboard::KEY_S:
+        case Keyboard::KEY_CAPITAL_S:
+            _keyFlags |= SOUTH;
+            _keyFlags &= ~NORTH;
+            break;
+        case Keyboard::KEY_A:
+        case Keyboard::KEY_CAPITAL_A:
+            _keyFlags |= WEST;
+            _keyFlags &= ~EAST;
+            break;
+        case Keyboard::KEY_D:
+        case Keyboard::KEY_CAPITAL_D:
+            _keyFlags |= EAST;
+            _keyFlags &= ~WEST;
+            break;
+        case Keyboard::KEY_B:
+            _drawDebug++;
+            if (_drawDebug > 3)
+                _drawDebug = 0;
+            break;
+        case Keyboard::KEY_SPACE:
+            jump();
+            break;
+        case Keyboard::KEY_SHIFT:
+            _keyFlags |= RUNNING;
+            break;
+        case Keyboard::KEY_M:
+        case Keyboard::KEY_CAPITAL_M:
+            _wireframe = !_wireframe;
+            break;
+        case Keyboard::KEY_C:
+        case Keyboard::KEY_CAPITAL_C:
+            clone();
+            break;
+        }
+    }
+    else if (evt == Keyboard::KEY_RELEASE)
+    {
+        switch (key)
+        {
+        case Keyboard::KEY_W:
+        case Keyboard::KEY_CAPITAL_W:
+            _keyFlags &= ~NORTH;
+            break;
+        case Keyboard::KEY_S:
+        case Keyboard::KEY_CAPITAL_S:
+            _keyFlags &= ~SOUTH;
+            break;
+        case Keyboard::KEY_A:
+        case Keyboard::KEY_CAPITAL_A:
+            _keyFlags &= ~WEST;
+            break;
+        case Keyboard::KEY_D:
+        case Keyboard::KEY_CAPITAL_D:
+            _keyFlags &= ~EAST;
+            break;
+        case Keyboard::KEY_SHIFT:
+            _keyFlags &= ~RUNNING;
+            break;
+        }
+    }
+}
+
+void CharacterGame::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
+{
+    // This should only be called if the gamepad did not handle the touch event.
+    switch (evt)
+    {
+    case Touch::TOUCH_PRESS:
+        {
+            _rotateX = x;
+        }
+        break;
+    case Touch::TOUCH_RELEASE:
+        {
+            _rotateX = 0;
+        }
+        break;
+    case Touch::TOUCH_MOVE:
+        {
+            int deltaX = x - _rotateX;
+            _rotateX = x;
+            _character->getNode()->rotateY(-MATH_DEG_TO_RAD(deltaX * 0.5f));
+        }
+        break;
+    default:
+        break;
+    }
+}
+
+bool CharacterGame::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
+{
+    if (evt == Mouse::MOUSE_PRESS_RIGHT_BUTTON)
+    {
+        kick();
+        return true;
+    }
+    return false;
+}
+
+void CharacterGame::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad)
+{
+    switch(evt)
+    {
+    case Gamepad::CONNECTED_EVENT:
+    case Gamepad::DISCONNECTED_EVENT:
+        _gamepad = getGamepad(0);
+        break;
+    }
+}
+
+void CharacterGame::adjustCamera(float elapsedTime)
+{
+    static float cameraOffset = 0.0f;
+
+    PhysicsController* physics = getPhysicsController();
+    Node* cameraNode = _scene->getActiveCamera()->getNode();
+
+    // Reset camera
+    if (cameraOffset != 0.0f)
+    {
+        cameraNode->translateForward(-cameraOffset);
+        cameraOffset = 0.0f;
+    }
+
+    Vector3 cameraPosition = cameraNode->getTranslationWorld();
+    Vector3 cameraDirection = cameraNode->getForwardVectorWorld();
+    cameraDirection.normalize();
+
+    // Get focal point of camera (use the resolved world location of the head joint as a focal point)
+    Vector3 focalPoint(cameraPosition + (cameraDirection * CAMERA_FOCUS_DISTANCE));
+
+    Vector3 oldPosition = cameraNode->getTranslationWorld();
+
+    PhysicsController::HitResult result;
+    PhysicsCollisionObject* occlusion = NULL;
+    do
+    {
+        // Perform a ray test to check for camera collisions
+        if (!physics->sweepTest(cameraNode->getCollisionObject(), focalPoint, &result) || result.object == _character)
+            break;
+
+        occlusion = result.object;
+
+        // Step the camera closer to the focal point to resolve the occlusion
+        float d = cameraNode->getTranslationWorld().distance(result.point);
+        cameraNode->translateForward(d);
+        cameraOffset += d;
+        while (physics->sweepTest(cameraNode->getCollisionObject(), focalPoint, &result) && result.object == occlusion)
+        {
+            // Prevent the camera from getting too close to the character.
+            // Without this check, it's possible for the camera to fly past the character
+            // and essentially end up in an infinite loop here.
+            if (cameraNode->getTranslationWorld().distanceSquared(focalPoint) <= 2.0f)
+                return;
+
+            cameraNode->translateForward(0.1f);
+            cameraOffset += 0.1f;
+        }
+    } while (true);
+
+    // If the character is closer than 10 world units to the camera, apply transparency to the character so he does not obstruct the view.
+    if (occlusion)
+    {
+        float d = _scene->getActiveCamera()->getNode()->getTranslationWorld().distance(_characterNode->getTranslationWorld());
+        float alpha = d < 10 ? (d * 0.1f) : 1.0f;
+        _characterMeshNode->setTag("transparent", alpha < 1.0f ? "true" : NULL);
+        _materialParameterAlpha->setValue(alpha);
+    }
+    else
+    {
+        _characterMeshNode->setTag("transparent", NULL);
+        _materialParameterAlpha->setValue(1.0f);
+    }
+}
+
+void CharacterGame::animationEvent(AnimationClip* clip, AnimationClip::Listener::EventType type)
+{
+    if (clip == _kickClip && !_applyKick)
+    {
+        if (_hasBall)
+        {
+            _applyKick = true;
+            releaseBall();
+        }
+    }
+    else
+    {
+        clip->crossFade(_currentClip, 150);
+    }
+}
+
+void CharacterGame::clone()
+{
+    Node* clone = _scene->findNode("boycharacter")->clone();
+    Animation* cloneAnimation = clone->getAnimation();
+
+    // Find the current clip and have the clone play that clip repeatedly.
+    const char* clipId = _currentClip->getId();
+    if (_jumpClip->isPlaying())
+        clipId = _jumpClip->getId();
+    AnimationClip* clip = cloneAnimation->getClip(clipId);
+    clip->setRepeatCount(AnimationClip::REPEAT_INDEFINITE);
+    clip->play();
+
+    _scene->addNode(clone);
+    clone->release();
+}
+
+void CharacterGame::collisionEvent(PhysicsCollisionObject::CollisionListener::EventType type,
+                                    const PhysicsCollisionObject::CollisionPair& collisionPair,
+                                    const Vector3& contactPointA,
+                                    const Vector3& contactPointB)
+{
+    // objectA -> basketball, only care about collisions between the physics character and the basketball.
+    if (type == PhysicsCollisionObject::CollisionListener::COLLIDING && collisionPair.objectB == _character)
+        _hasBall = true;
+}
+
+void CharacterGame::grabBall()
+{
+    // Disables physics on the basketball, and increases the size of the character's collison object to include the basketball.
+    _basketballNode->getCollisionObject()->setEnabled(false);
+    PhysicsRigidBody::Parameters rbParams;
+    rbParams.mass = 20.0f;
+    Vector3 currentVelocity = _character->getCurrentVelocity();
+    Node* boy = _character->getNode();
+    boy->setCollisionObject(PhysicsCollisionObject::CHARACTER, PhysicsCollisionShape::capsule(2.9f, 6.0f, Vector3(0.0f, 3.0f, 0.0f), true), &rbParams);
+    _character = static_cast<PhysicsCharacter*>(boy->getCollisionObject());
+    _character->setMaxSlopeAngle(0.0f);
+    _character->setMaxStepHeight(0.0f);
+    _character->setVelocity(currentVelocity);
+}
+
+void CharacterGame::releaseBall()
+{
+    // Decreases the size of the character's collision object and re-enables physics simulation on the basketball.
+    PhysicsRigidBody::Parameters rbParams;
+    rbParams.mass = 20.0f;
+    Vector3 velocity = _character->getCurrentVelocity();
+    Node* boy = _character->getNode();
+    boy->setCollisionObject(PhysicsCollisionObject::CHARACTER, PhysicsCollisionShape::capsule(1.2f, 6.0f, Vector3(0.0f, 3.0f, 0.0f), true), &rbParams);
+    _character = static_cast<PhysicsCharacter*>(boy->getCollisionObject());
+    _character->setVelocity(velocity);
+    _character->setMaxSlopeAngle(0.0f);
+    _character->setMaxStepHeight(0.0f);
+    
+    PhysicsRigidBody* basketball = (PhysicsRigidBody*) _basketballNode->getCollisionObject();
+    basketball->setEnabled(true);
+}

BIN
samples/lua/res/box-diffuse.png


+ 0 - 7
samples/lua/res/box-encode.bat

@@ -1,7 +0,0 @@
-@echo off
-
-REM This script converts box.fbx to a gameplay binary format (.gpb).
-
-"..\..\..\bin\windows\gameplay-encoder.exe" box.fbx
-
-pause

BIN
samples/lua/res/box.gpb


+ 0 - 38
samples/lua/res/box.material

@@ -1,38 +0,0 @@
-material box
-{
-    technique
-    {
-        pass 0
-        {
-            // shaders
-            vertexShader = res/shaders/textured.vert
-            fragmentShader = res/shaders/textured.frag
-            defines = SPECULAR;DIRECTIONAL_LIGHT_COUNT 1
-            
-            // uniforms
-            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-            u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
-            u_cameraPosition = CAMERA_WORLD_POSITION
-            u_ambientColor = SCENE_AMBIENT_COLOR
-            u_specularExponent = 50
-            
-            // samplers
-            sampler u_diffuseTexture
-            {
-                path = res/box-diffuse.png
-                mipmap = true
-                wrapS = CLAMP
-                wrapT = CLAMP
-                minFilter = LINEAR_MIPMAP_LINEAR
-                magFilter = LINEAR
-            }
-
-            // render state
-            renderState
-            {
-                cullFace = true
-                depthTest = true
-            }
-        }
-    }
-}

BIN
samples/lua/res/box.mb


+ 2 - 4
samples/lua/res/game.lua

@@ -16,14 +16,12 @@ function initialize()
     -- Get the box node
     _modelNode = _scene:findNode("box")
 
-    -- Bind the material to the model
-
     -- Find the light node
     local lightNode = _scene:findNode("directionalLight1")
 
     -- Bind the light node's direction into the box material.
     _modelNode:getModel():getMaterial():getParameter("u_directionalLightColor[0]"):setValue(lightNode:getLight():getColor())
-    _modelNode:getModel():getMaterial():getParameter("u_directionalLightDirection[0]"):bindValue(lightNode, "&Node::getForwardVectorView")
+    _modelNode:getModel():getMaterial():getParameter("u_directionalLightDirection[0]"):bindValue(lightNode, "&Node::getForwardVectorWorld")
 
     -- Update the aspect ratio for our scene's camera to match the current device resolution
     local game = Game.getInstance()
@@ -179,6 +177,6 @@ function createGridModel()
     mesh:setVertexData(vertices, 0, pointCount)
 
     local model = Model.create(mesh)
-    model:setMaterial("res/grid.material")
+    model:setMaterial("res/lua.material#grid")
     return model
 end

+ 0 - 23
samples/lua/res/grid.material

@@ -1,23 +0,0 @@
-material grid
-{
-    technique
-    {
-        pass 0
-        {
-            // shaders
-            vertexShader = res/shaders/colored.vert
-            fragmentShader = res/shaders/colored.frag
-			defines = VERTEX_COLOR
-
-             // uniforms
-            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-            
-            // render state
-            renderState
-            {
-                cullFace = true
-                depthTest = true
-            }
-        }
-    }
-}

+ 8 - 8
samples/lua/res/lua.scene

@@ -1,9 +1,9 @@
-scene
-{
-    path = res/box.gpb
-    
-    node box
-    {
-        material = res/box.material
-    }
+scene
+{
+    path = res/lua.gpb
+    
+    node box
+    {
+        material = res/lua.material
+    }
 }

+ 351 - 349
samples/lua/sample-lua.vcxproj

@@ -1,350 +1,352 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="DebugMem|Win32">
-      <Configuration>DebugMem</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DebugMem|x64">
-      <Configuration>DebugMem</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{04EAF3E5-0F9E-AF4D-53F9-269CE114211F}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>sample-lua</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
-    <CustomBuildBeforeTargets>
-    </CustomBuildBeforeTargets>
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
-    <CustomBuildBeforeTargets />
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
-    <CustomBuildBeforeTargets />
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
-    <CustomBuildBeforeTargets />
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <CustomBuildBeforeTargets>
-    </CustomBuildBeforeTargets>
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <CustomBuildBeforeTargets />
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-      <Message>
-      </Message>
-      <Outputs>
-      </Outputs>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x64;../../external-deps/bullet/lib/windows/x64;../../external-deps/openal/lib/windows/x64;../../external-deps/oggvorbis/lib/windows/x64;../../external-deps/glew/lib/windows/x64;../../external-deps/png/lib/windows/x64;../../external-deps/zlib/lib/windows/x64;../../gameplay/windows/x64/$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-      <Message>
-      </Message>
-      <Outputs>
-      </Outputs>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;GP_USE_MEM_LEAK_DETECTION;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <ShowIncludes>false</ShowIncludes>
-      <PreprocessToFile>false</PreprocessToFile>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-      <Message>
-      </Message>
-      <Outputs>
-      </Outputs>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;GP_USE_MEM_LEAK_DETECTION;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <ShowIncludes>false</ShowIncludes>
-      <PreprocessToFile>false</PreprocessToFile>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x64;../../external-deps/bullet/lib/windows/x64;../../external-deps/openal/lib/windows/x64;../../external-deps/oggvorbis/lib/windows/x64;../../external-deps/glew/lib/windows/x64;../../external-deps/png/lib/windows/x64;../../external-deps/zlib/lib/windows/x64;../../gameplay/windows/x64/$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-      <Message>
-      </Message>
-      <Outputs>
-      </Outputs>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-      <Message>
-      </Message>
-      <Outputs>
-      </Outputs>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x64;../../external-deps/bullet/lib/windows/x64;../../external-deps/openal/lib/windows/x64;../../external-deps/oggvorbis/lib/windows/x64;../../external-deps/glew/lib/windows/x64;../../external-deps/png/lib/windows/x64;../../external-deps/zlib/lib/windows/x64;../../gameplay/windows/x64/$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-      <Message>
-      </Message>
-      <Outputs>
-      </Outputs>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <None Include="bar-descriptor.xml">
-      <SubType>Designer</SubType>
-    </None>
-    <None Include="game.config" />
-    <None Include="icon.png" />
-    <None Include="res\ai.lua" />
-    <None Include="res\arial.gpb" />
-    <None Include="res\arial.ttf" />
-    <None Include="res\box-diffuse.png" />
-    <None Include="res\box.gpb" />
-    <None Include="res\box.material" />
-    <None Include="res\game.lua" />
-    <None Include="res\grid.material" />
-    <None Include="res\lua.scene" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\LuaGame.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\LuaGame.h" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugMem|Win32">
+      <Configuration>DebugMem</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugMem|x64">
+      <Configuration>DebugMem</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{04EAF3E5-0F9E-AF4D-53F9-269CE114211F}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>sample-lua</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
+    <CustomBuildBeforeTargets>
+    </CustomBuildBeforeTargets>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
+    <CustomBuildBeforeTargets />
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
+    <CustomBuildBeforeTargets />
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
+    <CustomBuildBeforeTargets />
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <CustomBuildBeforeTargets>
+    </CustomBuildBeforeTargets>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <CustomBuildBeforeTargets />
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
+    </PostBuildEvent>
+    <CustomBuildStep>
+      <Command>
+      </Command>
+      <Message>
+      </Message>
+      <Outputs>
+      </Outputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x64;../../external-deps/bullet/lib/windows/x64;../../external-deps/openal/lib/windows/x64;../../external-deps/oggvorbis/lib/windows/x64;../../external-deps/glew/lib/windows/x64;../../external-deps/png/lib/windows/x64;../../external-deps/zlib/lib/windows/x64;../../gameplay/windows/x64/$(Configuration)</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>
+      </Command>
+    </PostBuildEvent>
+    <CustomBuildStep>
+      <Command>
+      </Command>
+      <Message>
+      </Message>
+      <Outputs>
+      </Outputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;GP_USE_MEM_LEAK_DETECTION;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <ShowIncludes>false</ShowIncludes>
+      <PreprocessToFile>false</PreprocessToFile>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
+    </PostBuildEvent>
+    <CustomBuildStep>
+      <Command>
+      </Command>
+      <Message>
+      </Message>
+      <Outputs>
+      </Outputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;GP_USE_MEM_LEAK_DETECTION;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <ShowIncludes>false</ShowIncludes>
+      <PreprocessToFile>false</PreprocessToFile>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x64;../../external-deps/bullet/lib/windows/x64;../../external-deps/openal/lib/windows/x64;../../external-deps/oggvorbis/lib/windows/x64;../../external-deps/glew/lib/windows/x64;../../external-deps/png/lib/windows/x64;../../external-deps/zlib/lib/windows/x64;../../gameplay/windows/x64/$(Configuration)</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>
+      </Command>
+    </PostBuildEvent>
+    <CustomBuildStep>
+      <Command>
+      </Command>
+      <Message>
+      </Message>
+      <Outputs>
+      </Outputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
+    </PostBuildEvent>
+    <CustomBuildStep>
+      <Command>
+      </Command>
+      <Message>
+      </Message>
+      <Outputs>
+      </Outputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_ITERATOR_DEBUG_LEVEL=0;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x64;../../external-deps/bullet/lib/windows/x64;../../external-deps/openal/lib/windows/x64;../../external-deps/oggvorbis/lib/windows/x64;../../external-deps/glew/lib/windows/x64;../../external-deps/png/lib/windows/x64;../../external-deps/zlib/lib/windows/x64;../../gameplay/windows/x64/$(Configuration)</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>
+      </Command>
+    </PostBuildEvent>
+    <CustomBuildStep>
+      <Command>
+      </Command>
+      <Message>
+      </Message>
+      <Outputs>
+      </Outputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <None Include="bar-descriptor.xml">
+      <SubType>Designer</SubType>
+    </None>
+    <None Include="game.config" />
+    <None Include="icon.png" />
+    <None Include="res\ai.lua" />
+    <None Include="res\arial.gpb" />
+    <None Include="res\game.lua" />
+    <None Include="res\lua.fbx" />
+    <None Include="res\lua.gpb" />
+    <None Include="res\lua.material" />
+    <None Include="res\lua.mb" />
+    <None Include="res\lua.scene" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\LuaGame.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\LuaGame.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\lua-logo.png" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>

+ 55 - 50
samples/lua/sample-lua.vcxproj.filters

@@ -1,51 +1,56 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="res">
-    </Filter>
-    <Filter Include="src">
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="icon.png" />
-    <None Include="bar-descriptor.xml" />
-    <None Include="res\box.gpb">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\box.material">
-      <Filter>res</Filter>
-    </None>
-    <None Include="game.config" />
-    <None Include="res\box-diffuse.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\grid.material">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\arial.ttf">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\ai.lua">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\game.lua">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\arial.gpb">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\lua.scene">
-      <Filter>res</Filter>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\LuaGame.h">
-      <Filter>src</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\LuaGame.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="res">
+    </Filter>
+    <Filter Include="src">
+    </Filter>
+    <Filter Include="res\shaders">
+      <UniqueIdentifier>{68243144-f027-4318-bbef-5f0e62ae5e82}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="icon.png" />
+    <None Include="bar-descriptor.xml" />
+    <None Include="game.config" />
+    <None Include="res\ai.lua">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\arial.gpb">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\game.lua">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\lua.gpb">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\lua.material">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\lua.mb">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\lua.scene">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\lua.fbx">
+      <Filter>res</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\LuaGame.h">
+      <Filter>src</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\LuaGame.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\lua-logo.png">
+      <Filter>res</Filter>
+    </Image>
+  </ItemGroup>
 </Project>

BIN
samples/mesh/res/duck-diffuse.png


+ 0 - 7
samples/mesh/res/duck-encode.bat

@@ -1,7 +0,0 @@
-@echo off
-
-REM This script converts duck.fbx to a gameplay binary format (.gpb).
-
-"..\..\..\bin\windows\gameplay-encoder.exe" duck.fbx
-
-pause

BIN
samples/mesh/res/duck.fbx


BIN
samples/mesh/res/duck.gpb


+ 0 - 38
samples/mesh/res/duck.material

@@ -1,38 +0,0 @@
-material duck
-{
-    technique
-    {
-        pass 0
-        {
-            // shaders
-            vertexShader = res/shaders/textured.vert
-            fragmentShader = res/shaders/textured.frag
-            defines = SPECULAR;DIRECTIONAL_LIGHT_COUNT 1
-            
-            // uniforms
-            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-            u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
-            u_cameraPosition = CAMERA_WORLD_POSITION
-            u_ambientColor = 0.2, 0.2, 0.2
-            u_specularExponent = 50
-            
-            // samplers
-            sampler u_diffuseTexture
-            {
-                path = res/duck-diffuse.png
-                mipmap = true
-                wrapS = CLAMP
-                wrapT = CLAMP
-                minFilter = NEAREST_MIPMAP_LINEAR
-                magFilter = LINEAR
-            }
-
-            // render state
-            renderState
-            {
-                cullFace = true
-                depthTest = true
-            }
-        }
-    }
-}

BIN
samples/mesh/res/duck.mb


+ 0 - 23
samples/mesh/res/grid.material

@@ -1,23 +0,0 @@
-material grid
-{
-    technique
-    {
-        pass 0
-        {
-            // shaders
-            vertexShader = res/shaders/colored.vert
-            fragmentShader = res/shaders/colored.frag
-			defines = VERTEX_COLOR
-
-             // uniforms
-            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-            
-            // render state
-            renderState
-            {
-                cullFace = true
-                depthTest = true
-            }
-        }
-    }
-}

+ 0 - 9
samples/mesh/res/sample.scene

@@ -1,9 +0,0 @@
-scene
-{
-    path = res/duck.gpb
-    
-    node duck
-    {
-        material = res/duck.material
-    }
-}

+ 364 - 346
samples/mesh/sample-mesh.vcxproj

@@ -1,347 +1,365 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="DebugMem|Win32">
-      <Configuration>DebugMem</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="DebugMem|x64">
-      <Configuration>DebugMem</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{D672DC66-3CE0-4878-B0D2-813CA731012F}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>sample-mesh</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v120</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
-    <CustomBuildBeforeTargets>
-    </CustomBuildBeforeTargets>
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
-    <CustomBuildBeforeTargets />
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
-    <CustomBuildBeforeTargets />
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
-    <CustomBuildBeforeTargets />
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <CustomBuildBeforeTargets>
-    </CustomBuildBeforeTargets>
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <CustomBuildBeforeTargets />
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-      <Message>
-      </Message>
-      <Outputs>
-      </Outputs>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x64;../../external-deps/bullet/lib/windows/x64;../../external-deps/openal/lib/windows/x64;../../external-deps/oggvorbis/lib/windows/x64;../../external-deps/glew/lib/windows/x64;../../external-deps/png/lib/windows/x64;../../external-deps/zlib/lib/windows/x64;../../gameplay/windows/x64/$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-      <Message>
-      </Message>
-      <Outputs>
-      </Outputs>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_WINDOWS;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <ShowIncludes>false</ShowIncludes>
-      <PreprocessToFile>false</PreprocessToFile>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-      <Message>
-      </Message>
-      <Outputs>
-      </Outputs>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_WINDOWS;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
-      <RuntimeTypeInfo>true</RuntimeTypeInfo>
-      <ShowIncludes>false</ShowIncludes>
-      <PreprocessToFile>false</PreprocessToFile>
-      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x64;../../external-deps/bullet/lib/windows/x64;../../external-deps/openal/lib/windows/x64;../../external-deps/oggvorbis/lib/windows/x64;../../external-deps/glew/lib/windows/x64;../../external-deps/png/lib/windows/x64;../../external-deps/zlib/lib/windows/x64;../../gameplay/windows/x64/$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-      <Message>
-      </Message>
-      <Outputs>
-      </Outputs>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-      <Message>
-      </Message>
-      <Outputs>
-      </Outputs>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x64;../../external-deps/bullet/lib/windows/x64;../../external-deps/openal/lib/windows/x64;../../external-deps/oggvorbis/lib/windows/x64;../../external-deps/glew/lib/windows/x64;../../external-deps/png/lib/windows/x64;../../external-deps/zlib/lib/windows/x64;../../gameplay/windows/x64/$(Configuration)</AdditionalLibraryDirectories>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-    <CustomBuildStep>
-      <Command>
-      </Command>
-      <Message>
-      </Message>
-      <Outputs>
-      </Outputs>
-    </CustomBuildStep>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <None Include="../../gameplay\res\logo_powered_white.png" />
-    <None Include="bar-descriptor.xml" />
-    <None Include="game.config" />
-    <None Include="icon.png" />
-    <None Include="res\arial.gpb" />
-    <None Include="res\duck-diffuse.png" />
-    <None Include="res\duck.fbx" />
-    <None Include="res\duck.gpb" />
-    <None Include="res\duck.material" />
-    <None Include="res\grid.material" />
-    <None Include="res\sample.scene" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\MeshGame.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\MeshGame.h" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugMem|Win32">
+      <Configuration>DebugMem</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugMem|x64">
+      <Configuration>DebugMem</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{D672DC66-3CE0-4878-B0D2-813CA731012F}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>sample-mesh</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v120</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
+    <CustomBuildBeforeTargets>
+    </CustomBuildBeforeTargets>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
+    <CustomBuildBeforeTargets />
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
+    <CustomBuildBeforeTargets />
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <ExecutablePath>$(ExecutablePath)</ExecutablePath>
+    <CustomBuildBeforeTargets />
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <CustomBuildBeforeTargets>
+    </CustomBuildBeforeTargets>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <CustomBuildBeforeTargets />
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
+    </PostBuildEvent>
+    <CustomBuildStep>
+      <Command>
+      </Command>
+      <Message>
+      </Message>
+      <Outputs>
+      </Outputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x64;../../external-deps/bullet/lib/windows/x64;../../external-deps/openal/lib/windows/x64;../../external-deps/oggvorbis/lib/windows/x64;../../external-deps/glew/lib/windows/x64;../../external-deps/png/lib/windows/x64;../../external-deps/zlib/lib/windows/x64;../../gameplay/windows/x64/$(Configuration)</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>
+      </Command>
+    </PostBuildEvent>
+    <CustomBuildStep>
+      <Command>
+      </Command>
+      <Message>
+      </Message>
+      <Outputs>
+      </Outputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_WINDOWS;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <ShowIncludes>false</ShowIncludes>
+      <PreprocessToFile>false</PreprocessToFile>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
+    </PostBuildEvent>
+    <CustomBuildStep>
+      <Command>
+      </Command>
+      <Message>
+      </Message>
+      <Outputs>
+      </Outputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;WIN32;_DEBUG;_WINDOWS;GP_USE_MEM_LEAK_DETECTION;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
+      <RuntimeTypeInfo>true</RuntimeTypeInfo>
+      <ShowIncludes>false</ShowIncludes>
+      <PreprocessToFile>false</PreprocessToFile>
+      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x64;../../external-deps/bullet/lib/windows/x64;../../external-deps/openal/lib/windows/x64;../../external-deps/oggvorbis/lib/windows/x64;../../external-deps/glew/lib/windows/x64;../../external-deps/png/lib/windows/x64;../../external-deps/zlib/lib/windows/x64;../../gameplay/windows/x64/$(Configuration)</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>
+      </Command>
+    </PostBuildEvent>
+    <CustomBuildStep>
+      <Command>
+      </Command>
+      <Message>
+      </Message>
+      <Outputs>
+      </Outputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
+    </PostBuildEvent>
+    <CustomBuildStep>
+      <Command>
+      </Command>
+      <Message>
+      </Message>
+      <Outputs>
+      </Outputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>../../gameplay/src;../../external-deps/bullet/include;../../external-deps/lua/include;../../external-deps/openal/include/AL;../../external-deps/oggvorbis/include;../../external-deps/png/include;../../external-deps/zlib/include;../../external-deps/glew/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>lua.lib;OpenAL32.lib;OpenGL32.lib;GLU32.lib;glew32.lib;libpng.lib;zlib.lib;gameplay.lib;BulletDynamics.lib;BulletCollision.lib;LinearMath.lib;libogg.lib;libvorbis.lib;libvorbisfile.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x64;../../external-deps/bullet/lib/windows/x64;../../external-deps/openal/lib/windows/x64;../../external-deps/oggvorbis/lib/windows/x64;../../external-deps/glew/lib/windows/x64;../../external-deps/png/lib/windows/x64;../../external-deps/zlib/lib/windows/x64;../../gameplay/windows/x64/$(Configuration)</AdditionalLibraryDirectories>
+    </Link>
+    <PostBuildEvent>
+      <Command>
+      </Command>
+    </PostBuildEvent>
+    <CustomBuildStep>
+      <Command>
+      </Command>
+      <Message>
+      </Message>
+      <Outputs>
+      </Outputs>
+    </CustomBuildStep>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <None Include="../../gameplay\res\logo_powered_white.png" />
+    <None Include="bar-descriptor.xml" />
+    <None Include="game.config" />
+    <None Include="icon.png" />
+    <None Include="res\arial.gpb" />
+    <None Include="res\mesh.fbx" />
+    <None Include="res\mesh.gpb" />
+    <None Include="res\mesh.material" />
+    <None Include="res\mesh.mb" />
+    <None Include="res\mesh.scene" />
+    <None Include="res\shaders\colored.frag" />
+    <None Include="res\shaders\colored.vert" />
+    <None Include="res\shaders\font.frag" />
+    <None Include="res\shaders\font.vert" />
+    <None Include="res\shaders\form.frag" />
+    <None Include="res\shaders\form.vert" />
+    <None Include="res\shaders\lighting.frag" />
+    <None Include="res\shaders\lighting.vert" />
+    <None Include="res\shaders\skinning-none.vert" />
+    <None Include="res\shaders\skinning.vert" />
+    <None Include="res\shaders\sprite.frag" />
+    <None Include="res\shaders\sprite.vert" />
+    <None Include="res\shaders\terrain.frag" />
+    <None Include="res\shaders\terrain.vert" />
+    <None Include="res\shaders\textured.frag" />
+    <None Include="res\shaders\textured.vert" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\MeshGame.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\MeshGame.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\duck.png" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>

+ 100 - 47
samples/mesh/sample-mesh.vcxproj.filters

@@ -1,48 +1,101 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="src">
-      <UniqueIdentifier>{79160e99-141f-41bf-8592-4e3855de5cc8}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="res">
-      <UniqueIdentifier>{529d46d5-f3a6-4e0d-94f1-80461113f474}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="icon.png" />
-    <None Include="bar-descriptor.xml" />
-    <None Include="res\duck.gpb">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\duck.material">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\duck-diffuse.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\grid.material">
-      <Filter>res</Filter>
-    </None>
-    <None Include="game.config" />
-    <None Include="../../gameplay\res\logo_powered_white.png" />
-    <None Include="res\arial.gpb">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\duck.fbx">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\sample.scene">
-      <Filter>res</Filter>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\MeshGame.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\MeshGame.h">
-      <Filter>src</Filter>
-    </ClInclude>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="src">
+      <UniqueIdentifier>{79160e99-141f-41bf-8592-4e3855de5cc8}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res">
+      <UniqueIdentifier>{529d46d5-f3a6-4e0d-94f1-80461113f474}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\shaders">
+      <UniqueIdentifier>{7fbb53de-b9f0-4748-a142-1bd7c040565f}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="icon.png" />
+    <None Include="bar-descriptor.xml" />
+    <None Include="game.config" />
+    <None Include="../../gameplay\res\logo_powered_white.png" />
+    <None Include="res\arial.gpb">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\mesh.fbx">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\mesh.gpb">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\mesh.material">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\mesh.mb">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\mesh.scene">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\shaders\colored.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\colored.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning-none.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\MeshGame.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\MeshGame.h">
+      <Filter>src</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\duck.png">
+      <Filter>res</Filter>
+    </Image>
+  </ItemGroup>
 </Project>

+ 219 - 219
samples/mesh/src/MeshGame.cpp

@@ -1,220 +1,220 @@
-#include "MeshGame.h"
-
-// Declare our game instance
-MeshGame game;
-
-MeshGame::MeshGame()
-    : _font(NULL), _scene(NULL), _modelNode(NULL), _touched(false), _touchX(0)
-{
-}
-
-MeshGame::~MeshGame()
-{
-}
-
-void MeshGame::initialize()
-{
-    // Display the gameplay splash screen for at least 1 second.
-    displayScreen(this, &MeshGame::drawSplash, NULL, 1000L);
-
-    // Load the font
-    _font = Font::create("res/arial.gpb");
-
-    // Load the scene from file
-    _scene = Scene::load("res/sample.scene");
-
-    // Get the duck node
-    _modelNode = _scene->findNode("duck");
-
-    // Find the light node
-    Node* lightNode = _scene->findNode("directionalLight1");
-
-    // Bind the light node's direction into duck's material.
-    _modelNode->getModel()->getMaterial()->getParameter("u_directionalLightColor[0]")->setValue(lightNode->getLight()->getColor());
-    _modelNode->getModel()->getMaterial()->getParameter("u_directionalLightDirection[0]")->bindValue(lightNode, &Node::getForwardVectorView);
-
-    // Update the aspect ratio for our scene's camera to match the current device resolution
-    _scene->getActiveCamera()->setAspectRatio(getAspectRatio());
-
-    // Create the grid and add it to the scene.
-    Model* model = createGridModel();
-    _scene->addNode("grid")->setModel(model);
-    model->release();
-}
-
-void MeshGame::finalize()
-{
-    SAFE_RELEASE(_font);
-    SAFE_RELEASE(_scene);
-}
-
-void MeshGame::update(float elapsedTime)
-{
-    // Rotate model
-    if (!_touched)
-        _modelNode->rotateY(elapsedTime * MATH_DEG_TO_RAD(0.05f));
-}
-
-void MeshGame::render(float elapsedTime)
-{
-    // Clear the color and depth buffers.
-    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
-    
-    // Visit all the nodes in the scene, drawing the models/mesh.
-    _scene->visit(this, &MeshGame::drawScene);
-
-    // Draw the fps
-    drawFrameRate(_font, Vector4(0, 0.5f, 1, 1), 5, 1, getFrameRate());
-}
-
-void MeshGame::keyEvent(Keyboard::KeyEvent evt, int key)
-{
-    if (evt == Keyboard::KEY_PRESS)
-    {
-        switch (key)
-        {
-        case Keyboard::KEY_ESCAPE:
-            exit();
-            break;
-        }
-    }
-}
-
-void MeshGame::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
-{
-    switch (evt)
-    {
-    case Touch::TOUCH_PRESS:
-        {
-            _touched = true;
-            _touchX = x;
-        }
-        break;
-    case Touch::TOUCH_RELEASE:
-        {
-            _touched = false;
-            _touchX = 0;
-        }
-        break;
-    case Touch::TOUCH_MOVE:
-        {
-            int deltaX = x - _touchX;
-            _touchX = x;
-            _modelNode->rotateY(MATH_DEG_TO_RAD(deltaX * 0.5f));
-        }
-        break;
-    default:
-        break;
-    };
-}
-
-bool MeshGame::drawScene(Node* node)
-{
-    Model* model = node->getModel();
-    if (model)
-        model->draw();
-    return true;
-}
-
-void MeshGame::drawFrameRate(Font* font, const Vector4& color, unsigned int x, unsigned int y, unsigned int fps)
-{
-    char buffer[10];
-    sprintf(buffer, "%u", fps);
-    font->start();
-    font->drawText(buffer, x, y, color, font->getSize());
-    font->finish();
-}
-
-void MeshGame::drawSplash(void* param)
-{
-    clear(CLEAR_COLOR_DEPTH, Vector4(0, 0, 0, 1), 1.0f, 0);
-    SpriteBatch* batch = SpriteBatch::create("res/logo_powered_white.png");
-    batch->start();
-    batch->draw(this->getWidth() * 0.5f, this->getHeight() * 0.5f, 0.0f, 512.0f, 512.0f, 0.0f, 1.0f, 1.0f, 0.0f, Vector4::one(), true);
-    batch->finish();
-    SAFE_DELETE(batch);
-}
-
-Model* MeshGame::createGridModel(unsigned int lineCount)
-{
-    // There needs to be an odd number of lines
-    lineCount |= 1;
-    const unsigned int pointCount = lineCount * 4;
-    const unsigned int verticesSize = pointCount * (3 + 3);  // (3 (position(xyz) + 3 color(rgb))
-
-    std::vector<float> vertices;
-    vertices.resize(verticesSize);
-
-    const float gridLength = (float)(lineCount / 2);
-    float value = -gridLength;
-    for (unsigned int i = 0; i < verticesSize; ++i)
-    {
-        // Default line color is dark grey
-        Vector4 color(0.3f, 0.3f, 0.3f, 1.0f);
-
-        // Very 10th line is brighter grey
-        if (((int)value) % 10 == 0)
-        {
-            color.set(0.45f, 0.45f, 0.45f, 1.0f);
-        }
-
-        // The Z axis is blue
-        if (value == 0.0f)
-        {
-            color.set(0.15f, 0.15f, 0.7f, 1.0f);
-        }
-
-        // Build the lines
-        vertices[i] = value;
-        vertices[++i] = 0.0f;
-        vertices[++i] = -gridLength;
-        vertices[++i] = color.x;
-        vertices[++i] = color.y;
-        vertices[++i] = color.z;
-
-        vertices[++i] = value;
-        vertices[++i] = 0.0f;
-        vertices[++i] = gridLength;
-        vertices[++i] = color.x;
-        vertices[++i] = color.y;
-        vertices[++i] = color.z;
-
-        // The X axis is red
-        if (value == 0.0f)
-        {
-            color.set(0.7f, 0.15f, 0.15f, 1.0f);
-        }
-        vertices[++i] = -gridLength;
-        vertices[++i] = 0.0f;
-        vertices[++i] = value;
-        vertices[++i] = color.x;
-        vertices[++i] = color.y;
-        vertices[++i] = color.z;
-
-        vertices[++i] = gridLength;
-        vertices[++i] = 0.0f;
-        vertices[++i] = value;
-        vertices[++i] = color.x;
-        vertices[++i] = color.y;
-        vertices[++i] = color.z;
-
-        value += 1.0f;
-    }
-    VertexFormat::Element elements[] =
-    {
-        VertexFormat::Element(VertexFormat::POSITION, 3),
-        VertexFormat::Element(VertexFormat::COLOR, 3)
-    };
-    Mesh* mesh = Mesh::createMesh(VertexFormat(elements, 2), pointCount, false);
-    if (mesh == NULL)
-    {
-        return NULL;
-    }
-    mesh->setPrimitiveType(Mesh::LINES);
-    mesh->setVertexData(&vertices[0], 0, pointCount);
-
-    Model* model = Model::create(mesh);
-    model->setMaterial("res/grid.material");
-    SAFE_RELEASE(mesh);
-    return model;
+#include "MeshGame.h"
+
+// Declare our game instance
+MeshGame game;
+
+MeshGame::MeshGame()
+    : _font(NULL), _scene(NULL), _modelNode(NULL), _touched(false), _touchX(0)
+{
+}
+
+MeshGame::~MeshGame()
+{
+}
+
+void MeshGame::initialize()
+{
+    // Display the gameplay splash screen for at least 1 second.
+    displayScreen(this, &MeshGame::drawSplash, NULL, 1000L);
+
+    // Load the font
+    _font = Font::create("res/arial.gpb");
+
+    // Load the scene from file
+    _scene = Scene::load("res/mesh.scene");
+
+    // Get the duck node
+    _modelNode = _scene->findNode("duck");
+
+    // Find the light node
+    Node* lightNode = _scene->findNode("directionalLight1");
+
+    // Bind the light node's direction into duck's material.
+    _modelNode->getModel()->getMaterial()->getParameter("u_directionalLightColor[0]")->setValue(lightNode->getLight()->getColor());
+    _modelNode->getModel()->getMaterial()->getParameter("u_directionalLightDirection[0]")->bindValue(lightNode, &Node::getForwardVectorView);
+
+    // Update the aspect ratio for our scene's camera to match the current device resolution
+    _scene->getActiveCamera()->setAspectRatio(getAspectRatio());
+
+    // Create the grid and add it to the scene.
+    Model* model = createGridModel();
+    _scene->addNode("grid")->setModel(model);
+    model->release();
+}
+
+void MeshGame::finalize()
+{
+    SAFE_RELEASE(_font);
+    SAFE_RELEASE(_scene);
+}
+
+void MeshGame::update(float elapsedTime)
+{
+    // Rotate model
+    if (!_touched)
+        _modelNode->rotateY(elapsedTime * MATH_DEG_TO_RAD(0.05f));
+}
+
+void MeshGame::render(float elapsedTime)
+{
+    // Clear the color and depth buffers.
+    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
+    
+    // Visit all the nodes in the scene, drawing the models/mesh.
+    _scene->visit(this, &MeshGame::drawScene);
+
+    // Draw the fps
+    drawFrameRate(_font, Vector4(0, 0.5f, 1, 1), 5, 1, getFrameRate());
+}
+
+void MeshGame::keyEvent(Keyboard::KeyEvent evt, int key)
+{
+    if (evt == Keyboard::KEY_PRESS)
+    {
+        switch (key)
+        {
+        case Keyboard::KEY_ESCAPE:
+            exit();
+            break;
+        }
+    }
+}
+
+void MeshGame::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
+{
+    switch (evt)
+    {
+    case Touch::TOUCH_PRESS:
+        {
+            _touched = true;
+            _touchX = x;
+        }
+        break;
+    case Touch::TOUCH_RELEASE:
+        {
+            _touched = false;
+            _touchX = 0;
+        }
+        break;
+    case Touch::TOUCH_MOVE:
+        {
+            int deltaX = x - _touchX;
+            _touchX = x;
+            _modelNode->rotateY(MATH_DEG_TO_RAD(deltaX * 0.5f));
+        }
+        break;
+    default:
+        break;
+    };
+}
+
+bool MeshGame::drawScene(Node* node)
+{
+    Model* model = node->getModel();
+    if (model)
+        model->draw();
+    return true;
+}
+
+void MeshGame::drawFrameRate(Font* font, const Vector4& color, unsigned int x, unsigned int y, unsigned int fps)
+{
+    char buffer[10];
+    sprintf(buffer, "%u", fps);
+    font->start();
+    font->drawText(buffer, x, y, color, font->getSize());
+    font->finish();
+}
+
+void MeshGame::drawSplash(void* param)
+{
+    clear(CLEAR_COLOR_DEPTH, Vector4(0, 0, 0, 1), 1.0f, 0);
+    SpriteBatch* batch = SpriteBatch::create("res/logo_powered_white.png");
+    batch->start();
+    batch->draw(this->getWidth() * 0.5f, this->getHeight() * 0.5f, 0.0f, 512.0f, 512.0f, 0.0f, 1.0f, 1.0f, 0.0f, Vector4::one(), true);
+    batch->finish();
+    SAFE_DELETE(batch);
+}
+
+Model* MeshGame::createGridModel(unsigned int lineCount)
+{
+    // There needs to be an odd number of lines
+    lineCount |= 1;
+    const unsigned int pointCount = lineCount * 4;
+    const unsigned int verticesSize = pointCount * (3 + 3);  // (3 (position(xyz) + 3 color(rgb))
+
+    std::vector<float> vertices;
+    vertices.resize(verticesSize);
+
+    const float gridLength = (float)(lineCount / 2);
+    float value = -gridLength;
+    for (unsigned int i = 0; i < verticesSize; ++i)
+    {
+        // Default line color is dark grey
+        Vector4 color(0.3f, 0.3f, 0.3f, 1.0f);
+
+        // Very 10th line is brighter grey
+        if (((int)value) % 10 == 0)
+        {
+            color.set(0.45f, 0.45f, 0.45f, 1.0f);
+        }
+
+        // The Z axis is blue
+        if (value == 0.0f)
+        {
+            color.set(0.15f, 0.15f, 0.7f, 1.0f);
+        }
+
+        // Build the lines
+        vertices[i] = value;
+        vertices[++i] = 0.0f;
+        vertices[++i] = -gridLength;
+        vertices[++i] = color.x;
+        vertices[++i] = color.y;
+        vertices[++i] = color.z;
+
+        vertices[++i] = value;
+        vertices[++i] = 0.0f;
+        vertices[++i] = gridLength;
+        vertices[++i] = color.x;
+        vertices[++i] = color.y;
+        vertices[++i] = color.z;
+
+        // The X axis is red
+        if (value == 0.0f)
+        {
+            color.set(0.7f, 0.15f, 0.15f, 1.0f);
+        }
+        vertices[++i] = -gridLength;
+        vertices[++i] = 0.0f;
+        vertices[++i] = value;
+        vertices[++i] = color.x;
+        vertices[++i] = color.y;
+        vertices[++i] = color.z;
+
+        vertices[++i] = gridLength;
+        vertices[++i] = 0.0f;
+        vertices[++i] = value;
+        vertices[++i] = color.x;
+        vertices[++i] = color.y;
+        vertices[++i] = color.z;
+
+        value += 1.0f;
+    }
+    VertexFormat::Element elements[] =
+    {
+        VertexFormat::Element(VertexFormat::POSITION, 3),
+        VertexFormat::Element(VertexFormat::COLOR, 3)
+    };
+    Mesh* mesh = Mesh::createMesh(VertexFormat(elements, 2), pointCount, false);
+    if (mesh == NULL)
+    {
+        return NULL;
+    }
+    mesh->setPrimitiveType(Mesh::LINES);
+    mesh->setVertexData(&vertices[0], 0, pointCount);
+
+    Model* model = Model::create(mesh);
+    model->setMaterial("res/mesh.material#grid");
+    SAFE_RELEASE(mesh);
+    return model;
 }

+ 30 - 10
samples/particles/sample-particles.vcxproj

@@ -47,14 +47,34 @@
     </None>
     <None Include="res\arial.gpb" />
     <None Include="res\editor.form" />
-    <None Include="res\editor.png" />
     <None Include="res\editor.theme" />
     <None Include="res\explosion.particle" />
-    <None Include="res\explosion.png" />
     <None Include="res\fire.particle" />
-    <None Include="res\fire.png" />
+    <None Include="res\grid.material" />
+    <None Include="res\shaders\colored.frag" />
+    <None Include="res\shaders\colored.vert" />
+    <None Include="res\shaders\font.frag" />
+    <None Include="res\shaders\font.vert" />
+    <None Include="res\shaders\form.frag" />
+    <None Include="res\shaders\form.vert" />
+    <None Include="res\shaders\lighting.frag" />
+    <None Include="res\shaders\lighting.vert" />
+    <None Include="res\shaders\skinning-none.vert" />
+    <None Include="res\shaders\skinning.vert" />
+    <None Include="res\shaders\sprite.frag" />
+    <None Include="res\shaders\sprite.vert" />
+    <None Include="res\shaders\terrain.frag" />
+    <None Include="res\shaders\terrain.vert" />
+    <None Include="res\shaders\textured.frag" />
+    <None Include="res\shaders\textured.vert" />
     <None Include="res\smoke.particle" />
-    <None Include="res\smoke.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\editor.png" />
+    <Image Include="res\explosion.png" />
+    <Image Include="res\fire.png" />
+    <Image Include="res\logo_powered_white.png" />
+    <Image Include="res\smoke.png" />
   </ItemGroup>
   <PropertyGroup Label="Globals">
     <ProjectGuid>{CB5ABFAA-EA69-E439-5A4D-3B9359916C71}</ProjectGuid>
@@ -182,8 +202,8 @@
       <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>
-      </Command>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     </PostBuildEvent>
     <CustomBuildStep>
       <Command>
@@ -244,8 +264,8 @@
       <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>
-      </Command>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     </PostBuildEvent>
     <CustomBuildStep>
       <Command>
@@ -308,8 +328,8 @@
       <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>
-      </Command>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     </PostBuildEvent>
     <CustomBuildStep>
       <Command>

+ 113 - 54
samples/particles/sample-particles.vcxproj.filters

@@ -1,55 +1,114 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="src">
-    </Filter>
-    <Filter Include="res">
-      <UniqueIdentifier>{439558fd-1ebd-4284-bc2b-ab333c4a13cf}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\ParticlesGame.h">
-      <Filter>src</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\ParticlesGame.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="res\editor.form">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\editor.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\editor.theme">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\fire.particle">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\fire.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\smoke.particle">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\smoke.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\explosion.particle">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\explosion.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="icon.png" />
-    <None Include="game.config" />
-    <None Include="bar-descriptor.xml" />
-    <None Include="res\arial.gpb">
-      <Filter>res</Filter>
-    </None>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="src">
+    </Filter>
+    <Filter Include="res">
+      <UniqueIdentifier>{439558fd-1ebd-4284-bc2b-ab333c4a13cf}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\shaders">
+      <UniqueIdentifier>{8a3f4b8e-5b0f-41ba-a52a-2aaa63496eb0}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\ParticlesGame.h">
+      <Filter>src</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\ParticlesGame.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="icon.png" />
+    <None Include="game.config" />
+    <None Include="bar-descriptor.xml" />
+    <None Include="res\arial.gpb">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\editor.form">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\editor.theme">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\explosion.particle">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\fire.particle">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\grid.material">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\smoke.particle">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\shaders\colored.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\colored.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning-none.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\editor.png">
+      <Filter>res</Filter>
+    </Image>
+    <Image Include="res\explosion.png">
+      <Filter>res</Filter>
+    </Image>
+    <Image Include="res\fire.png">
+      <Filter>res</Filter>
+    </Image>
+    <Image Include="res\smoke.png">
+      <Filter>res</Filter>
+    </Image>
+    <Image Include="res\logo_powered_white.png">
+      <Filter>res</Filter>
+    </Image>
+  </ItemGroup>
 </Project>

BIN
samples/racer/res/common/game.gpb


+ 0 - 142
samples/racer/res/common/game.lua

@@ -1,142 +0,0 @@
-
--- Move speed (m/s)
-MOVE_SPEED_NORMAL = 50
-MOVE_SPEED_FAST = 200
-
--- Move flags
-MOVE_FORWARD = 1
-MOVE_BACKWARD = 2
-MOVE_RIGHT = 3
-MOVE_LEFT = 4
-
-_useScriptCamera = false
-_forwardSpeed = 0
-_sideSpeed = 0
-_touch = Vector2.new()
-_delta = Vector2.new()
-_move = Vector2.new()
-_moveFlags = { false, false, false, false }
-_yaw = 0
-_pitch = 0
-_shiftDown = false
-
-function setScene(scene)
-    _scene = scene
-    _cameraNode = scene:getActiveCamera():getNode()
-end
-
-function toggleCamera()
-    _useScriptCamera = not _useScriptCamera
-end
-
-function initialize()
-end
-
-function finalize()
-end
-
-function update(elapsedTime)
-
-    if not _useScriptCamera then
-        return
-    end
-
-    local secs = elapsedTime / 1000.0
-
-    _move:set(0,0)
-
-    -- Forward motion
-    if _moveFlags[MOVE_FORWARD] then
-        _move:y(1)
-    elseif _moveFlags[MOVE_BACKWARD] then
-        _move:y(-1)
-    end
-
-    -- Strafing
-    if _moveFlags[MOVE_LEFT] then
-        _move:x(1)
-    elseif _moveFlags[MOVE_RIGHT] then
-        _move:x(-1)
-    end
-
-    if not _move:isZero() then
-        local speed = MOVE_SPEED_NORMAL
-        if _shiftDown then
-            speed = MOVE_SPEED_FAST
-        end
-
-        _move:normalize():scale(secs * speed)
-
-        moveForward(_move:y());
-        moveRight(-_move:x());
-    end
-end
-
-function render(elapsedTime)
-end
-
-function keyEvent(evt, key)
-    if evt == Keyboard.KEY_PRESS then
-        if key == Keyboard.KEY_W or key == Keyboard.KEY_CAPITAL_W then
-            _moveFlags[MOVE_FORWARD] = true
-        elseif key == Keyboard.KEY_S or key == Keyboard.KEY_CAPITAL_S then
-            _moveFlags[MOVE_BACKWARD] = true
-        elseif key == Keyboard.KEY_A or key == Keyboard.KEY_CAPITAL_A then
-            _moveFlags[MOVE_LEFT] = true
-        elseif key == Keyboard.KEY_D or key == Keyboard.KEY_CAPITAL_D then
-            _moveFlags[MOVE_RIGHT] = true
-        elseif key == Keyboard.KEY_C then
-            _useScriptCamera = not _useScriptCamera
-        elseif key == Keyboard.KEY_SHIFT then
-            _shiftDown = true
-        end
-    elseif evt == Keyboard.KEY_RELEASE then
-        if key == Keyboard.KEY_W or key == Keyboard.KEY_CAPITAL_W then
-            _moveFlags[MOVE_FORWARD] = false
-        elseif key == Keyboard.KEY_S or key == Keyboard.KEY_CAPITAL_S then
-            _moveFlags[MOVE_BACKWARD] = false
-        elseif key == Keyboard.KEY_A or key == Keyboard.KEY_CAPITAL_A then
-            _moveFlags[MOVE_LEFT] = false
-        elseif key == Keyboard.KEY_D or key == Keyboard.KEY_CAPITAL_D then
-            _moveFlags[MOVE_RIGHT] = false
-        elseif key == Keyboard.KEY_SHIFT then
-            _shiftDown = false
-        end
-    end
-
-    return false
-end
-
-function touchEvent(evt, x, y, contactIndex)
-
-    if not _useScriptCamera then
-        return
-    end
-
-    if evt == Touch.TOUCH_PRESS then
-        _touch:set(x, y)
-    elseif evt == Touch.TOUCH_RELEASE then
-    elseif evt == Touch.TOUCH_MOVE then
-        _delta:set(x - _touch:x(), y - _touch:y())
-        _touch:set(x, y)
-        _pitch = _pitch + -math.rad(_delta:y() * 0.5)
-        _yaw = _yaw + math.rad(_delta:x() * 0.5)
-        _cameraNode:setRotation(Quaternion.identity())
-        _cameraNode:rotateY(-_yaw)
-        _cameraNode:rotateX(_pitch)
-    end
-
-    return false
-end
-
-function moveForward(by)
-    local v = _cameraNode:getForwardVector()
-    v:normalize():scale(by)
-    _cameraNode:translate(v)
-end
-
-function moveRight(by)
-    local v = _cameraNode:getRightVector()
-    v:normalize():scale(by)
-    _cameraNode:translate(v)
-end

+ 0 - 517
samples/racer/res/common/game.material

@@ -1,517 +0,0 @@
-material textured
-{
-    // uniforms
-    u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-    u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
-
-    // samplers
-    sampler u_diffuseTexture
-    {
-        mipmap = true
-        wrapS = REPEAT
-        wrapT = REPEAT
-        minFilter = LINEAR_MIPMAP_LINEAR
-        magFilter = LINEAR
-    }
-
-    // render state
-    renderState
-    {
-        cullFace = true
-        depthTest = true
-    }
-
-    technique
-    {
-        pass 0
-        {
-            // shaders
-            vertexShader = res/shaders/textured.vert
-            fragmentShader = res/shaders/textured.frag
-            defines = DIRECTIONAL_LIGHT_COUNT 1
-        }
-    }
-}
-
-material texturedUnlit
-{
-    // uniforms
-    u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-
-    // samplers
-    sampler u_diffuseTexture
-    {
-        mipmap = true
-        wrapS = REPEAT
-        wrapT = REPEAT
-        minFilter = LINEAR_MIPMAP_LINEAR
-        magFilter = LINEAR
-    }
-
-    // render state
-    renderState
-    {
-        cullFace = true
-        depthTest = true
-    }
-
-    technique
-    {
-        pass 0
-        {
-            // shaders
-            vertexShader = res/shaders/textured.vert
-            fragmentShader = res/shaders/textured.frag
-        }
-    }
-}
-
-material textured-alphatest : texturedUnlit
-{
-    technique
-    {
-        pass 0
-        {
-            defines = TEXTURE_DISCARD_ALPHA
-        }
-    }
-}
-
-material colored
-{
-    // uniforms
-    u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-    u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
-
-    // render state
-    renderState
-    {
-        cullFace = true
-        depthTest = true
-    }
-
-    technique
-    {
-        pass 0
-        {
-            // shaders
-            vertexShader = res/shaders/colored.vert
-            fragmentShader = res/shaders/colored.frag
-            defines = DIRECTIONAL_LIGHT_COUNT 1
-        }
-    }
-}
-
-material coloredUnlit
-{
-    // uniforms
-    u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
-    
-    // render state
-    renderState
-    {
-        cullFace = true
-        depthTest = true
-    }
-
-    technique
-    {
-        pass 0
-        {
-            // shaders
-            vertexShader = res/shaders/colored.vert
-            fragmentShader = res/shaders/colored.frag
-        }
-    }
-}
-
-material car : textured
-{
-    sampler u_diffuseTexture
-    {
-        path = @car
-    }
-}
-
-material tile : texturedUnlit
-{
-}
-
-material tile1 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_1
-    }
-}
-
-material tile2 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_2
-    }
-}
-
-material tile3 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_3
-    }
-}
-
-material tile4 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_4
-    }
-}
-
-material tile5 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_5
-    }
-}
-
-material tile6 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_6
-    }
-}
-
-material tile7 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_7
-    }
-}
-
-material tile8 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_8
-    }
-}
-
-material tile9 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_9
-    }
-}
-
-material tile10 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_10
-    }
-}
-
-material tile11 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_11
-    }
-}
-
-material tile12 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_12
-    }
-}
-
-material tile13 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_13
-    }
-}
-
-material tile14 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_14
-    }
-}
-
-material tile15 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_15
-    }
-}
-
-material tile16 : tile
-{
-    sampler u_diffuseTexture
-    {
-        path = @panel_16
-    }
-}
-
-material track : texturedUnlit
-{
-    sampler u_diffuseTexture
-    {
-        path = @gravel_2
-    }
-
-    sampler u_lightmapTexture
-    {
-        path = @track_1
-        mipmap = true
-        wrapS = REPEAT
-        wrapT = REPEAT
-        minFilter = LINEAR_MIPMAP_LINEAR
-        magFilter = LINEAR
-    }
-
-    technique
-    {
-        pass 0
-        {
-            defines = LIGHTMAP;TEXCOORD1
-        }
-    }
-}
-
-material pillar : textured
-{
-    sampler u_diffuseTexture
-    {
-        path = @textures_8
-    }
-}
-
-material rail : texturedUnlit
-{
-    sampler u_diffuseTexture
-    {
-        path = @rails
-    }
-
-    renderState
-    {
-        cullFace = false
-        blend = true
-        srcBlend = SRC_ALPHA
-        dstBlend = ONE_MINUS_SRC_ALPHA
-    }
-}
-
-material tree : textured-alphatest
-{
-    renderState
-    {
-        cullFace = false
-    }
-}
-
-material treepine : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @tree_3
-    }
-}
-
-material treelightgreen : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @tree_7
-    }
-}
-
-material treebig : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @tree_4
-    }
-}
-
-material treebrown : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @tree_2
-    }
-}
-
-material treetall : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @tree
-    }
-}
-
-material treetallpine : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @tree_5
-    }
-}
-
-material treewhitepine : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @tree_6
-    }
-}
-
-material treedetailed : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @d_tree
-    }
-}
-
-material shrublightgreen : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @shrub_1
-    }
-}
-
-material shrubdark : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @shrub_2
-    }
-}
-
-material shruborange : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @shrub_3
-    }
-}
-
-material grassgreen : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @grassbunch_1
-    }
-}
-
-material grassred : tree
-{
-    sampler u_diffuseTexture
-    {
-        path = @grassbunch_2
-    }
-}
-
-material trunk : textured
-{
-    sampler u_diffuseTexture
-    {
-        path = @trunk_1
-    }
-}
-
-material trunk2 : textured
-{
-    sampler u_diffuseTexture
-    {
-        path = @trunk_2
-    }
-}
-
-material chain : textured-alphatest
-{
-    sampler u_diffuseTexture
-    {
-        path = @chain_fence_1
-    }
-
-    renderState
-    {
-        cullFace = false
-    }
-}
-
-material wall : texturedUnlit
-{
-    sampler u_diffuseTexture
-    {
-        path = @design_11
-    }
-}
-
-material lightpost : colored
-{
-    u_diffuseColor = 0.1, 0.1, 0.1, 1.0
-}
-
-material lightbulb : coloredUnlit
-{
-    u_diffuseColor = 1, 1, 0.815, 1
-}
-
-material water : colored
-{
-    u_diffuseColor = 0.75, 0.9, 0.95, 0.85
-
-    renderState
-    {
-        blend = true
-        srcBlend = SRC_ALPHA
-        dstBlend = ONE_MINUS_SRC_ALPHA
-    }
-}
-
-material mountains : texturedUnlit
-{
-    sampler u_diffuseTexture
-    {
-        path = @panorama_2
-    }
-
-    renderState
-    {
-        cullFace = false
-        depthWrite = false
-        blend = true
-        srcBlend = SRC_ALPHA
-        dstBlend = ONE_MINUS_SRC_ALPHA
-    }
-}
-
-material skydome : texturedUnlit
-{
-    sampler u_diffuseTexture
-    {
-        path = @panorama_3
-    }
-
-    renderState
-    {
-        cullFace = false
-    }
-}

+ 0 - 180
samples/racer/res/common/game.physics

@@ -1,180 +0,0 @@
-collisionObject static_box
-{
-    type = RIGID_BODY
-    shape = BOX
-    mass = 0.0
-}
-
-collisionObject static_mesh
-{
-    type = RIGID_BODY
-    shape = MESH
-    mass = 0.0
-}
-
-collisionObject car
-{
-    type = VEHICLE
-
-    shape = BOX
-    mass = 800.0
-    friction = 0.5
-    restitution = 0.01
-    linearDamping = 0.025
-    angularDamping = 0.6
-
-    steeringGain = 0.4
-    brakingForce = 350.0
-    drivingForce = 2000.0
-
-    steerdownSpeed = 87
-    steerdownGain = 0.22
-    brakedownStart = 100
-    brakedownFull = 170
-    drivedownStart = 105
-    drivedownFull = 180
-    boostSpeed = 74
-    boostGain = 2.6
-    downforce = 4.5
-}
-
-collisionObject carWheel
-{
-    type = VEHICLE_WHEEL
-
-    shape = MESH
-    mass = 1.0
-    friction = 0.5
-    restitution = 0.01
-    linearDamping = 0.025
-    angularDamping = 0.16
-
-    wheelDirection = 0, -1, 0
-    wheelAxle = -1, 0, 0
-
-    strutRestLength = 0.6
-    strutStiffness = 25.0
-    strutDampingCompression = 5.1
-    strutDampingRelaxation = 2.3
-    frictionBreakout = 1000.0
-    wheelRadius = 0.5
-    rollInfluence = 0.1
-    strutConnectionOffset = 0.0, 0.0, 1.4
-}
-
-collisionObject carWheelFrontLeft : carWheel
-{
-    steerable = true
-}
-
-collisionObject carWheelFrontRight : carWheel
-{
-    steerable = true
-}
-
-collisionObject carWheelBackLeft : carWheel
-{
-    steerable = false
-}
-
-collisionObject carWheelBackRight : carWheel
-{
-    steerable = false
-}
-
-collisionObject heightfield
-{
-    type = RIGID_BODY
-    shape = HEIGHTFIELD
-    image = res/common/heightmap_combinedmap_0.png
-    kinematic = true
-}
-
-collisionObject ghost_box
-{
-	type = GHOST_OBJECT
-	shape = BOX
-	extents = 1.0, 1.0, 1.0
-}
-
-collisionObject guard_rail
-{
-    type = RIGID_BODY
-    shape = MESH
-    mass = 0.0
-    restitution = 0.01
-}
-
-collisionObject roadway
-{
-    type = RIGID_BODY
-    shape = MESH
-    mass = 0.0
-    restitution = 0.01
-}
-
-collisionObject treetall
-{
-    type = RIGID_BODY
-    shape = CAPSULE
-    radius = 1.0
-    height = 24
-    center = 0, 10, 0
-    centerAbsolute = true
-    mass = 0.0
-}
-
-collisionObject treelightgreen
-{
-    type = RIGID_BODY
-    shape = CAPSULE
-    radius = 0.75
-    height = 24
-    center = 0, 10, 0
-    centerAbsolute = true
-    mass = 0.0
-}
-
-collisionObject treebrown
-{
-    type = RIGID_BODY
-    shape = CAPSULE
-    radius = 3.0
-    height = 24
-    center = 0, 10, 0
-    centerAbsolute = true
-    mass = 0.0
-}
-
-collisionObject treebig
-{
-    type = RIGID_BODY
-    shape = CAPSULE
-    radius = 5
-    height = 30
-    center = 0, 10, 0
-    centerAbsolute = true
-    mass = 0.0
-}
-
-collisionObject treepine
-{
-    type = RIGID_BODY
-    shape = CAPSULE
-    radius = 5
-    height = 30
-    center = 0, 8, 0
-    centerAbsolute = true
-    mass = 0.0
-}
-
-collisionObject treetallpine
-{
-    type = RIGID_BODY
-    shape = CAPSULE
-    radius = 1.5
-    height = 30
-    center = 0, 12, 0
-    centerAbsolute = true
-    mass = 0.0
-}

+ 0 - 392
samples/racer/res/common/game.scene

@@ -1,392 +0,0 @@
-scene main
-{
-    path = res/common/game.gpb
-
-    activeCamera = camera1
-
-    node carbody
-    {
-        url = car_top
-        material = res/common/game.material#car
-        collisionObject = res/common/game.physics#car
-    }
-
-    node wheelFrontLeft
-    {
-        url = Left_top
-        material = res/common/game.material#car
-        collisionObject = res/common/game.physics#carWheelFrontLeft
-    }
-
-    node wheelFrontRight
-    {
-        url = Right_top
-        material = res/common/game.material#car
-        collisionObject = res/common/game.physics#carWheelFrontRight
-    }
-
-    node wheelBackLeft
-    {
-        url = Left_bottom
-        material = res/common/game.material#car
-        collisionObject = res/common/game.physics#carWheelBackLeft
-    }
-
-    node wheelBackRight
-    {
-        url = Right_bottom
-        material = res/common/game.material#car
-        collisionObject = res/common/game.physics#carWheelBackRight
-    }
-
-    node mapplane_1
-    {
-        material = res/common/game.material#tile1
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_2
-    {
-        material = res/common/game.material#tile2
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_3
-    {
-        material = res/common/game.material#tile3
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_4
-    {
-        material = res/common/game.material#tile4
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_5
-    {
-        material = res/common/game.material#tile5
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_6
-    {
-        material = res/common/game.material#tile6
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_7
-    {
-        material = res/common/game.material#tile7
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_8
-    {
-        material = res/common/game.material#tile8
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_9
-    {
-        material = res/common/game.material#tile9
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_10
-    {
-        material = res/common/game.material#tile10
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_11
-    {
-        material = res/common/game.material#tile11
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_12
-    {
-        material = res/common/game.material#tile12
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_13
-    {
-        material = res/common/game.material#tile13
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_14
-    {
-        material = res/common/game.material#tile14
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_15
-    {
-        material = res/common/game.material#tile15
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node mapplane_16
-    {
-        material = res/common/game.material#tile16
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node overhang_1
-    {
-        material = res/common/game.material#tile3
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node overhang_2
-    {
-        material = res/common/game.material#tile3
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node overhang_3
-    {
-        material = res/common/game.material#tile11
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node overhang_4
-    {
-        material = res/common/game.material#tile12
-        collisionObject = res/common/game.physics#static_mesh
-    }
-
-    node track_0
-    {
-        material = res/common/game.material#track
-        collisionObject = res/common/game.physics#roadway
-    }
-
-    node pillar
-    {
-        url = pillar_*
-        material = res/common/game.material#pillar
-    }
-
-    node rail_1
-    {
-        material = res/common/game.material#rail
-        collisionObject = res/common/game.physics#guard_rail
-        tags
-        {
-            transparent
-        }
-    }
-
-    node rail_2
-    {
-        material = res/common/game.material#rail
-        collisionObject = res/common/game.physics#guard_rail
-        tags
-        {
-            transparent
-        }
-    }
-
-    node treepine
-    {
-        url = treepine_*
-        material = res/common/game.material#treepine
-        collisionObject = res/common/game.physics#treepine
-        tags
-        {
-            transparent
-        }
-    }
-
-    node treelightgreen
-    {
-        url = treelightgreen_*
-        material[0] = res/common/game.material#treelightgreen
-        material[1] = res/common/game.material#trunk
-        collisionObject = res/common/game.physics#treelightgreen
-        tags
-        {
-            transparent
-        }
-    }
-
-    node treebig
-    {
-        url = treebig_*
-        material[0] = res/common/game.material#treebig
-        material[1] = res/common/game.material#trunk
-        collisionObject = res/common/game.physics#treebig
-        tags
-        {
-            transparent
-        }
-    }
-
-    node treebrown
-    {
-        url = treebrown_*
-        material[1] = res/common/game.material#treebrown
-        material[0] = res/common/game.material#trunk
-        collisionObject = res/common/game.physics#treebrown
-        tags
-        {
-            transparent
-        }
-    }
-
-    node treetall
-    {
-        url = treetall_*
-        material[0] = res/common/game.material#treetall
-        material[1] = res/common/game.material#trunk
-        collisionObject = res/common/game.physics#treetall
-        tags
-        {
-            transparent
-        }
-    }
-
-    node treetallpine
-    {
-        url = treetallpine*
-        material = res/common/game.material#treetallpine
-        collisionObject = res/common/game.physics#treetallpine
-        tags
-        {
-            transparent
-        }
-    }
-
-    node treewhitepine
-    {
-        url = treewhitepine*
-        material = res/common/game.material#treewhitepine
-        collisionObject = res/common/game.physics#treepine
-        tags
-        {
-            transparent
-        }
-    }
-
-    node treedetailed
-    {
-        url = treedetailed*
-        material[0] = res/common/game.material#trunk2
-        material[1] = res/common/game.material#treedetailed
-        collisionObject = res/common/game.physics#static_mesh
-        tags
-        {
-            transparent
-        }
-    }
-
-    node shrublightgreen
-    {
-        url = shrublightgreen_*
-        material = res/common/game.material#shrublightgreen
-        tags
-        {
-            transparent
-        }
-    }
-
-    node shrubdark
-    {
-        url = shrubdark_*
-        material = res/common/game.material#shrubdark
-        tags
-        {
-            transparent
-        }
-    }
-
-    node shruborange
-    {
-        url = shruborange_*
-        material = res/common/game.material#shruborange
-        tags
-        {
-            transparent
-        }
-    }
-
-    node shrubyellow
-    {
-        url = shrubyellow_*
-        material = res/common/game.material#shruborange
-        tags
-        {
-            transparent
-        }
-    }
-
-    node grassdrygreen
-    {
-        url = grassdrygreen*
-        material = res/common/game.material#grassgreen
-        tags
-        {
-            transparent
-        }
-    }
-
-    node grassdryred
-    {
-        url = grassdryred*
-        material = res/common/game.material#grassred
-        tags
-        {
-            transparent
-        }
-    }
-
-    node chainfence_0
-    {
-        material[0] = res/common/game.material#chain
-        material[1] = res/common/game.material#wall
-        collisionObject = res/common/game.physics#static_mesh
-        tags
-        {
-            transparent
-        }
-    }
-
-    node light
-    {
-        url = light_*
-        material[0] = res/common/game.material#lightpost
-        material[1] = res/common/game.material#lightbulb
-    }
-
-    node water
-    {
-        material = res/common/game.material#water
-        tags
-        {
-            transparent
-        }
-    }
-
-    node mountains_0
-    {
-        material = res/common/game.material#mountains
-        tags
-        {
-            transparent
-        }
-    }
-
-    node skydome_0
-    {
-        material = res/common/game.material#skydome
-    }
-
-    physics
-    {
-        gravity = 0.0, -9.8, 0.0
-    }
-}

BIN
samples/racer/res/common/heightmap_combinedmap_0.png


+ 39 - 11
samples/racer/sample-racer.vcxproj

@@ -158,8 +158,8 @@
       <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>
-      </Command>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     </PostBuildEvent>
     <CustomBuildStep>
       <Command>copy /Y "$(ProjectDir)game.dxt.config" "$(ProjectDir)game.config"</Command>
@@ -214,8 +214,8 @@
       <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>
-      </Command>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     </PostBuildEvent>
     <CustomBuildStep>
       <Command>copy /Y "$(ProjectDir)game.dxt.config" "$(ProjectDir)game.config"</Command>
@@ -272,8 +272,8 @@
       <AdditionalLibraryDirectories>../../external-deps/lua/lib/windows/x86;../../external-deps/bullet/lib/windows/x86;../../external-deps/openal/lib/windows/x86;../../external-deps/oggvorbis/lib/windows/x86;../../external-deps/glew/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86;../../gameplay/windows/x86/$(Configuration)</AdditionalLibraryDirectories>
     </Link>
     <PostBuildEvent>
-      <Command>
-      </Command>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     </PostBuildEvent>
     <CustomBuildStep>
       <Command>copy /Y "$(ProjectDir)game.dxt.config" "$(ProjectDir)game.config"</Command>
@@ -319,15 +319,35 @@
     <None Include="game.png.config" />
     <None Include="game.pvr.config" />
     <None Include="icon.png" />
-    <None Include="res\common\game.lua" />
-    <None Include="res\common\game.material" />
-    <None Include="res\common\game.physics" />
-    <None Include="res\common\game.scene" />
+    <None Include="res\common\arial.gpb" />
+    <None Include="res\common\background.ogg" />
+    <None Include="res\common\engine.ogg" />
     <None Include="res\common\gamepad.form" />
     <None Include="res\common\gamepad.theme" />
     <None Include="res\common\menu.form" />
-    <None Include="res\common\menu.png" />
     <None Include="res\common\menu.theme" />
+    <None Include="res\common\overlay.form" />
+    <None Include="res\common\racer.gpb" />
+    <None Include="res\common\racer.lua" />
+    <None Include="res\common\racer.material" />
+    <None Include="res\common\racer.physics" />
+    <None Include="res\common\racer.scene" />
+    <None Include="res\shaders\colored.frag" />
+    <None Include="res\shaders\colored.vert" />
+    <None Include="res\shaders\font.frag" />
+    <None Include="res\shaders\font.vert" />
+    <None Include="res\shaders\form.frag" />
+    <None Include="res\shaders\form.vert" />
+    <None Include="res\shaders\lighting.frag" />
+    <None Include="res\shaders\lighting.vert" />
+    <None Include="res\shaders\skinning-none.vert" />
+    <None Include="res\shaders\skinning.vert" />
+    <None Include="res\shaders\sprite.frag" />
+    <None Include="res\shaders\sprite.vert" />
+    <None Include="res\shaders\terrain.frag" />
+    <None Include="res\shaders\terrain.vert" />
+    <None Include="res\shaders\textured.frag" />
+    <None Include="res\shaders\textured.vert" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="src\RacerGame.cpp" />
@@ -335,6 +355,14 @@
   <ItemGroup>
     <ClInclude Include="src\RacerGame.h" />
   </ItemGroup>
+  <ItemGroup>
+    <Media Include="res\common\braking.wav" />
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\common\heightmap_combinedmap_0.png" />
+    <Image Include="res\common\menu.png" />
+    <Image Include="res\logo_powered_white.png" />
+  </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>

+ 146 - 64
samples/racer/sample-racer.vcxproj.filters

@@ -1,65 +1,147 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="res">
-    </Filter>
-    <Filter Include="src">
-    </Filter>
-    <Filter Include="config">
-      <UniqueIdentifier>{e9cd44da-992f-4483-8fec-0eb7f7d982d6}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="icon.png" />
-    <None Include="bar-descriptor.xml" />
-    <None Include="res\common\game.physics">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\common\game.scene">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\common\gamepad.form">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\common\gamepad.theme">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\common\game.lua">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\common\game.material">
-      <Filter>res</Filter>
-    </None>
-    <None Include="game.atc.config">
-      <Filter>config</Filter>
-    </None>
-    <None Include="game.dxt.config">
-      <Filter>config</Filter>
-    </None>
-    <None Include="game.png.config">
-      <Filter>config</Filter>
-    </None>
-    <None Include="game.pvr.config">
-      <Filter>config</Filter>
-    </None>
-    <None Include="res\common\menu.form">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\common\menu.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\common\menu.theme">
-      <Filter>res</Filter>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\RacerGame.h">
-      <Filter>src</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\RacerGame.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="res">
+    </Filter>
+    <Filter Include="src">
+    </Filter>
+    <Filter Include="config">
+      <UniqueIdentifier>{e9cd44da-992f-4483-8fec-0eb7f7d982d6}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\common">
+      <UniqueIdentifier>{175385aa-76bd-4390-961c-c7634597f147}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\shaders">
+      <UniqueIdentifier>{d2844a62-7159-4fa4-8401-95732ac8307a}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="icon.png" />
+    <None Include="bar-descriptor.xml" />
+    <None Include="game.atc.config">
+      <Filter>config</Filter>
+    </None>
+    <None Include="game.dxt.config">
+      <Filter>config</Filter>
+    </None>
+    <None Include="game.png.config">
+      <Filter>config</Filter>
+    </None>
+    <None Include="game.pvr.config">
+      <Filter>config</Filter>
+    </None>
+    <None Include="res\common\arial.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\background.ogg">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\engine.ogg">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\gamepad.form">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\gamepad.theme">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\menu.form">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\menu.theme">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\overlay.form">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\racer.gpb">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\racer.lua">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\racer.material">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\racer.physics">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\common\racer.scene">
+      <Filter>res\common</Filter>
+    </None>
+    <None Include="res\shaders\colored.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\colored.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning-none.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\RacerGame.h">
+      <Filter>src</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\RacerGame.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <Media Include="res\common\braking.wav">
+      <Filter>res\common</Filter>
+    </Media>
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\common\heightmap_combinedmap_0.png">
+      <Filter>res\common</Filter>
+    </Image>
+    <Image Include="res\common\menu.png">
+      <Filter>res\common</Filter>
+    </Image>
+    <Image Include="res\logo_powered_white.png">
+      <Filter>res</Filter>
+    </Image>
+  </ItemGroup>
 </Project>

+ 649 - 650
samples/racer/src/RacerGame.cpp

@@ -1,650 +1,649 @@
-#include "RacerGame.h"
-
-// Render queue indexes (in order of drawing).
-enum RenderQueue
-{
-    QUEUE_OPAQUE = 0,
-    QUEUE_TRANSPARENT,
-    QUEUE_COUNT
-};
-
-bool __viewFrustumCulling = true;
-bool __flythruCamera = false;
-bool __drawDebug = false;
-bool __useAccelerometer = false;
-bool __showMenu = false;
-bool __menuFlag = false;
-
-// Declare our game instance
-RacerGame game;
-
-// Input bit-flags (powers of 2)
-#define ACCELERATOR (1 << 0)
-#define BRAKE (1 << 1)
-#define REVERSE (1 << 2)
-#define UPRIGHT (1 << 3)
-#define STEER_LEFT (1 << 4)
-#define STEER_RIGHT (1 << 5)
-#define ACCELERATOR_MOUSE (1 << 6)
-#define BRAKE_MOUSE (1 << 7)
-
-#define STEERING_RESPONSE (7.0f)
-
-RacerGame::RacerGame()
-    : _scene(NULL), _keyFlags(0), _mouseFlags(0), _steering(0), _gamepad(NULL), _carVehicle(NULL), _upsetTimer(0),
-      _backgroundSound(NULL), _engineSound(NULL), _brakingSound(NULL)
-{
-}
-
-void RacerGame::initialize()
-{
-    setMultiTouch(true);
-
-    _font = Font::create("res/common/arial.gpb");
-
-    // Display the gameplay splash screen during loading, for at least 1 second.
-    displayScreen(this, &RacerGame::drawSplash, NULL, 1000L);
-
-    // Create the menu and start listening to its controls.
-    _menu = Form::create("res/common/menu.form");
-    _menu->setEnabled(false);
-    static_cast<Button*>(_menu->getControl("newGameButton"))->addListener(this, Listener::CLICK);
-    static_cast<Button*>(_menu->getControl("quitGameButton"))->addListener(this, Listener::CLICK);
-    static_cast<RadioButton*>(_menu->getControl("useGamepad"))->addListener(this, Listener::VALUE_CHANGED);
-    static_cast<RadioButton*>(_menu->getControl("useTilt"))->addListener(this, Listener::VALUE_CHANGED);
-    if (!canExit())
-    {
-        // Prevent a programmatic exit on platforms that don't allow it.
-        _menu->removeControl("quitGameButton");
-    }
-
-    // Create a pause button to display the menu
-    _overlay = Form::create("res/common/overlay.form");
-    static_cast<Button*>(_overlay->getControl("menuButton"))->addListener(this, Listener::CLICK);
-
-    // Load the scene
-    _scene = Scene::load("res/common/game.scene");
-
-    // Set the aspect ratio for the scene's camera to match the current resolution
-    _scene->getActiveCamera()->setAspectRatio(getAspectRatio());
-
-    // Initialize scene
-    _scene->visit(this, &RacerGame::initializeScene);
-
-    // Load and initialize game script
-    getScriptController()->loadScript("res/common/game.lua");
-    getScriptController()->executeFunction<void>("setScene", "<Scene>", _scene);
-
-    Node* carNode = _scene->findNode("carbody");
-    if (carNode && carNode->getCollisionObject()->getType() == PhysicsCollisionObject::VEHICLE)
-    {
-        _carVehicle = static_cast<PhysicsVehicle*>(carNode->getCollisionObject());
-        resetToStart();
-    }
-
-    // Create audio tracks
-    _backgroundSound = AudioSource::create("res/common/background_track.ogg");
-    if (_backgroundSound)
-    {
-        _backgroundSound->setLooped(true);
-        _backgroundSound->play();
-        _backgroundSound->setGain(0.3f);
-    }
-
-    _engineSound = AudioSource::create("res/common/engine_loop.ogg");
-    if (_engineSound)
-    {
-        _engineSound->setLooped(true);
-        _engineSound->play();
-        _engineSound->setGain(0.7f);
-    }
-
-    _brakingSound = AudioSource::create("res/common/braking.wav");
-    _brakingSound->setLooped(false);
-    _brakingSound->setGain(0.5f);
-
-    _gamepad = getGamepad(0);
-}
-
-bool RacerGame::initializeScene(Node* node)
-{
-    static Node* lightNode = _scene->findNode("directionalLight1");
-
-    Model* model = node->getModel();
-    if (model)
-    {
-        Material* material = model->getMaterial();
-        if (material && material->getTechnique()->getPassByIndex(0)->getEffect()->getUniform("u_directionalLightDirection[0]"))
-        {
-            material->getParameter("u_ambientColor")->setValue(_scene->getAmbientColor());
-            material->getParameter("u_directionalLightColor[0]")->setValue(lightNode->getLight()->getColor());
-            material->getParameter("u_directionalLightDirection[0]")->setValue(lightNode->getForwardVectorView());
-        }
-    }
-
-    return true;
-}
-
-void RacerGame::finalize()
-{
-    SAFE_RELEASE(_backgroundSound);
-    SAFE_RELEASE(_engineSound);
-    SAFE_RELEASE(_brakingSound);
-    SAFE_RELEASE(_scene);
-    SAFE_RELEASE(_font);
-    SAFE_RELEASE(_menu);
-    SAFE_RELEASE(_overlay);
-}
-
-void RacerGame::update(float elapsedTime)
-{   
-    // The "Start" button is mapped to MENU2.
-    if (!__showMenu && !__menuFlag && _gamepad->isButtonDown(Gamepad::BUTTON_MENU2))
-    {
-        __menuFlag = true;
-        menuEvent();
-    }
-
-    if (__menuFlag && !_gamepad->isButtonDown(Gamepad::BUTTON_MENU2))
-    {
-        __menuFlag = false;
-    }
-
-    if (__showMenu && !__menuFlag && _gamepad->isButtonDown(Gamepad::BUTTON_MENU2))
-    {
-        __menuFlag = true;
-        menuEvent();
-    }
-
-    Node* cameraNode;
-    if (_scene->getActiveCamera() && (cameraNode = _scene->getActiveCamera()->getNode()))
-    {
-        float dt = elapsedTime / 1000.0f;
-        float braking = 0;
-        float driving = 0;
-
-        if (_carVehicle)
-        {
-            float v = _carVehicle->getSpeedKph();
-            bool isVirt = _gamepad->isVirtual();
-
-            if (!__flythruCamera)
-            {
-                // Vehicle Control (Normal Mode)
-                Vector2 direction;
-                if (_gamepad->getJoystickCount())
-                {
-                    _gamepad->getJoystickValues(0, &direction);
-                }
-                
-                if (_gamepad->isButtonDown(Gamepad::BUTTON_LEFT))
-                {
-                    direction.set(-1.0f, 0.0f);
-                }
-                else if (_gamepad->isButtonDown(Gamepad::BUTTON_RIGHT))
-                {
-                    direction.set(1.0f, 0.0f);
-                }
-
-                // Allow keys to control steering
-                if (_keyFlags & STEER_LEFT)
-                {
-                    _steering += STEERING_RESPONSE * dt;
-                }
-                else if (_keyFlags & STEER_RIGHT)
-                {
-                    _steering -= STEERING_RESPONSE * dt;
-                }
-                else if (__useAccelerometer)
-                {
-                    float pitch, roll;
-                    Game::getAccelerometerValues(&pitch, &roll);
-
-                    _steering = -0.16 * roll;
-                }
-                else
-                {
-                    _steering = -direction.x;
-                }
-                _steering = max(-1.0f, min(_steering, 1.0f));
-
-                if (_gamepad->getTriggerCount() > 1)
-                {
-                    driving = _gamepad->getTriggerValue(1);
-                    _engineSound->setGain(0.8f + (driving * 0.2f));
-                }
-                
-                if (!driving && (_keyFlags & ACCELERATOR || _keyFlags & ACCELERATOR_MOUSE || _gamepad->isButtonDown(Gamepad::BUTTON_A)))
-                {
-                    driving = 1;
-                    _engineSound->setGain(1.0f);
-                }
-                else
-                {
-                    _engineSound->setGain(0.8f);
-                }
-                float s = _carVehicle->getSpeedSmoothKph() / 100.0f;
-                _engineSound->setPitch(max(0.2f, min(s, 2.0f)));
-
-                // Reverse only below a reasonable speed
-                bool isReverseCommanded = (_keyFlags & REVERSE) ||
-                                          (!isVirt && _gamepad->isButtonDown(Gamepad::BUTTON_X)) ||
-                                          (direction.y < -0.1 && _gamepad->isButtonDown(Gamepad::BUTTON_A));
-                if (isReverseCommanded && v < 30.0f)
-                {
-                    driving = -0.6f;
-                }
-
-                if ( (_keyFlags & BRAKE) || (_keyFlags & BRAKE_MOUSE) || _gamepad->isButtonDown(Gamepad::BUTTON_B))
-                {
-                    braking = 1;
-                    if (_brakingSound && (_brakingSound->getState() != AudioSource::PLAYING) && (v > 30.0f))
-                        _brakingSound->play();
-                }
-                else
-                {
-                    _brakingSound->stop();
-                }
-
-                // Make the camera follow the car
-                Node* carNode = _carVehicle->getNode();
-                Vector3 carPosition(carNode->getTranslation());
-                Vector3 commandedPosition(carPosition + Vector3::unitY()*4.0f - carNode->getBackVector()*10.0f);
-                cameraNode->translateSmooth(commandedPosition, dt, 0.2f);
-                Matrix m;
-                Matrix::createLookAt(cameraNode->getTranslation(), carPosition, Vector3::unitY(), &m);
-                m.transpose();
-                Quaternion q;
-                m.getRotation(&q);
-                cameraNode->setRotation(q);
-            }
-
-            // Slightly different steering gain based on gamepad type.
-            _carVehicle->setSteerdown( (isVirt ? 94.0f : 87.0f), (isVirt ? 0.15f : 0.22f) );
-            _carVehicle->update(elapsedTime, _steering, braking, driving);
-
-            // Auto-detect an upset car
-            if (fabs(v) < 10.0f && isUpset())
-            {
-                _upsetTimer += dt;
-            }
-            else
-            {
-                _upsetTimer = 0;
-            }
-
-            if (_upsetTimer > 3.0f)
-            {
-                _upsetTimer = 0;
-                resetInPlace();
-            }
-            else if ( (_keyFlags & UPRIGHT) ||
-                 (!isVirt && _gamepad->isButtonDown(Gamepad::BUTTON_Y)) ||
-                 (_carVehicle->getNode()->getTranslationY() < -300.0f) )
-            {
-                resetToStart();
-            }
-        }
-    }
-}
-
-bool RacerGame::isUpset() const
-{
-    GP_ASSERT(_carVehicle);
-
-    return _carVehicle->getNode()->getUpVector().y < 0.4f;
-}
-
-void RacerGame::render(float elapsedTime)
-{
-    // Clear the color and depth buffers
-    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
-
-    // Visit all the nodes in the scene to build our render queues
-    for (unsigned int i = 0; i < QUEUE_COUNT; ++i)
-        _renderQueues[i].clear();
-    _scene->visit(this, &RacerGame::buildRenderQueues);
-
-    // Draw the scene from our render queues
-    drawScene();
-
-    if (__drawDebug)
-    {
-        Game::getInstance()->getPhysicsController()->drawDebug(_scene->getActiveCamera()->getViewProjectionMatrix());
-    }
-
-    // Draw the gamepad
-    if (_gamepad && _gamepad->isVirtual())
-    	_gamepad->draw();
-
-    // Draw the menu
-    if (__showMenu)
-    {
-        _menu->draw();
-    }
-    
-    _overlay->draw();
-        
-    // Draw FPS and speed
-    int carSpeed = _carVehicle ? (int)_carVehicle->getSpeedKph() : 0;
-    _font->start();
-    char fps[32];
-    sprintf(fps, "%d", getFrameRate());
-    _font->drawText(fps, 5, 5, Vector4(0,0.5f,1,1), 20);
-    char kph[32];
-    sprintf(kph, "%d [km/h]", carSpeed);
-    _font->drawText(kph, getWidth() / 2 - 50, getHeight() - 60, Vector4(1,1,1,1), 40);
-    _font->finish();
-}
-
-bool RacerGame::buildRenderQueues(Node* node)
-{
-    Model* model = node->getModel(); 
-    if (model)
-    {
-        // Perform view-frustum culling for this node
-        if (__viewFrustumCulling && !node->getBoundingSphere().intersects(_scene->getActiveCamera()->getFrustum()))
-            return true;
-
-        // Determine which render queue to insert the node into
-        std::vector<Node*>* queue;
-        if (node->hasTag("transparent"))
-            queue = &_renderQueues[QUEUE_TRANSPARENT];
-        else
-            queue = &_renderQueues[QUEUE_OPAQUE];
-
-        queue->push_back(node);
-    }
-    return true;
-}
-
-void RacerGame::drawScene()
-{
-    // Iterate through each render queue and draw the nodes in them
-    for (unsigned int i = 0; i < QUEUE_COUNT; ++i)
-    {
-        std::vector<Node*>& queue = _renderQueues[i];
-
-        for (size_t j = 0, ncount = queue.size(); j < ncount; ++j)
-        {
-            queue[j]->getModel()->draw();
-        }
-    }
-}
-
-void RacerGame::drawSplash(void* param)
-{
-    clear(CLEAR_COLOR_DEPTH, Vector4(0, 0, 0, 1), 1.0f, 0);
-
-    SpriteBatch* batch = SpriteBatch::create("res/logo_powered_white.png");
-    batch->start();
-    batch->draw(this->getWidth() * 0.5f, this->getHeight() * 0.5f, 0.0f, 512.0f, 512.0f, 0.0f, 1.0f, 1.0f, 0.0f, Vector4::one(), true);
-    batch->finish();
-    SAFE_DELETE(batch);
-}
-
-void RacerGame::keyEvent(Keyboard::KeyEvent evt, int key)
-{
-    if (evt == Keyboard::KEY_PRESS)
-    {
-        switch (key)
-        {
-        case Keyboard::KEY_ESCAPE:
-            menuEvent();
-            break;
-        case Keyboard::KEY_A:
-        case Keyboard::KEY_CAPITAL_A:
-        case Keyboard::KEY_LEFT_ARROW:
-            _keyFlags |= STEER_LEFT;
-            break;
-        case Keyboard::KEY_D:
-        case Keyboard::KEY_CAPITAL_D:
-        case Keyboard::KEY_RIGHT_ARROW:
-            _keyFlags |= STEER_RIGHT;
-            break;
-        case Keyboard::KEY_W:
-        case Keyboard::KEY_CAPITAL_W:
-        case Keyboard::KEY_UP_ARROW:
-            _keyFlags |= ACCELERATOR;
-            break;
-        case Keyboard::KEY_S:
-        case Keyboard::KEY_CAPITAL_S:
-        case Keyboard::KEY_DOWN_ARROW:
-            _keyFlags |= REVERSE;
-            break;
-        case Keyboard::KEY_SPACE:
-            _keyFlags |= BRAKE;
-            break;
-        case Keyboard::KEY_Y:
-        case Keyboard::KEY_CAPITAL_Y:
-            _keyFlags |= UPRIGHT;
-            break;
-        case Keyboard::KEY_V:
-            __viewFrustumCulling = !__viewFrustumCulling;
-            break;
-        case Keyboard::KEY_F:
-            __flythruCamera = !__flythruCamera;
-            getScriptController()->executeFunction<void>("toggleCamera");
-            break;
-        case Keyboard::KEY_B:
-            __drawDebug = !__drawDebug;
-            break;
-        case Keyboard::KEY_J:
-            __useAccelerometer = !__useAccelerometer;
-            break;
-        }
-    }
-    else if (evt == Keyboard::KEY_RELEASE)
-    {
-        switch (key)
-        {
-        case Keyboard::KEY_A:
-        case Keyboard::KEY_CAPITAL_A:
-        case Keyboard::KEY_LEFT_ARROW:
-            _keyFlags &= ~STEER_LEFT;
-            break;
-        case Keyboard::KEY_D:
-        case Keyboard::KEY_CAPITAL_D:
-        case Keyboard::KEY_RIGHT_ARROW:
-            _keyFlags &= ~STEER_RIGHT;
-            break;
-        case Keyboard::KEY_W:
-        case Keyboard::KEY_CAPITAL_W:
-        case Keyboard::KEY_UP_ARROW:
-            _keyFlags &= ~ACCELERATOR;
-            break;
-        case Keyboard::KEY_S:
-        case Keyboard::KEY_CAPITAL_S:
-        case Keyboard::KEY_DOWN_ARROW:
-            _keyFlags &= ~REVERSE;
-            break;
-        case Keyboard::KEY_SPACE:
-            _keyFlags &= ~BRAKE;
-            break;
-        case Keyboard::KEY_Y:
-        case Keyboard::KEY_CAPITAL_Y:
-            _keyFlags &= ~UPRIGHT;
-            break;
-        }
-    }
-}
-
-void RacerGame::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
-{
-    switch (evt)
-    {
-    case Touch::TOUCH_PRESS:
-        break;
-    case Touch::TOUCH_RELEASE:
-        break;
-    case Touch::TOUCH_MOVE:
-        break;
-    };
-}
-
-bool RacerGame::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
-{
-    bool consumed = false;
-
-    switch (evt)
-    {
-    case Mouse::MOUSE_PRESS_LEFT_BUTTON:
-        _keyFlags |= ACCELERATOR_MOUSE;
-        break;
-    case Mouse::MOUSE_PRESS_RIGHT_BUTTON:
-        _keyFlags |= BRAKE_MOUSE;
-        break;
-    case Mouse::MOUSE_RELEASE_LEFT_BUTTON:
-        _keyFlags &= ~ACCELERATOR_MOUSE;
-        break;
-    case Mouse::MOUSE_RELEASE_RIGHT_BUTTON:
-        _keyFlags &= ~BRAKE_MOUSE;
-        break;
-    }
-
-    return consumed;
-}
-
-void RacerGame::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad)
-{
-    // Prioritise physical gamepads over the virtual one.
-    switch(evt)
-    {
-    case Gamepad::CONNECTED_EVENT:
-        if (gamepad->isVirtual())
-        {
-            float from = 0.0f;
-            float to = getHeight();
-            Animation* virtualGamepadAnimation = gamepad->getForm()->createAnimationFromTo("gamepad_transition", Form::ANIMATE_POSITION_Y, &from, &to, Curve::LINEAR, 2000L);
-            _virtualGamepadClip = virtualGamepadAnimation->getClip();
-
-            _virtualGamepad = gamepad;
-        }
-        else
-        {
-            if (!_physicalGamepad)
-                _physicalGamepad = gamepad;
-        }
-
-        if (_physicalGamepad)
-        {
-        	if (_virtualGamepadClip && _gamepad == _virtualGamepad)
-            {
-        		_virtualGamepadClip->setSpeed(1.0f);
-                _virtualGamepadClip->play();
-            }
-            _gamepad = _physicalGamepad;
-			if (_virtualGamepad)
-			{
-				_virtualGamepad->getForm()->setEnabled(false);
-			}
-        }
-        else if (_virtualGamepad)
-        {
-            if (_gamepad == _physicalGamepad)
-            {
-        	    _virtualGamepadClip->setSpeed(-1.0f);
-                _virtualGamepadClip->play();
-            }
-            _gamepad = _virtualGamepad;
-            _virtualGamepad->getForm()->setEnabled(true);
-        }
-
-        break;
-    case Gamepad::DISCONNECTED_EVENT:
-        if (gamepad == _physicalGamepad)
-        {
-            _gamepad = _virtualGamepad;
-            _physicalGamepad = NULL;
-
-            _virtualGamepadClip->setSpeed(-1.0f);
-            _virtualGamepadClip->play();
-            _virtualGamepad->getForm()->setEnabled(true);
-        }
-        break;
-    }
-}
-
-void RacerGame::menuEvent()
-{
-    __showMenu = !__showMenu;
-
-    if (__showMenu)
-    {
-        static_cast<Button*>(_overlay->getControl("menuButton"))->setText("Resume");
-        pause();
-        _menu->setEnabled(true);
-        _menu->setState(Control::FOCUS);
-    }
-    else
-    {
-        static_cast<Button*>(_overlay->getControl("menuButton"))->setText("Menu");
-        resume();
-        _menu->setEnabled(false);
-    }
-}
-
-void RacerGame::resetToStart()
-{
-    Vector3 pos(-258, 1, 278);
-    Quaternion rot(Vector3::unitY(), MATH_DEG_TO_RAD(143.201f));
-
-    reset(pos, rot);
-}
-
-void RacerGame::resetInPlace()
-{
-    Node* carNode = _carVehicle->getNode();
-
-    Vector3 pos;
-    carNode->getTranslation(&pos);
-    pos.y += 3.0f;
-
-    float angle = 0;
-    Vector3 v;
-    carNode->getForwardVector(&v);
-    if (v.x*v.x + v.z*v.z > 0)
-    {
-        angle += atan2(-v.x, -v.z);
-    }
-    Quaternion rot(Vector3::unitY(), angle);
-
-    reset(pos, rot);
-}
-
-void RacerGame::reset(const Vector3& pos, const Quaternion& rot)
-{
-    Node* carNode = _carVehicle->getNode();
-
-    _carVehicle->setEnabled(false);
-    carNode->setTranslation(pos);
-    carNode->setRotation(rot);
-    _carVehicle->reset();
-    _carVehicle->setEnabled(true);
-}
-
-void RacerGame::controlEvent(Control* control, EventType evt)
-{
-    if (strcmp(control->getId(), "newGameButton") == 0)
-    {
-        resetToStart();
-        // Close the menu and resume the game.
-        menuEvent();
-    }
-    else if (strcmp(control->getId(), "quitGameButton") == 0)
-    {
-        exit();
-    }
-    else if (strcmp(control->getId(), "useGamepad") == 0)
-    {
-        __useAccelerometer = false;
-    }
-    else if (strcmp(control->getId(), "useTilt") == 0)
-    {
-        __useAccelerometer = true;
-    }
-    else if (strcmp(control->getId(), "menuButton") == 0)
-    {
-        menuEvent();
-    }
-}
+#include "RacerGame.h"
+
+// Render queue indexes (in order of drawing).
+enum RenderQueue
+{
+    QUEUE_OPAQUE = 0,
+    QUEUE_TRANSPARENT,
+    QUEUE_COUNT
+};
+
+bool __viewFrustumCulling = true;
+bool __flythruCamera = false;
+bool __drawDebug = false;
+bool __useAccelerometer = false;
+bool __showMenu = false;
+bool __menuFlag = false;
+
+// Declare our game instance
+RacerGame game;
+
+// Input bit-flags (powers of 2)
+#define ACCELERATOR (1 << 0)
+#define BRAKE (1 << 1)
+#define REVERSE (1 << 2)
+#define UPRIGHT (1 << 3)
+#define STEER_LEFT (1 << 4)
+#define STEER_RIGHT (1 << 5)
+#define ACCELERATOR_MOUSE (1 << 6)
+#define BRAKE_MOUSE (1 << 7)
+
+#define STEERING_RESPONSE (7.0f)
+
+RacerGame::RacerGame()
+    : _scene(NULL), _keyFlags(0), _mouseFlags(0), _steering(0), _gamepad(NULL), _carVehicle(NULL), _upsetTimer(0),
+      _backgroundSound(NULL), _engineSound(NULL), _brakingSound(NULL)
+{
+}
+
+void RacerGame::initialize()
+{
+    setMultiTouch(true);
+
+    _font = Font::create("res/common/arial.gpb");
+
+    // Display the gameplay splash screen during loading, for at least 1 second.
+    displayScreen(this, &RacerGame::drawSplash, NULL, 1000L);
+
+    // Create the menu and start listening to its controls.
+    _menu = Form::create("res/common/menu.form");
+    _menu->setEnabled(false);
+    static_cast<Button*>(_menu->getControl("newGameButton"))->addListener(this, Listener::CLICK);
+    static_cast<Button*>(_menu->getControl("quitGameButton"))->addListener(this, Listener::CLICK);
+    static_cast<RadioButton*>(_menu->getControl("useGamepad"))->addListener(this, Listener::VALUE_CHANGED);
+    static_cast<RadioButton*>(_menu->getControl("useTilt"))->addListener(this, Listener::VALUE_CHANGED);
+    if (!canExit())
+    {
+        // Prevent a programmatic exit on platforms that don't allow it.
+        _menu->removeControl("quitGameButton");
+    }
+
+    // Create a pause button to display the menu
+    _overlay = Form::create("res/common/overlay.form");
+    static_cast<Button*>(_overlay->getControl("menuButton"))->addListener(this, Listener::CLICK);
+
+    // Load the scene
+    _scene = Scene::load("res/common/racer.scene");
+
+    // Set the aspect ratio for the scene's camera to match the current resolution
+    _scene->getActiveCamera()->setAspectRatio(getAspectRatio());
+
+    // Initialize scene
+    _scene->visit(this, &RacerGame::initializeScene);
+
+    // Load and initialize game script
+    getScriptController()->loadScript("res/common/racer.lua");
+    getScriptController()->executeFunction<void>("setScene", "<Scene>", _scene);
+
+    Node* carNode = _scene->findNode("carbody");
+    if (carNode && carNode->getCollisionObject()->getType() == PhysicsCollisionObject::VEHICLE)
+    {
+        _carVehicle = static_cast<PhysicsVehicle*>(carNode->getCollisionObject());
+        resetToStart();
+    }
+
+    // Create audio tracks
+    _backgroundSound = AudioSource::create("res/common/background_track.ogg");
+    if (_backgroundSound)
+    {
+        _backgroundSound->setLooped(true);
+        _backgroundSound->play();
+        _backgroundSound->setGain(0.3f);
+    }
+
+    _engineSound = AudioSource::create("res/common/engine_loop.ogg");
+    if (_engineSound)
+    {
+        _engineSound->setLooped(true);
+        _engineSound->play();
+        _engineSound->setGain(0.7f);
+    }
+
+    _brakingSound = AudioSource::create("res/common/braking.wav");
+    _brakingSound->setLooped(false);
+    _brakingSound->setGain(0.5f);
+
+    _gamepad = getGamepad(0);
+}
+
+bool RacerGame::initializeScene(Node* node)
+{
+    static Node* lightNode = _scene->findNode("directionalLight1");
+
+    Model* model = node->getModel();
+    if (model)
+    {
+        Material* material = model->getMaterial();
+        if (material && material->getTechnique()->getPassByIndex(0)->getEffect()->getUniform("u_directionalLightDirection[0]"))
+        {
+            material->getParameter("u_ambientColor")->setValue(_scene->getAmbientColor());
+            material->getParameter("u_directionalLightColor[0]")->setValue(lightNode->getLight()->getColor());
+            material->getParameter("u_directionalLightDirection[0]")->setValue(lightNode->getForwardVectorView());
+        }
+    }
+    return true;
+}
+
+void RacerGame::finalize()
+{
+    SAFE_RELEASE(_backgroundSound);
+    SAFE_RELEASE(_engineSound);
+    SAFE_RELEASE(_brakingSound);
+    SAFE_RELEASE(_scene);
+    SAFE_RELEASE(_font);
+    SAFE_RELEASE(_menu);
+    SAFE_RELEASE(_overlay);
+}
+
+void RacerGame::update(float elapsedTime)
+{   
+    // The "Start" button is mapped to MENU2.
+    if (!__showMenu && !__menuFlag && _gamepad->isButtonDown(Gamepad::BUTTON_MENU2))
+    {
+        __menuFlag = true;
+        menuEvent();
+    }
+
+    if (__menuFlag && !_gamepad->isButtonDown(Gamepad::BUTTON_MENU2))
+    {
+        __menuFlag = false;
+    }
+
+    if (__showMenu && !__menuFlag && _gamepad->isButtonDown(Gamepad::BUTTON_MENU2))
+    {
+        __menuFlag = true;
+        menuEvent();
+    }
+
+    Node* cameraNode;
+    if (_scene->getActiveCamera() && (cameraNode = _scene->getActiveCamera()->getNode()))
+    {
+        float dt = elapsedTime / 1000.0f;
+        float braking = 0;
+        float driving = 0;
+
+        if (_carVehicle)
+        {
+            float v = _carVehicle->getSpeedKph();
+            bool isVirt = _gamepad->isVirtual();
+
+            if (!__flythruCamera)
+            {
+                // Vehicle Control (Normal Mode)
+                Vector2 direction;
+                if (_gamepad->getJoystickCount())
+                {
+                    _gamepad->getJoystickValues(0, &direction);
+                }
+                
+                if (_gamepad->isButtonDown(Gamepad::BUTTON_LEFT))
+                {
+                    direction.set(-1.0f, 0.0f);
+                }
+                else if (_gamepad->isButtonDown(Gamepad::BUTTON_RIGHT))
+                {
+                    direction.set(1.0f, 0.0f);
+                }
+
+                // Allow keys to control steering
+                if (_keyFlags & STEER_LEFT)
+                {
+                    _steering += STEERING_RESPONSE * dt;
+                }
+                else if (_keyFlags & STEER_RIGHT)
+                {
+                    _steering -= STEERING_RESPONSE * dt;
+                }
+                else if (__useAccelerometer)
+                {
+                    float pitch, roll;
+                    Game::getAccelerometerValues(&pitch, &roll);
+
+                    _steering = -0.16 * roll;
+                }
+                else
+                {
+                    _steering = -direction.x;
+                }
+                _steering = max(-1.0f, min(_steering, 1.0f));
+
+                if (_gamepad->getTriggerCount() > 1)
+                {
+                    driving = _gamepad->getTriggerValue(1);
+                    _engineSound->setGain(0.8f + (driving * 0.2f));
+                }
+                
+                if (!driving && (_keyFlags & ACCELERATOR || _keyFlags & ACCELERATOR_MOUSE || _gamepad->isButtonDown(Gamepad::BUTTON_A)))
+                {
+                    driving = 1;
+                    _engineSound->setGain(1.0f);
+                }
+                else
+                {
+                    _engineSound->setGain(0.8f);
+                }
+                float s = _carVehicle->getSpeedSmoothKph() / 100.0f;
+                _engineSound->setPitch(max(0.2f, min(s, 2.0f)));
+
+                // Reverse only below a reasonable speed
+                bool isReverseCommanded = (_keyFlags & REVERSE) ||
+                                          (!isVirt && _gamepad->isButtonDown(Gamepad::BUTTON_X)) ||
+                                          (direction.y < -0.1 && _gamepad->isButtonDown(Gamepad::BUTTON_A));
+                if (isReverseCommanded && v < 30.0f)
+                {
+                    driving = -0.6f;
+                }
+
+                if ( (_keyFlags & BRAKE) || (_keyFlags & BRAKE_MOUSE) || _gamepad->isButtonDown(Gamepad::BUTTON_B))
+                {
+                    braking = 1;
+                    if (_brakingSound && (_brakingSound->getState() != AudioSource::PLAYING) && (v > 30.0f))
+                        _brakingSound->play();
+                }
+                else
+                {
+                    _brakingSound->stop();
+                }
+
+                // Make the camera follow the car
+                Node* carNode = _carVehicle->getNode();
+                Vector3 carPosition(carNode->getTranslation());
+                Vector3 commandedPosition(carPosition + Vector3::unitY()*4.0f - carNode->getBackVector()*10.0f);
+                cameraNode->translateSmooth(commandedPosition, dt, 0.2f);
+                Matrix m;
+                Matrix::createLookAt(cameraNode->getTranslation(), carPosition, Vector3::unitY(), &m);
+                m.transpose();
+                Quaternion q;
+                m.getRotation(&q);
+                cameraNode->setRotation(q);
+            }
+
+            // Slightly different steering gain based on gamepad type.
+            _carVehicle->setSteerdown( (isVirt ? 94.0f : 87.0f), (isVirt ? 0.15f : 0.22f) );
+            _carVehicle->update(elapsedTime, _steering, braking, driving);
+
+            // Auto-detect an upset car
+            if (fabs(v) < 10.0f && isUpset())
+            {
+                _upsetTimer += dt;
+            }
+            else
+            {
+                _upsetTimer = 0;
+            }
+
+            if (_upsetTimer > 3.0f)
+            {
+                _upsetTimer = 0;
+                resetInPlace();
+            }
+            else if ( (_keyFlags & UPRIGHT) ||
+                 (!isVirt && _gamepad->isButtonDown(Gamepad::BUTTON_Y)) ||
+                 (_carVehicle->getNode()->getTranslationY() < -300.0f) )
+            {
+                resetToStart();
+            }
+        }
+    }
+}
+
+bool RacerGame::isUpset() const
+{
+    GP_ASSERT(_carVehicle);
+
+    return _carVehicle->getNode()->getUpVector().y < 0.4f;
+}
+
+void RacerGame::render(float elapsedTime)
+{
+    // Clear the color and depth buffers
+    clear(CLEAR_COLOR_DEPTH, Vector4::zero(), 1.0f, 0);
+
+    // Visit all the nodes in the scene to build our render queues
+    for (unsigned int i = 0; i < QUEUE_COUNT; ++i)
+        _renderQueues[i].clear();
+    _scene->visit(this, &RacerGame::buildRenderQueues);
+
+    // Draw the scene from our render queues
+    drawScene();
+
+    if (__drawDebug)
+    {
+        Game::getInstance()->getPhysicsController()->drawDebug(_scene->getActiveCamera()->getViewProjectionMatrix());
+    }
+
+    // Draw the gamepad
+    if (_gamepad && _gamepad->isVirtual())
+    	_gamepad->draw();
+
+    // Draw the menu
+    if (__showMenu)
+    {
+        _menu->draw();
+    }
+    
+    _overlay->draw();
+        
+    // Draw FPS and speed
+    int carSpeed = _carVehicle ? (int)_carVehicle->getSpeedKph() : 0;
+    _font->start();
+    char fps[32];
+    sprintf(fps, "%d", getFrameRate());
+    _font->drawText(fps, 5, 5, Vector4(0,0.5f,1,1), 20);
+    char kph[32];
+    sprintf(kph, "%d [km/h]", carSpeed);
+    _font->drawText(kph, getWidth() / 2 - 50, getHeight() - 60, Vector4(1,1,1,1), 40);
+    _font->finish();
+}
+
+bool RacerGame::buildRenderQueues(Node* node)
+{
+    Model* model = node->getModel(); 
+    if (model)
+    {
+        // Perform view-frustum culling for this node
+        if (__viewFrustumCulling && !node->getBoundingSphere().intersects(_scene->getActiveCamera()->getFrustum()))
+            return true;
+
+        // Determine which render queue to insert the node into
+        std::vector<Node*>* queue;
+        if (node->hasTag("transparent"))
+            queue = &_renderQueues[QUEUE_TRANSPARENT];
+        else
+            queue = &_renderQueues[QUEUE_OPAQUE];
+
+        queue->push_back(node);
+    }
+    return true;
+}
+
+void RacerGame::drawScene()
+{
+    // Iterate through each render queue and draw the nodes in them
+    for (unsigned int i = 0; i < QUEUE_COUNT; ++i)
+    {
+        std::vector<Node*>& queue = _renderQueues[i];
+
+        for (size_t j = 0, ncount = queue.size(); j < ncount; ++j)
+        {
+            queue[j]->getModel()->draw();
+        }
+    }
+}
+
+void RacerGame::drawSplash(void* param)
+{
+    clear(CLEAR_COLOR_DEPTH, Vector4(0, 0, 0, 1), 1.0f, 0);
+
+    SpriteBatch* batch = SpriteBatch::create("res/logo_powered_white.png");
+    batch->start();
+    batch->draw(this->getWidth() * 0.5f, this->getHeight() * 0.5f, 0.0f, 512.0f, 512.0f, 0.0f, 1.0f, 1.0f, 0.0f, Vector4::one(), true);
+    batch->finish();
+    SAFE_DELETE(batch);
+}
+
+void RacerGame::keyEvent(Keyboard::KeyEvent evt, int key)
+{
+    if (evt == Keyboard::KEY_PRESS)
+    {
+        switch (key)
+        {
+        case Keyboard::KEY_ESCAPE:
+            menuEvent();
+            break;
+        case Keyboard::KEY_A:
+        case Keyboard::KEY_CAPITAL_A:
+        case Keyboard::KEY_LEFT_ARROW:
+            _keyFlags |= STEER_LEFT;
+            break;
+        case Keyboard::KEY_D:
+        case Keyboard::KEY_CAPITAL_D:
+        case Keyboard::KEY_RIGHT_ARROW:
+            _keyFlags |= STEER_RIGHT;
+            break;
+        case Keyboard::KEY_W:
+        case Keyboard::KEY_CAPITAL_W:
+        case Keyboard::KEY_UP_ARROW:
+            _keyFlags |= ACCELERATOR;
+            break;
+        case Keyboard::KEY_S:
+        case Keyboard::KEY_CAPITAL_S:
+        case Keyboard::KEY_DOWN_ARROW:
+            _keyFlags |= REVERSE;
+            break;
+        case Keyboard::KEY_SPACE:
+            _keyFlags |= BRAKE;
+            break;
+        case Keyboard::KEY_Y:
+        case Keyboard::KEY_CAPITAL_Y:
+            _keyFlags |= UPRIGHT;
+            break;
+        case Keyboard::KEY_V:
+            __viewFrustumCulling = !__viewFrustumCulling;
+            break;
+        case Keyboard::KEY_F:
+            __flythruCamera = !__flythruCamera;
+            getScriptController()->executeFunction<void>("toggleCamera");
+            break;
+        case Keyboard::KEY_B:
+            __drawDebug = !__drawDebug;
+            break;
+        case Keyboard::KEY_J:
+            __useAccelerometer = !__useAccelerometer;
+            break;
+        }
+    }
+    else if (evt == Keyboard::KEY_RELEASE)
+    {
+        switch (key)
+        {
+        case Keyboard::KEY_A:
+        case Keyboard::KEY_CAPITAL_A:
+        case Keyboard::KEY_LEFT_ARROW:
+            _keyFlags &= ~STEER_LEFT;
+            break;
+        case Keyboard::KEY_D:
+        case Keyboard::KEY_CAPITAL_D:
+        case Keyboard::KEY_RIGHT_ARROW:
+            _keyFlags &= ~STEER_RIGHT;
+            break;
+        case Keyboard::KEY_W:
+        case Keyboard::KEY_CAPITAL_W:
+        case Keyboard::KEY_UP_ARROW:
+            _keyFlags &= ~ACCELERATOR;
+            break;
+        case Keyboard::KEY_S:
+        case Keyboard::KEY_CAPITAL_S:
+        case Keyboard::KEY_DOWN_ARROW:
+            _keyFlags &= ~REVERSE;
+            break;
+        case Keyboard::KEY_SPACE:
+            _keyFlags &= ~BRAKE;
+            break;
+        case Keyboard::KEY_Y:
+        case Keyboard::KEY_CAPITAL_Y:
+            _keyFlags &= ~UPRIGHT;
+            break;
+        }
+    }
+}
+
+void RacerGame::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
+{
+    switch (evt)
+    {
+    case Touch::TOUCH_PRESS:
+        break;
+    case Touch::TOUCH_RELEASE:
+        break;
+    case Touch::TOUCH_MOVE:
+        break;
+    };
+}
+
+bool RacerGame::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
+{
+    bool consumed = false;
+
+    switch (evt)
+    {
+    case Mouse::MOUSE_PRESS_LEFT_BUTTON:
+        _keyFlags |= ACCELERATOR_MOUSE;
+        break;
+    case Mouse::MOUSE_PRESS_RIGHT_BUTTON:
+        _keyFlags |= BRAKE_MOUSE;
+        break;
+    case Mouse::MOUSE_RELEASE_LEFT_BUTTON:
+        _keyFlags &= ~ACCELERATOR_MOUSE;
+        break;
+    case Mouse::MOUSE_RELEASE_RIGHT_BUTTON:
+        _keyFlags &= ~BRAKE_MOUSE;
+        break;
+    }
+
+    return consumed;
+}
+
+void RacerGame::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad)
+{
+    // Prioritise physical gamepads over the virtual one.
+    switch(evt)
+    {
+    case Gamepad::CONNECTED_EVENT:
+        if (gamepad->isVirtual())
+        {
+            float from = 0.0f;
+            float to = getHeight();
+            Animation* virtualGamepadAnimation = gamepad->getForm()->createAnimationFromTo("gamepad_transition", Form::ANIMATE_POSITION_Y, &from, &to, Curve::LINEAR, 2000L);
+            _virtualGamepadClip = virtualGamepadAnimation->getClip();
+
+            _virtualGamepad = gamepad;
+        }
+        else
+        {
+            if (!_physicalGamepad)
+                _physicalGamepad = gamepad;
+        }
+
+        if (_physicalGamepad)
+        {
+        	if (_virtualGamepadClip && _gamepad == _virtualGamepad)
+            {
+        		_virtualGamepadClip->setSpeed(1.0f);
+                _virtualGamepadClip->play();
+            }
+            _gamepad = _physicalGamepad;
+			if (_virtualGamepad)
+			{
+				_virtualGamepad->getForm()->setEnabled(false);
+			}
+        }
+        else if (_virtualGamepad)
+        {
+            if (_gamepad == _physicalGamepad)
+            {
+        	    _virtualGamepadClip->setSpeed(-1.0f);
+                _virtualGamepadClip->play();
+            }
+            _gamepad = _virtualGamepad;
+            _virtualGamepad->getForm()->setEnabled(true);
+        }
+
+        break;
+    case Gamepad::DISCONNECTED_EVENT:
+        if (gamepad == _physicalGamepad)
+        {
+            _gamepad = _virtualGamepad;
+            _physicalGamepad = NULL;
+
+            _virtualGamepadClip->setSpeed(-1.0f);
+            _virtualGamepadClip->play();
+            _virtualGamepad->getForm()->setEnabled(true);
+        }
+        break;
+    }
+}
+
+void RacerGame::menuEvent()
+{
+    __showMenu = !__showMenu;
+
+    if (__showMenu)
+    {
+        static_cast<Button*>(_overlay->getControl("menuButton"))->setText("Resume");
+        pause();
+        _menu->setEnabled(true);
+        _menu->setState(Control::FOCUS);
+    }
+    else
+    {
+        static_cast<Button*>(_overlay->getControl("menuButton"))->setText("Menu");
+        resume();
+        _menu->setEnabled(false);
+    }
+}
+
+void RacerGame::resetToStart()
+{
+    Vector3 pos(-258, 1, 278);
+    Quaternion rot(Vector3::unitY(), MATH_DEG_TO_RAD(143.201f));
+
+    reset(pos, rot);
+}
+
+void RacerGame::resetInPlace()
+{
+    Node* carNode = _carVehicle->getNode();
+
+    Vector3 pos;
+    carNode->getTranslation(&pos);
+    pos.y += 3.0f;
+
+    float angle = 0;
+    Vector3 v;
+    carNode->getForwardVector(&v);
+    if (v.x*v.x + v.z*v.z > 0)
+    {
+        angle += atan2(-v.x, -v.z);
+    }
+    Quaternion rot(Vector3::unitY(), angle);
+
+    reset(pos, rot);
+}
+
+void RacerGame::reset(const Vector3& pos, const Quaternion& rot)
+{
+    Node* carNode = _carVehicle->getNode();
+
+    _carVehicle->setEnabled(false);
+    carNode->setTranslation(pos);
+    carNode->setRotation(rot);
+    _carVehicle->reset();
+    _carVehicle->setEnabled(true);
+}
+
+void RacerGame::controlEvent(Control* control, EventType evt)
+{
+    if (strcmp(control->getId(), "newGameButton") == 0)
+    {
+        resetToStart();
+        // Close the menu and resume the game.
+        menuEvent();
+    }
+    else if (strcmp(control->getId(), "quitGameButton") == 0)
+    {
+        exit();
+    }
+    else if (strcmp(control->getId(), "useGamepad") == 0)
+    {
+        __useAccelerometer = false;
+    }
+    else if (strcmp(control->getId(), "useTilt") == 0)
+    {
+        __useAccelerometer = true;
+    }
+    else if (strcmp(control->getId(), "menuButton") == 0)
+    {
+        menuEvent();
+    }
+}

+ 0 - 7
samples/spaceship/res/spaceship-encode.bat

@@ -1,7 +0,0 @@
-@echo off
-
-REM This script converts spaceship.fbx to a gameplay binary format (.gpb).
-
-"..\..\..\bin\windows\gameplay-encoder.exe" spaceship.fbx
-
-pause

+ 43 - 4
samples/spaceship/sample-spaceship.vcxproj

@@ -150,6 +150,10 @@
       <Outputs>
       </Outputs>
     </CustomBuildStep>
+    <PostBuildEvent>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
+    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
     <ClCompile>
@@ -209,6 +213,10 @@
       <Outputs>
       </Outputs>
     </CustomBuildStep>
+    <PostBuildEvent>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
+    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugMem|x64'">
     <ClCompile>
@@ -271,6 +279,10 @@
       <Outputs>
       </Outputs>
     </CustomBuildStep>
+    <PostBuildEvent>
+      <Command>xcopy ..\..\gameplay\res\shaders res\shaders\* /s /y
+copy ..\..\gameplay\res\logo_powered_white.png res</Command>
+    </PostBuildEvent>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
     <ClCompile>
@@ -305,17 +317,32 @@
     </CustomBuildStep>
   </ItemDefinitionGroup>
   <ItemGroup>
-    <None Include="..\..\gameplay\res\logo_powered_white.png" />
     <None Include="bar-descriptor.xml" />
     <None Include="game.config" />
     <None Include="icon.png" />
     <None Include="res\airstrip.gpb" />
     <None Include="res\background.ogg" />
-    <None Include="res\background.png" />
-    <None Include="res\propulsion_glow.png" />
+    <None Include="res\challenge.form" />
+    <None Include="res\menu.form" />
+    <None Include="res\menu.theme" />
+    <None Include="res\shaders\colored.frag" />
+    <None Include="res\shaders\colored.vert" />
+    <None Include="res\shaders\font.frag" />
+    <None Include="res\shaders\font.vert" />
+    <None Include="res\shaders\form.frag" />
+    <None Include="res\shaders\form.vert" />
+    <None Include="res\shaders\lighting.frag" />
+    <None Include="res\shaders\lighting.vert" />
+    <None Include="res\shaders\skinning-none.vert" />
+    <None Include="res\shaders\skinning.vert" />
+    <None Include="res\shaders\sprite.frag" />
+    <None Include="res\shaders\sprite.vert" />
+    <None Include="res\shaders\terrain.frag" />
+    <None Include="res\shaders\terrain.vert" />
+    <None Include="res\shaders\textured.frag" />
+    <None Include="res\shaders\textured.vert" />
     <None Include="res\spaceship.gpb" />
     <None Include="res\spaceship.mb" />
-    <None Include="res\spaceship.wav" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="src\SpaceshipGame.h" />
@@ -323,6 +350,18 @@
   <ItemGroup>
     <ClCompile Include="src\SpaceshipGame.cpp" />
   </ItemGroup>
+  <ItemGroup>
+    <Font Include="res\airstrip.ttf" />
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\background.png" />
+    <Image Include="res\logo_powered_white.png" />
+    <Image Include="res\menuAtlas.png" />
+    <Image Include="res\propulsion_glow.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <Media Include="res\spaceship.wav" />
+  </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>

+ 121 - 49
samples/spaceship/sample-spaceship.vcxproj.filters

@@ -1,50 +1,122 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="res">
-      <UniqueIdentifier>{174b782f-abfa-4a6e-99f3-ef7c67fb4798}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="src">
-      <UniqueIdentifier>{03dcd1a4-e2c1-4dc6-ac81-3e6538d8e747}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="bar-descriptor.xml" />
-    <None Include="icon.png" />
-    <None Include="res\background.ogg">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\background.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\propulsion_glow.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\spaceship.gpb">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\spaceship.mb">
-      <Filter>res</Filter>
-    </None>
-    <None Include="res\spaceship.wav">
-      <Filter>res</Filter>
-    </None>
-    <None Include="..\..\gameplay\res\logo_powered_white.png">
-      <Filter>res</Filter>
-    </None>
-    <None Include="game.config" />
-    <None Include="res\airstrip.gpb">
-      <Filter>res</Filter>
-    </None>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\SpaceshipGame.h">
-      <Filter>src</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\SpaceshipGame.cpp">
-      <Filter>src</Filter>
-    </ClCompile>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="res">
+      <UniqueIdentifier>{174b782f-abfa-4a6e-99f3-ef7c67fb4798}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src">
+      <UniqueIdentifier>{03dcd1a4-e2c1-4dc6-ac81-3e6538d8e747}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="res\shaders">
+      <UniqueIdentifier>{bb48b4a6-578b-4029-a7ef-8860bc4c16cb}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="bar-descriptor.xml" />
+    <None Include="icon.png" />
+    <None Include="game.config" />
+    <None Include="res\airstrip.gpb">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\background.ogg">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\challenge.form">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\menu.form">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\menu.theme">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\spaceship.gpb">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\spaceship.mb">
+      <Filter>res</Filter>
+    </None>
+    <None Include="res\shaders\colored.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\colored.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\font.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\form.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\lighting.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\skinning-none.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\sprite.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\terrain.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.frag">
+      <Filter>res\shaders</Filter>
+    </None>
+    <None Include="res\shaders\textured.vert">
+      <Filter>res\shaders</Filter>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\SpaceshipGame.h">
+      <Filter>src</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\SpaceshipGame.cpp">
+      <Filter>src</Filter>
+    </ClCompile>
+  </ItemGroup>
+  <ItemGroup>
+    <Font Include="res\airstrip.ttf">
+      <Filter>res</Filter>
+    </Font>
+  </ItemGroup>
+  <ItemGroup>
+    <Image Include="res\background.png">
+      <Filter>res</Filter>
+    </Image>
+    <Image Include="res\menuAtlas.png">
+      <Filter>res</Filter>
+    </Image>
+    <Image Include="res\propulsion_glow.png">
+      <Filter>res</Filter>
+    </Image>
+    <Image Include="res\logo_powered_white.png">
+      <Filter>res</Filter>
+    </Image>
+  </ItemGroup>
+  <ItemGroup>
+    <Media Include="res\spaceship.wav">
+      <Filter>res</Filter>
+    </Media>
+  </ItemGroup>
 </Project>

+ 207 - 207
tools/encoder/gameplay-encoder.vcxproj

@@ -1,208 +1,208 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="src\Animation.cpp" />
-    <ClCompile Include="src\AnimationChannel.cpp" />
-    <ClCompile Include="src\Base.cpp" />
-    <ClCompile Include="src\BoundingVolume.cpp" />
-    <ClCompile Include="src\Camera.cpp" />
-    <ClCompile Include="src\Constants.cpp" />
-    <ClCompile Include="src\Curve.cpp" />
-    <ClCompile Include="src\edtaa3func.c" />
-    <ClCompile Include="src\EncoderArguments.cpp" />
-    <ClCompile Include="src\Effect.cpp" />
-    <ClCompile Include="src\FBXSceneEncoder.cpp" />
-    <ClCompile Include="src\FBXUtil.cpp" />
-    <ClCompile Include="src\FileIO.cpp" />
-    <ClCompile Include="src\Font.cpp" />
-    <ClCompile Include="src\GPBFile.cpp" />
-    <ClCompile Include="src\Glyph.cpp" />
-    <ClCompile Include="src\GPBDecoder.cpp" />
-    <ClCompile Include="src\Animations.cpp" />
-    <ClCompile Include="src\Heightmap.cpp" />
-    <ClCompile Include="src\Image.cpp" />
-    <ClCompile Include="src\Light.cpp" />
-    <ClCompile Include="src\main.cpp" />
-    <ClCompile Include="src\Material.cpp" />
-    <ClCompile Include="src\MaterialParameter.cpp" />
-    <ClCompile Include="src\Matrix.cpp" />
-    <ClCompile Include="src\Mesh.cpp" />
-    <ClCompile Include="src\MeshSubSet.cpp" />
-    <ClCompile Include="src\Model.cpp" />
-    <ClCompile Include="src\MeshPart.cpp" />
-    <ClCompile Include="src\MeshSkin.cpp" />
-    <ClCompile Include="src\Node.cpp" />
-    <ClCompile Include="src\NormalMapGenerator.cpp" />
-    <ClCompile Include="src\Object.cpp" />
-    <ClCompile Include="src\Quaternion.cpp" />
-    <ClCompile Include="src\Reference.cpp" />
-    <ClCompile Include="src\ReferenceTable.cpp" />
-    <ClCompile Include="src\Sampler.cpp" />
-    <ClCompile Include="src\Scene.cpp" />
-    <ClCompile Include="src\StringUtil.cpp" />
-    <ClCompile Include="src\Transform.cpp" />
-    <ClCompile Include="src\TTFFontEncoder.cpp" />
-    <ClCompile Include="src\Vector2.cpp" />
-    <ClCompile Include="src\Vector3.cpp" />
-    <ClCompile Include="src\Vector4.cpp" />
-    <ClCompile Include="src\Vertex.cpp" />
-    <ClCompile Include="src\VertexElement.cpp" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="src\Animation.h" />
-    <ClInclude Include="src\AnimationChannel.h" />
-    <ClInclude Include="src\Base.h" />
-    <ClInclude Include="src\BoundingVolume.h" />
-    <ClInclude Include="src\Camera.h" />
-    <ClInclude Include="src\Constants.h" />
-    <ClInclude Include="src\Curve.h" />
-    <ClInclude Include="src\edtaa3func.h" />
-    <ClInclude Include="src\EncoderArguments.h" />
-    <ClInclude Include="src\Effect.h" />
-    <ClInclude Include="src\FBXSceneEncoder.h" />
-    <ClInclude Include="src\FBXUtil.h" />
-    <ClInclude Include="src\FileIO.h" />
-    <ClInclude Include="src\Font.h" />
-    <ClInclude Include="src\GPBFile.h" />
-    <ClInclude Include="src\Glyph.h" />
-    <ClInclude Include="src\GPBDecoder.h" />
-    <ClInclude Include="src\Animations.h" />
-    <ClInclude Include="src\Heightmap.h" />
-    <ClInclude Include="src\Image.h" />
-    <ClInclude Include="src\Light.h" />
-    <ClInclude Include="src\Material.h" />
-    <ClInclude Include="src\MaterialParameter.h" />
-    <ClInclude Include="src\Matrix.h" />
-    <ClInclude Include="src\Mesh.h" />
-    <ClInclude Include="src\MeshSubSet.h" />
-    <ClInclude Include="src\Model.h" />
-    <ClInclude Include="src\MeshPart.h" />
-    <ClInclude Include="src\MeshSkin.h" />
-    <ClInclude Include="src\Node.h" />
-    <ClInclude Include="src\NormalMapGenerator.h" />
-    <ClInclude Include="src\Object.h" />
-    <ClInclude Include="src\Quaternion.h" />
-    <ClInclude Include="src\Reference.h" />
-    <ClInclude Include="src\ReferenceTable.h" />
-    <ClInclude Include="src\Sampler.h" />
-    <ClInclude Include="src\Scene.h" />
-    <ClInclude Include="src\StringUtil.h" />
-    <ClInclude Include="src\Thread.h" />
-    <ClInclude Include="src\Transform.h" />
-    <ClInclude Include="src\TTFFontEncoder.h" />
-    <ClInclude Include="src\Vector2.h" />
-    <ClInclude Include="src\Vector3.h" />
-    <ClInclude Include="src\Vector4.h" />
-    <ClInclude Include="src\Vertex.h" />
-    <ClInclude Include="src\VertexElement.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="gameplay-bundle.txt" />
-    <None Include="src\Curve.inl" />
-    <None Include="src\Quaternion.inl" />
-    <None Include="src\Vector2.inl" />
-    <None Include="src\Vector3.inl" />
-    <None Include="src\Vector4.inl" />
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <ProjectGuid>{9D69B743-4872-4DD1-8E30-0087C64298D7}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>gameplay-encoder</RootNamespace>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v110</PlatformToolset>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>Application</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-    <PlatformToolset>v110</PlatformToolset>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(Configuration)\</OutDir>
-    <IntDir>$(Configuration)\</IntDir>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level4</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=2;USE_FBX;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;NO_BOOST;NO_ZAE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:/Program Files/Autodesk/FBX/FBX SDK/2014.1/include;../../external-deps/freetype2/include;../../external-deps/png/include;../../external-deps/zlib/include</AdditionalIncludeDirectories>
-      <DisableLanguageExtensions>
-      </DisableLanguageExtensions>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <AdditionalLibraryDirectories>C:/Program Files/Autodesk/FBX/FBX SDK/2014.1/lib/vs2012/x86/debug;../../external-deps/freetype2/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86</AdditionalLibraryDirectories>
-      <AdditionalDependencies>libfbxsdk-md.lib;freetype245.lib;libpng.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <IgnoreSpecificDefaultLibraries>MSVCRT</IgnoreSpecificDefaultLibraries>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;USE_FBX;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;NO_BOOST;NO_ZAE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-      <AdditionalIncludeDirectories>C:/Program Files/Autodesk/FBX/FBX SDK/2014.1/include;../../external-deps/freetype2/include;../../external-deps/png/include;../../external-deps/zlib/include</AdditionalIncludeDirectories>
-    </ClCompile>
-    <Link>
-      <SubSystem>Console</SubSystem>
-      <GenerateDebugInformation>true</GenerateDebugInformation>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <AdditionalDependencies>libfbxsdk-md.lib;freetype245.lib;libpng.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
-      <AdditionalLibraryDirectories>C:/Program Files/Autodesk/FBX/FBX SDK/2014.1/lib/vs2012/x86/release;../../external-deps/freetype2/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86</AdditionalLibraryDirectories>
-      <IgnoreSpecificDefaultLibraries>
-      </IgnoreSpecificDefaultLibraries>
-    </Link>
-    <PostBuildEvent>
-      <Command>
-      </Command>
-    </PostBuildEvent>
-  </ItemDefinitionGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="src\Animation.cpp" />
+    <ClCompile Include="src\AnimationChannel.cpp" />
+    <ClCompile Include="src\Base.cpp" />
+    <ClCompile Include="src\BoundingVolume.cpp" />
+    <ClCompile Include="src\Camera.cpp" />
+    <ClCompile Include="src\Constants.cpp" />
+    <ClCompile Include="src\Curve.cpp" />
+    <ClCompile Include="src\edtaa3func.c" />
+    <ClCompile Include="src\EncoderArguments.cpp" />
+    <ClCompile Include="src\Effect.cpp" />
+    <ClCompile Include="src\FBXSceneEncoder.cpp" />
+    <ClCompile Include="src\FBXUtil.cpp" />
+    <ClCompile Include="src\FileIO.cpp" />
+    <ClCompile Include="src\Font.cpp" />
+    <ClCompile Include="src\GPBFile.cpp" />
+    <ClCompile Include="src\Glyph.cpp" />
+    <ClCompile Include="src\GPBDecoder.cpp" />
+    <ClCompile Include="src\Animations.cpp" />
+    <ClCompile Include="src\Heightmap.cpp" />
+    <ClCompile Include="src\Image.cpp" />
+    <ClCompile Include="src\Light.cpp" />
+    <ClCompile Include="src\main.cpp" />
+    <ClCompile Include="src\Material.cpp" />
+    <ClCompile Include="src\MaterialParameter.cpp" />
+    <ClCompile Include="src\Matrix.cpp" />
+    <ClCompile Include="src\Mesh.cpp" />
+    <ClCompile Include="src\MeshSubSet.cpp" />
+    <ClCompile Include="src\Model.cpp" />
+    <ClCompile Include="src\MeshPart.cpp" />
+    <ClCompile Include="src\MeshSkin.cpp" />
+    <ClCompile Include="src\Node.cpp" />
+    <ClCompile Include="src\NormalMapGenerator.cpp" />
+    <ClCompile Include="src\Object.cpp" />
+    <ClCompile Include="src\Quaternion.cpp" />
+    <ClCompile Include="src\Reference.cpp" />
+    <ClCompile Include="src\ReferenceTable.cpp" />
+    <ClCompile Include="src\Sampler.cpp" />
+    <ClCompile Include="src\Scene.cpp" />
+    <ClCompile Include="src\StringUtil.cpp" />
+    <ClCompile Include="src\Transform.cpp" />
+    <ClCompile Include="src\TTFFontEncoder.cpp" />
+    <ClCompile Include="src\Vector2.cpp" />
+    <ClCompile Include="src\Vector3.cpp" />
+    <ClCompile Include="src\Vector4.cpp" />
+    <ClCompile Include="src\Vertex.cpp" />
+    <ClCompile Include="src\VertexElement.cpp" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="src\Animation.h" />
+    <ClInclude Include="src\AnimationChannel.h" />
+    <ClInclude Include="src\Base.h" />
+    <ClInclude Include="src\BoundingVolume.h" />
+    <ClInclude Include="src\Camera.h" />
+    <ClInclude Include="src\Constants.h" />
+    <ClInclude Include="src\Curve.h" />
+    <ClInclude Include="src\edtaa3func.h" />
+    <ClInclude Include="src\EncoderArguments.h" />
+    <ClInclude Include="src\Effect.h" />
+    <ClInclude Include="src\FBXSceneEncoder.h" />
+    <ClInclude Include="src\FBXUtil.h" />
+    <ClInclude Include="src\FileIO.h" />
+    <ClInclude Include="src\Font.h" />
+    <ClInclude Include="src\GPBFile.h" />
+    <ClInclude Include="src\Glyph.h" />
+    <ClInclude Include="src\GPBDecoder.h" />
+    <ClInclude Include="src\Animations.h" />
+    <ClInclude Include="src\Heightmap.h" />
+    <ClInclude Include="src\Image.h" />
+    <ClInclude Include="src\Light.h" />
+    <ClInclude Include="src\Material.h" />
+    <ClInclude Include="src\MaterialParameter.h" />
+    <ClInclude Include="src\Matrix.h" />
+    <ClInclude Include="src\Mesh.h" />
+    <ClInclude Include="src\MeshSubSet.h" />
+    <ClInclude Include="src\Model.h" />
+    <ClInclude Include="src\MeshPart.h" />
+    <ClInclude Include="src\MeshSkin.h" />
+    <ClInclude Include="src\Node.h" />
+    <ClInclude Include="src\NormalMapGenerator.h" />
+    <ClInclude Include="src\Object.h" />
+    <ClInclude Include="src\Quaternion.h" />
+    <ClInclude Include="src\Reference.h" />
+    <ClInclude Include="src\ReferenceTable.h" />
+    <ClInclude Include="src\Sampler.h" />
+    <ClInclude Include="src\Scene.h" />
+    <ClInclude Include="src\StringUtil.h" />
+    <ClInclude Include="src\Thread.h" />
+    <ClInclude Include="src\Transform.h" />
+    <ClInclude Include="src\TTFFontEncoder.h" />
+    <ClInclude Include="src\Vector2.h" />
+    <ClInclude Include="src\Vector3.h" />
+    <ClInclude Include="src\Vector4.h" />
+    <ClInclude Include="src\Vertex.h" />
+    <ClInclude Include="src\VertexElement.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="gameplay-bundle.txt" />
+    <None Include="src\Curve.inl" />
+    <None Include="src\Quaternion.inl" />
+    <None Include="src\Vector2.inl" />
+    <None Include="src\Vector3.inl" />
+    <None Include="src\Vector4.inl" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{9D69B743-4872-4DD1-8E30-0087C64298D7}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>gameplay-encoder</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+    <PlatformToolset>v110</PlatformToolset>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>false</LinkIncremental>
+    <OutDir>$(Configuration)\</OutDir>
+    <IntDir>$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level4</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=2;USE_FBX;WIN32;_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;NO_BOOST;NO_ZAE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>C:/Program Files/Autodesk/FBX/FBX SDK/2014.1/include;../../external-deps/freetype2/include;../../external-deps/png/include;../../external-deps/zlib/include</AdditionalIncludeDirectories>
+      <DisableLanguageExtensions>
+      </DisableLanguageExtensions>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>C:/Program Files/Autodesk/FBX/FBX SDK/2014.1/lib/vs2012/x86/debug;../../external-deps/freetype2/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86</AdditionalLibraryDirectories>
+      <AdditionalDependencies>libfbxsdk-md.lib;freetype245.lib;libpng.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <IgnoreSpecificDefaultLibraries>MSVCRT</IgnoreSpecificDefaultLibraries>
+    </Link>
+    <PostBuildEvent>
+      <Command>
+      </Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_ITERATOR_DEBUG_LEVEL=0;USE_FBX;WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;NO_BOOST;NO_ZAE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <AdditionalIncludeDirectories>C:/Program Files/Autodesk/FBX/FBX SDK/2014.1/include;../../external-deps/freetype2/include;../../external-deps/png/include;../../external-deps/zlib/include</AdditionalIncludeDirectories>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>libfbxsdk-md.lib;freetype245.lib;libpng.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>C:/Program Files/Autodesk/FBX/FBX SDK/2014.1/lib/vs2012/x86/release;../../external-deps/freetype2/lib/windows/x86;../../external-deps/png/lib/windows/x86;../../external-deps/zlib/lib/windows/x86</AdditionalLibraryDirectories>
+      <IgnoreSpecificDefaultLibraries>
+      </IgnoreSpecificDefaultLibraries>
+    </Link>
+    <PostBuildEvent>
+      <Command>
+      </Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>

+ 17 - 17
tools/encoder/gameplay-encoder.vcxproj.user

@@ -1,18 +1,18 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LocalDebuggerCommandArguments>
-    </LocalDebuggerCommandArguments>
-    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
-    <LocalDebuggerEnvironment>
-    </LocalDebuggerEnvironment>
-    <LocalDebuggerWorkingDirectory>.\Debug</LocalDebuggerWorkingDirectory>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LocalDebuggerEnvironment>
-    </LocalDebuggerEnvironment>
-    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
-    <LocalDebuggerCommandArguments>-s 12 arial.ttf</LocalDebuggerCommandArguments>
-    <LocalDebuggerWorkingDirectory>.\Release</LocalDebuggerWorkingDirectory>
-  </PropertyGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LocalDebuggerCommandArguments>
+    </LocalDebuggerCommandArguments>
+    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+    <LocalDebuggerEnvironment>
+    </LocalDebuggerEnvironment>
+    <LocalDebuggerWorkingDirectory>.\Debug</LocalDebuggerWorkingDirectory>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LocalDebuggerEnvironment>
+    </LocalDebuggerEnvironment>
+    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+    <LocalDebuggerCommandArguments>-s 12 arial.ttf</LocalDebuggerCommandArguments>
+    <LocalDebuggerWorkingDirectory>.\Release</LocalDebuggerWorkingDirectory>
+  </PropertyGroup>
 </Project>

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels