Parcourir la source

Merge branch 'next' of https://github.com/blackberry/GamePlay into next

sgrenier il y a 11 ans
Parent
commit
adf9efe430
47 fichiers modifiés avec 2702 ajouts et 529 suppressions
  1. 4 3
      .gitignore
  2. 639 0
      gameplay/gameplay.pro
  3. 7 1
      gameplay/res/shaders/colored.frag
  4. 12 0
      gameplay/res/shaders/colored.vert
  5. 8 0
      gameplay/res/shaders/textured.frag
  6. 13 0
      gameplay/res/shaders/textured.vert
  7. 7 21
      newproject.bat
  8. 10 18
      newproject.sh
  9. 2 1
      samples/browser/CMakeLists.txt
  10. 1 1
      samples/browser/android/AndroidManifest.xml
  11. 2 1
      samples/browser/android/jni/Android.mk
  12. BIN
      samples/browser/res/common/water/pond.gpb
  13. BIN
      samples/browser/res/common/water/water_normal.png
  14. BIN
      samples/browser/res/common/water/water_sample.png
  15. 83 0
      samples/browser/res/common/water/watersample.frag
  16. 70 0
      samples/browser/res/common/water/watersample.material
  17. 15 0
      samples/browser/res/common/water/watersample.scene
  18. 34 0
      samples/browser/res/common/water/watersample.vert
  19. 124 0
      samples/browser/sample-browser.pro
  20. 3 1
      samples/browser/sample-browser.vcxproj
  21. 460 454
      samples/browser/sample-browser.vcxproj.filters
  22. 8 0
      samples/browser/sample-browser.xcodeproj/project.pbxproj
  23. 339 0
      samples/browser/src/WaterSample.cpp
  24. 82 0
      samples/browser/src/WaterSample.h
  25. 1 1
      samples/character/android/AndroidManifest.xml
  26. 81 0
      samples/character/sample-character.pro
  27. 1 1
      samples/lua/android/AndroidManifest.xml
  28. 81 0
      samples/lua/sample-lua.pro
  29. 1 1
      samples/mesh/android/AndroidManifest.xml
  30. 80 0
      samples/mesh/sample-mesh.pro
  31. 2 2
      samples/mesh/src/MeshGame.cpp
  32. 1 1
      samples/particles/android/AndroidManifest.xml
  33. 80 0
      samples/particles/sample-particles.pro
  34. 1 1
      samples/racer/android/AndroidManifest.xml
  35. 81 0
      samples/racer/sample-racer.pro
  36. 1 1
      samples/spaceship/android/AndroidManifest.xml
  37. 80 0
      samples/spaceship/sample-spaceship.pro
  38. 2 0
      template/TEMPLATE_PROJECT-ios.plist
  39. 80 0
      template/TEMPLATE_PROJECT.pro
  40. 1 1
      template/android/AndroidManifest.xml
  41. 2 1
      template/template.xcodeproj/project.pbxproj
  42. 3 1
      tools/encoder/CMakeLists.txt
  43. 138 0
      tools/encoder/gameplay-encoder.pro
  44. 1 1
      tools/luagen/CMakeLists.txt
  45. 45 0
      tools/luagen/gameplay-luagen.pro
  46. 8 8
      tools/luagen/src/DebugNew.cpp
  47. 8 8
      tools/luagen/src/DebugNew.h

+ 4 - 3
.gitignore

@@ -3,6 +3,7 @@
 *.opensdf
 *.layout
 *.depend
+*.pro.user
 .DS_Store*
 ehthumbs.db
 Icon?
@@ -56,9 +57,9 @@ gameplay.xcworkspace/xcshareddata/gameplay.xccheckout
 /gameplay.xcworkspace/xcuserdata
 /gameplay/gameplay.xcodeproj/xcuserdata
 
-/tools/gameplay-encoder/Debug
-/tools/gameplay-encoder/Release
-/tools/gameplay-encoder/gameplay-encoder.xcodeproj/xcuserdata
+/tools/encoder/Debug
+/tools/encoder/Release
+/tools/encoder/gameplay-encoder.xcodeproj/xcuserdata
 
 /tools/luagen/Release
 /tools/luagen/Debug

+ 639 - 0
gameplay/gameplay.pro

@@ -0,0 +1,639 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator
+#
+#-------------------------------------------------
+
+QT -= core gui
+
+TARGET = gameplay
+TEMPLATE = lib
+CONFIG += staticlib
+
+SOURCES += src/AbsoluteLayout.cpp \
+    src/AIAgent.cpp \
+    src/AIController.cpp \
+    src/AIMessage.cpp \
+    src/AIState.cpp \
+    src/AIStateMachine.cpp \
+    src/Animation.cpp \
+    src/AnimationClip.cpp \
+    src/AnimationController.cpp \
+    src/AnimationTarget.cpp \
+    src/AnimationValue.cpp \
+    src/AudioBuffer.cpp \
+    src/AudioController.cpp \
+    src/AudioListener.cpp \
+    src/AudioSource.cpp \
+    src/BoundingBox.cpp \
+    src/BoundingBox.inl \
+    src/BoundingSphere.cpp \
+    src/BoundingSphere.inl \
+    src/Bundle.cpp \
+    src/Button.cpp \
+    src/Camera.cpp \
+    src/CheckBox.cpp \
+    src/Container.cpp \
+    src/Control.cpp \
+    src/ControlFactory.cpp \
+    src/Curve.cpp \
+    src/DebugNew.cpp \
+    src/DepthStencilTarget.cpp \
+    src/Effect.cpp \
+    src/FileSystem.cpp \
+    src/FlowLayout.cpp \
+    src/Font.cpp \
+    src/Form.cpp \
+    src/FrameBuffer.cpp \
+    src/Frustum.cpp \
+    src/Game.cpp \
+    src/Game.inl \
+    src/Gamepad.cpp \
+    src/gameplay-main-android.cpp \
+    src/gameplay-main-linux.cpp \
+    src/gameplay-main-windows.cpp \
+    src/HeightField.cpp \
+    src/Image.cpp \
+    src/Image.inl \
+    src/ImageControl.cpp \
+    src/Joint.cpp \
+    src/JoystickControl.cpp \
+    src/Label.cpp \
+    src/Layout.cpp \
+    src/Light.cpp \
+    src/Logger.cpp \
+    src/Material.cpp \
+    src/MaterialParameter.cpp \
+    src/MathUtil.cpp \
+    src/MathUtil.inl \
+    src/MathUtilNeon.inl \
+    src/Matrix.cpp \
+    src/Matrix.inl \
+    src/Mesh.cpp \
+    src/MeshBatch.cpp \
+    src/MeshBatch.inl \
+    src/MeshPart.cpp \
+    src/MeshSkin.cpp \
+    src/Model.cpp \
+    src/Node.cpp \
+    src/ParticleEmitter.cpp \
+    src/Pass.cpp \
+    src/PhysicsCharacter.cpp \
+    src/PhysicsCollisionObject.cpp \
+    src/PhysicsCollisionShape.cpp \
+    src/PhysicsConstraint.cpp \
+    src/PhysicsConstraint.inl \
+    src/PhysicsController.cpp \
+    src/PhysicsFixedConstraint.cpp \
+    src/PhysicsFixedConstraint.inl \
+    src/PhysicsGenericConstraint.cpp \
+    src/PhysicsGenericConstraint.inl \
+    src/PhysicsGhostObject.cpp \
+    src/PhysicsHingeConstraint.cpp \
+    src/PhysicsRigidBody.cpp \
+    src/PhysicsRigidBody.inl \
+    src/PhysicsSocketConstraint.cpp \
+    src/PhysicsSpringConstraint.cpp \
+    src/PhysicsSpringConstraint.inl \
+    src/PhysicsVehicle.cpp \
+    src/PhysicsVehicleWheel.cpp \
+    src/Plane.cpp \
+    src/Plane.inl \
+    src/Platform.cpp \
+    src/PlatformAndroid.cpp \
+    src/PlatformLinux.cpp \
+    src/PlatformWindows.cpp \
+    src/Properties.cpp \
+    src/Quaternion.cpp \
+    src/Quaternion.inl \
+    src/RadioButton.cpp \
+    src/Ray.cpp \
+    src/Ray.inl \
+    src/Rectangle.cpp \
+    src/Ref.cpp \
+    src/RenderState.cpp \
+    src/RenderTarget.cpp \
+    src/Scene.cpp \
+    src/SceneLoader.cpp \
+    src/ScreenDisplayer.cpp \
+    src/ScriptController.cpp \
+    src/ScriptController.inl \
+    src/ScriptTarget.cpp \
+    src/Slider.cpp \
+    src/SpriteBatch.cpp \
+    src/Technique.cpp \
+    src/Terrain.cpp \
+    src/TerrainPatch.cpp \
+    src/TextBox.cpp \
+    src/Texture.cpp \
+    src/Theme.cpp \
+    src/ThemeStyle.cpp \
+    src/Transform.cpp \
+    src/Vector2.cpp \
+    src/Vector2.inl \
+    src/Vector3.cpp \
+    src/Vector3.inl \
+    src/Vector4.cpp \
+    src/Vector4.inl \
+    src/VertexAttributeBinding.cpp \
+    src/VertexFormat.cpp \
+    src/VerticalLayout.cpp \
+    src/lua/lua_AbsoluteLayout.cpp \
+    src/lua/lua_AIAgent.cpp \
+    src/lua/lua_AIAgentListener.cpp \
+    src/lua/lua_AIController.cpp \
+    src/lua/lua_AIMessage.cpp \
+    src/lua/lua_AIMessageParameterType.cpp \
+    src/lua/lua_AIState.cpp \
+    src/lua/lua_AIStateListener.cpp \
+    src/lua/lua_AIStateMachine.cpp \
+    src/lua/lua_all_bindings.cpp \
+    src/lua/lua_Animation.cpp \
+    src/lua/lua_AnimationClip.cpp \
+    src/lua/lua_AnimationClipListener.cpp \
+    src/lua/lua_AnimationClipListenerEventType.cpp \
+    src/lua/lua_AnimationController.cpp \
+    src/lua/lua_AnimationTarget.cpp \
+    src/lua/lua_AnimationValue.cpp \
+    src/lua/lua_AudioBuffer.cpp \
+    src/lua/lua_AudioController.cpp \
+    src/lua/lua_AudioListener.cpp \
+    src/lua/lua_AudioSource.cpp \
+    src/lua/lua_AudioSourceState.cpp \
+    src/lua/lua_BoundingBox.cpp \
+    src/lua/lua_BoundingSphere.cpp \
+    src/lua/lua_Bundle.cpp \
+    src/lua/lua_Button.cpp \
+    src/lua/lua_Camera.cpp \
+    src/lua/lua_CameraListener.cpp \
+    src/lua/lua_CameraType.cpp \
+    src/lua/lua_CheckBox.cpp \
+    src/lua/lua_Container.cpp \
+    src/lua/lua_ContainerDirection.cpp \
+    src/lua/lua_ContainerScroll.cpp \
+    src/lua/lua_Control.cpp \
+    src/lua/lua_ControlAlignment.cpp \
+    src/lua/lua_ControlAutoSize.cpp \
+    src/lua/lua_ControlListener.cpp \
+    src/lua/lua_ControlListenerEventType.cpp \
+    src/lua/lua_ControlState.cpp \
+    src/lua/lua_Curve.cpp \
+    src/lua/lua_CurveInterpolationType.cpp \
+    src/lua/lua_DepthStencilTarget.cpp \
+    src/lua/lua_DepthStencilTargetFormat.cpp \
+    src/lua/lua_Effect.cpp \
+    src/lua/lua_FileSystem.cpp \
+    src/lua/lua_FlowLayout.cpp \
+    src/lua/lua_Font.cpp \
+    src/lua/lua_FontFormat.cpp \
+    src/lua/lua_FontJustify.cpp \
+    src/lua/lua_FontStyle.cpp \
+    src/lua/lua_FontText.cpp \
+    src/lua/lua_Form.cpp \
+    src/lua/lua_FrameBuffer.cpp \
+    src/lua/lua_Frustum.cpp \
+    src/lua/lua_Game.cpp \
+    src/lua/lua_GameClearFlags.cpp \
+    src/lua/lua_Gamepad.cpp \
+    src/lua/lua_GamepadButtonMapping.cpp \
+    src/lua/lua_GamepadGamepadEvent.cpp \
+    src/lua/lua_GameState.cpp \
+    src/lua/lua_Gesture.cpp \
+    src/lua/lua_GestureGestureEvent.cpp \
+    src/lua/lua_Global.cpp \
+    src/lua/lua_HeightField.cpp \
+    src/lua/lua_Image.cpp \
+    src/lua/lua_ImageControl.cpp \
+    src/lua/lua_ImageFormat.cpp \
+    src/lua/lua_Joint.cpp \
+    src/lua/lua_JoystickControl.cpp \
+    src/lua/lua_Keyboard.cpp \
+    src/lua/lua_KeyboardKey.cpp \
+    src/lua/lua_KeyboardKeyEvent.cpp \
+    src/lua/lua_Label.cpp \
+    src/lua/lua_Layout.cpp \
+    src/lua/lua_LayoutType.cpp \
+    src/lua/lua_Light.cpp \
+    src/lua/lua_LightType.cpp \
+    src/lua/lua_Logger.cpp \
+    src/lua/lua_LoggerLevel.cpp \
+    src/lua/lua_Material.cpp \
+    src/lua/lua_MaterialParameter.cpp \
+    src/lua/lua_MathUtil.cpp \
+    src/lua/lua_Matrix.cpp \
+    src/lua/lua_Mesh.cpp \
+    src/lua/lua_MeshBatch.cpp \
+    src/lua/lua_MeshIndexFormat.cpp \
+    src/lua/lua_MeshPart.cpp \
+    src/lua/lua_MeshPrimitiveType.cpp \
+    src/lua/lua_MeshSkin.cpp \
+    src/lua/lua_Model.cpp \
+    src/lua/lua_Mouse.cpp \
+    src/lua/lua_MouseMouseEvent.cpp \
+    src/lua/lua_Node.cpp \
+    src/lua/lua_NodeCloneContext.cpp \
+    src/lua/lua_NodeType.cpp \
+    src/lua/lua_ParticleEmitter.cpp \
+    src/lua/lua_ParticleEmitterTextureBlending.cpp \
+    src/lua/lua_Pass.cpp \
+    src/lua/lua_PhysicsCharacter.cpp \
+    src/lua/lua_PhysicsCollisionObject.cpp \
+    src/lua/lua_PhysicsCollisionObjectCollisionListener.cpp \
+    src/lua/lua_PhysicsCollisionObjectCollisionListenerEventType.cpp \
+    src/lua/lua_PhysicsCollisionObjectCollisionPair.cpp \
+    src/lua/lua_PhysicsCollisionObjectType.cpp \
+    src/lua/lua_PhysicsCollisionShape.cpp \
+    src/lua/lua_PhysicsCollisionShapeDefinition.cpp \
+    src/lua/lua_PhysicsCollisionShapeType.cpp \
+    src/lua/lua_PhysicsConstraint.cpp \
+    src/lua/lua_PhysicsController.cpp \
+    src/lua/lua_PhysicsControllerHitFilter.cpp \
+    src/lua/lua_PhysicsControllerHitResult.cpp \
+    src/lua/lua_PhysicsControllerListener.cpp \
+    src/lua/lua_PhysicsControllerListenerEventType.cpp \
+    src/lua/lua_PhysicsFixedConstraint.cpp \
+    src/lua/lua_PhysicsGenericConstraint.cpp \
+    src/lua/lua_PhysicsGhostObject.cpp \
+    src/lua/lua_PhysicsHingeConstraint.cpp \
+    src/lua/lua_PhysicsRigidBody.cpp \
+    src/lua/lua_PhysicsRigidBodyParameters.cpp \
+    src/lua/lua_PhysicsSocketConstraint.cpp \
+    src/lua/lua_PhysicsSpringConstraint.cpp \
+    src/lua/lua_PhysicsVehicle.cpp \
+    src/lua/lua_PhysicsVehicleWheel.cpp \
+    src/lua/lua_Plane.cpp \
+    src/lua/lua_Platform.cpp \
+    src/lua/lua_Properties.cpp \
+    src/lua/lua_PropertiesType.cpp \
+    src/lua/lua_Quaternion.cpp \
+    src/lua/lua_RadioButton.cpp \
+    src/lua/lua_Ray.cpp \
+    src/lua/lua_Rectangle.cpp \
+    src/lua/lua_Ref.cpp \
+    src/lua/lua_RenderState.cpp \
+    src/lua/lua_RenderStateAutoBinding.cpp \
+    src/lua/lua_RenderStateBlend.cpp \
+    src/lua/lua_RenderStateCullFaceSide.cpp \
+    src/lua/lua_RenderStateDepthFunction.cpp \
+    src/lua/lua_RenderStateFrontFace.cpp \
+    src/lua/lua_RenderStateStateBlock.cpp \
+    src/lua/lua_RenderStateStencilFunction.cpp \
+    src/lua/lua_RenderStateStencilOperation.cpp \
+    src/lua/lua_RenderTarget.cpp \
+    src/lua/lua_Scene.cpp \
+    src/lua/lua_ScreenDisplayer.cpp \
+    src/lua/lua_ScriptController.cpp \
+    src/lua/lua_ScriptTarget.cpp \
+    src/lua/lua_Slider.cpp \
+    src/lua/lua_SpriteBatch.cpp \
+    src/lua/lua_Technique.cpp \
+    src/lua/lua_Terrain.cpp \
+    src/lua/lua_TerrainFlags.cpp \
+    src/lua/lua_TerrainPatch.cpp \
+    src/lua/lua_TextBox.cpp \
+    src/lua/lua_TextBoxInputMode.cpp \
+    src/lua/lua_Texture.cpp \
+    src/lua/lua_TextureCubeFace.cpp \
+    src/lua/lua_TextureFilter.cpp \
+    src/lua/lua_TextureFormat.cpp \
+    src/lua/lua_TextureSampler.cpp \
+    src/lua/lua_TextureType.cpp \
+    src/lua/lua_TextureWrap.cpp \
+    src/lua/lua_Theme.cpp \
+    src/lua/lua_ThemeSideRegions.cpp \
+    src/lua/lua_ThemeStyle.cpp \
+    src/lua/lua_ThemeThemeImage.cpp \
+    src/lua/lua_ThemeUVs.cpp \
+    src/lua/lua_Touch.cpp \
+    src/lua/lua_TouchTouchEvent.cpp \
+    src/lua/lua_Transform.cpp \
+    src/lua/lua_TransformListener.cpp \
+    src/lua/lua_Uniform.cpp \
+    src/lua/lua_Vector2.cpp \
+    src/lua/lua_Vector3.cpp \
+    src/lua/lua_Vector4.cpp \
+    src/lua/lua_VertexAttributeBinding.cpp \
+    src/lua/lua_VertexFormat.cpp \
+    src/lua/lua_VertexFormatElement.cpp \
+    src/lua/lua_VertexFormatUsage.cpp \
+    src/lua/lua_VerticalLayout.cpp
+
+HEADERS += src/AbsoluteLayout.h \
+    src/AIAgent.h \
+    src/AIController.h \
+    src/AIMessage.h \
+    src/AIState.h \
+    src/AIStateMachine.h \
+    src/Animation.h \
+    src/AnimationClip.h \
+    src/AnimationController.h \
+    src/AnimationTarget.h \
+    src/AnimationValue.h \
+    src/AudioBuffer.h \
+    src/AudioController.h \
+    src/AudioListener.h \
+    src/AudioSource.h \
+    src/Base.h \
+    src/BoundingBox.h \
+    src/BoundingSphere.h \
+    src/Bundle.h \
+    src/Button.h \
+    src/Camera.h \
+    src/CheckBox.h \
+    src/Container.h \
+    src/Control.h \
+    src/ControlFactory.h \
+    src/Curve.h \
+    src/DebugNew.h \
+    src/DepthStencilTarget.h \
+    src/Effect.h \
+    src/FileSystem.h \
+    src/FlowLayout.h \
+    src/Font.h \
+    src/Form.h \
+    src/FrameBuffer.h \
+    src/Frustum.h \
+    src/Game.h \
+    src/Gamepad.h \
+    src/gameplay.h \
+    src/Gesture.h \
+    src/HeightField.h \
+    src/Image.h \
+    src/ImageControl.h \
+    src/Joint.h \
+    src/JoystickControl.h \
+    src/Keyboard.h \
+    src/Label.h \
+    src/Layout.h \
+    src/Light.h \
+    src/Logger.h \
+    src/Material.h \
+    src/MaterialParameter.h \
+    src/MathUtil.h \
+    src/Matrix.h \
+    src/Mesh.h \
+    src/MeshBatch.h \
+    src/MeshPart.h \
+    src/MeshSkin.h \
+    src/Model.h \
+    src/Mouse.h \
+    src/Node.h \
+    src/ParticleEmitter.h \
+    src/Pass.h \
+    src/PhysicsCharacter.h \
+    src/PhysicsCollisionObject.h \
+    src/PhysicsCollisionShape.h \
+    src/PhysicsConstraint.h \
+    src/PhysicsController.h \
+    src/PhysicsFixedConstraint.h \
+    src/PhysicsGenericConstraint.h \
+    src/PhysicsGhostObject.h \
+    src/PhysicsHingeConstraint.h \
+    src/PhysicsRigidBody.h \
+    src/PhysicsSocketConstraint.h \
+    src/PhysicsSpringConstraint.h \
+    src/PhysicsVehicle.h \
+    src/PhysicsVehicleWheel.h \
+    src/Plane.h \
+    src/Platform.h \
+    src/Properties.h \
+    src/Quaternion.h \
+    src/RadioButton.h \
+    src/Ray.h \
+    src/Rectangle.h \
+    src/Ref.h \
+    src/RenderState.h \
+    src/RenderTarget.h \
+    src/Scene.h \
+    src/SceneLoader.h \
+    src/ScreenDisplayer.h \
+    src/ScriptController.h \
+    src/ScriptTarget.h \
+    src/Slider.h \
+    src/SpriteBatch.h \
+    src/Stream.h \
+    src/Technique.h \
+    src/Terrain.h \
+    src/TerrainPatch.h \
+    src/TextBox.h \
+    src/Texture.h \
+    src/Theme.h \
+    src/ThemeStyle.h \
+    src/TimeListener.h \
+    src/Touch.h \
+    src/Transform.h \
+    src/Vector2.h \
+    src/Vector3.h \
+    src/Vector4.h \
+    src/VertexAttributeBinding.h \
+    src/VertexFormat.h \
+    src/VerticalLayout.h \
+    src/lua/lua_AbsoluteLayout.h \
+    src/lua/lua_AIAgent.h \
+    src/lua/lua_AIAgentListener.h \
+    src/lua/lua_AIController.h \
+    src/lua/lua_AIMessage.h \
+    src/lua/lua_AIMessageParameterType.h \
+    src/lua/lua_AIState.h \
+    src/lua/lua_AIStateListener.h \
+    src/lua/lua_AIStateMachine.h \
+    src/lua/lua_all_bindings.h \
+    src/lua/lua_Animation.h \
+    src/lua/lua_AnimationClip.h \
+    src/lua/lua_AnimationClipListener.h \
+    src/lua/lua_AnimationClipListenerEventType.h \
+    src/lua/lua_AnimationController.h \
+    src/lua/lua_AnimationTarget.h \
+    src/lua/lua_AnimationValue.h \
+    src/lua/lua_AudioBuffer.h \
+    src/lua/lua_AudioController.h \
+    src/lua/lua_AudioListener.h \
+    src/lua/lua_AudioSource.h \
+    src/lua/lua_AudioSourceState.h \
+    src/lua/lua_BoundingBox.h \
+    src/lua/lua_BoundingSphere.h \
+    src/lua/lua_Bundle.h \
+    src/lua/lua_Button.h \
+    src/lua/lua_Camera.h \
+    src/lua/lua_CameraListener.h \
+    src/lua/lua_CameraType.h \
+    src/lua/lua_CheckBox.h \
+    src/lua/lua_Container.h \
+    src/lua/lua_ContainerDirection.h \
+    src/lua/lua_ContainerScroll.h \
+    src/lua/lua_Control.h \
+    src/lua/lua_ControlAlignment.h \
+    src/lua/lua_ControlAutoSize.h \
+    src/lua/lua_ControlListener.h \
+    src/lua/lua_ControlListenerEventType.h \
+    src/lua/lua_ControlState.h \
+    src/lua/lua_Curve.h \
+    src/lua/lua_CurveInterpolationType.h \
+    src/lua/lua_DepthStencilTarget.h \
+    src/lua/lua_DepthStencilTargetFormat.h \
+    src/lua/lua_Effect.h \
+    src/lua/lua_FileSystem.h \
+    src/lua/lua_FlowLayout.h \
+    src/lua/lua_Font.h \
+    src/lua/lua_FontFormat.h \
+    src/lua/lua_FontJustify.h \
+    src/lua/lua_FontStyle.h \
+    src/lua/lua_FontText.h \
+    src/lua/lua_Form.h \
+    src/lua/lua_FrameBuffer.h \
+    src/lua/lua_Frustum.h \
+    src/lua/lua_Game.h \
+    src/lua/lua_GameClearFlags.h \
+    src/lua/lua_Gamepad.h \
+    src/lua/lua_GamepadButtonMapping.h \
+    src/lua/lua_GamepadGamepadEvent.h \
+    src/lua/lua_GameState.h \
+    src/lua/lua_Gesture.h \
+    src/lua/lua_GestureGestureEvent.h \
+    src/lua/lua_Global.h \
+    src/lua/lua_HeightField.h \
+    src/lua/lua_Image.h \
+    src/lua/lua_ImageControl.h \
+    src/lua/lua_ImageFormat.h \
+    src/lua/lua_Joint.h \
+    src/lua/lua_JoystickControl.h \
+    src/lua/lua_Keyboard.h \
+    src/lua/lua_KeyboardKey.h \
+    src/lua/lua_KeyboardKeyEvent.h \
+    src/lua/lua_Label.h \
+    src/lua/lua_Layout.h \
+    src/lua/lua_LayoutType.h \
+    src/lua/lua_Light.h \
+    src/lua/lua_LightType.h \
+    src/lua/lua_Logger.h \
+    src/lua/lua_LoggerLevel.h \
+    src/lua/lua_Material.h \
+    src/lua/lua_MaterialParameter.h \
+    src/lua/lua_MathUtil.h \
+    src/lua/lua_Matrix.h \
+    src/lua/lua_Mesh.h \
+    src/lua/lua_MeshBatch.h \
+    src/lua/lua_MeshIndexFormat.h \
+    src/lua/lua_MeshPart.h \
+    src/lua/lua_MeshPrimitiveType.h \
+    src/lua/lua_MeshSkin.h \
+    src/lua/lua_Model.h \
+    src/lua/lua_Mouse.h \
+    src/lua/lua_MouseMouseEvent.h \
+    src/lua/lua_Node.h \
+    src/lua/lua_NodeCloneContext.h \
+    src/lua/lua_NodeType.h \
+    src/lua/lua_ParticleEmitter.h \
+    src/lua/lua_ParticleEmitterTextureBlending.h \
+    src/lua/lua_Pass.h \
+    src/lua/lua_PhysicsCharacter.h \
+    src/lua/lua_PhysicsCollisionObject.h \
+    src/lua/lua_PhysicsCollisionObjectCollisionListener.h \
+    src/lua/lua_PhysicsCollisionObjectCollisionListenerEventType.h \
+    src/lua/lua_PhysicsCollisionObjectCollisionPair.h \
+    src/lua/lua_PhysicsCollisionObjectType.h \
+    src/lua/lua_PhysicsCollisionShape.h \
+    src/lua/lua_PhysicsCollisionShapeDefinition.h \
+    src/lua/lua_PhysicsCollisionShapeType.h \
+    src/lua/lua_PhysicsConstraint.h \
+    src/lua/lua_PhysicsController.h \
+    src/lua/lua_PhysicsControllerHitFilter.h \
+    src/lua/lua_PhysicsControllerHitResult.h \
+    src/lua/lua_PhysicsControllerListener.h \
+    src/lua/lua_PhysicsControllerListenerEventType.h \
+    src/lua/lua_PhysicsFixedConstraint.h \
+    src/lua/lua_PhysicsGenericConstraint.h \
+    src/lua/lua_PhysicsGhostObject.h \
+    src/lua/lua_PhysicsHingeConstraint.h \
+    src/lua/lua_PhysicsRigidBody.h \
+    src/lua/lua_PhysicsRigidBodyParameters.h \
+    src/lua/lua_PhysicsSocketConstraint.h \
+    src/lua/lua_PhysicsSpringConstraint.h \
+    src/lua/lua_PhysicsVehicle.h \
+    src/lua/lua_PhysicsVehicleWheel.h \
+    src/lua/lua_Plane.h \
+    src/lua/lua_Platform.h \
+    src/lua/lua_Properties.h \
+    src/lua/lua_PropertiesType.h \
+    src/lua/lua_Quaternion.h \
+    src/lua/lua_RadioButton.h \
+    src/lua/lua_Ray.h \
+    src/lua/lua_Rectangle.h \
+    src/lua/lua_Ref.h \
+    src/lua/lua_RenderState.h \
+    src/lua/lua_RenderStateAutoBinding.h \
+    src/lua/lua_RenderStateBlend.h \
+    src/lua/lua_RenderStateCullFaceSide.h \
+    src/lua/lua_RenderStateDepthFunction.h \
+    src/lua/lua_RenderStateFrontFace.h \
+    src/lua/lua_RenderStateStateBlock.h \
+    src/lua/lua_RenderStateStencilFunction.h \
+    src/lua/lua_RenderStateStencilOperation.h \
+    src/lua/lua_RenderTarget.h \
+    src/lua/lua_Scene.h \
+    src/lua/lua_ScreenDisplayer.h \
+    src/lua/lua_ScriptController.h \
+    src/lua/lua_ScriptTarget.h \
+    src/lua/lua_Slider.h \
+    src/lua/lua_SpriteBatch.h \
+    src/lua/lua_Technique.h \
+    src/lua/lua_Terrain.h \
+    src/lua/lua_TerrainFlags.h \
+    src/lua/lua_TerrainPatch.h \
+    src/lua/lua_TextBox.h \
+    src/lua/lua_TextBoxInputMode.h \
+    src/lua/lua_Texture.h \
+    src/lua/lua_TextureCubeFace.h \
+    src/lua/lua_TextureFilter.h \
+    src/lua/lua_TextureFormat.h \
+    src/lua/lua_TextureSampler.h \
+    src/lua/lua_TextureType.h \
+    src/lua/lua_TextureWrap.h \
+    src/lua/lua_Theme.h \
+    src/lua/lua_ThemeSideRegions.h \
+    src/lua/lua_ThemeStyle.h \
+    src/lua/lua_ThemeThemeImage.h \
+    src/lua/lua_ThemeUVs.h \
+    src/lua/lua_Touch.h \
+    src/lua/lua_TouchTouchEvent.h \
+    src/lua/lua_Transform.h \
+    src/lua/lua_TransformListener.h \
+    src/lua/lua_Uniform.h \
+    src/lua/lua_Vector2.h \
+    src/lua/lua_Vector3.h \
+    src/lua/lua_Vector4.h \
+    src/lua/lua_VertexAttributeBinding.h \
+    src/lua/lua_VertexFormat.h \
+    src/lua/lua_VertexFormatElement.h \
+    src/lua/lua_VertexFormatUsage.h \
+    src/lua/lua_VerticalLayout.h
+
+INCLUDEPATH += $$PWD/../gameplay/src
+INCLUDEPATH += $$PWD/../external-deps/bullet/include
+INCLUDEPATH += $$PWD/../external-deps/lua/include
+INCLUDEPATH += $$PWD/../external-deps/png/include
+INCLUDEPATH += $$PWD/../external-deps/zlib/include
+INCLUDEPATH += $$PWD/../external-deps/ogg/include
+INCLUDEPATH += $$PWD/../external-deps/vorbis/include
+INCLUDEPATH += $$PWD/../external-deps/openal/include
+linux:!android:!android: INCLUDEPATH += $$PWD/../external-deps/glew/include
+linux:!android: INCLUDEPATH += /usr/include/gtk-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/gtk-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/atk-1.0
+linux:!android: INCLUDEPATH += /usr/include/cairo
+linux:!android: INCLUDEPATH += /usr/include/gdk-pixbuf-2.0
+linux:!android: INCLUDEPATH += /usr/include/pango-1.0
+linux:!android: INCLUDEPATH += /usr/include/gio-unix-2.0
+linux:!android: INCLUDEPATH += /usr/include/freetype2
+linux:!android: INCLUDEPATH += /usr/include/glib-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/pixman-1
+linux:!android: INCLUDEPATH += /usr/include/libpng12
+linux:!android: INCLUDEPATH += /usr/include/harfbuzz
+DEPENDPATH += INCLUDEPATH
+
+linux:!android: DEFINES += GP_USE_GAMEPAD
+linux:!android: DEFINES += __linux__
+linux:!android: QMAKE_CXXFLAGS += -std=c++11 -lstdc++ -pthread -w
+
+

+ 7 - 1
gameplay/res/shaders/colored.frag

@@ -93,10 +93,16 @@ varying vec3 v_cameraDirection;
 
 #endif
 
+#if defined(CLIP_PLANE)
+varying float v_clipDistance;
+#endif
 
 void main()
 {
-    
+    #if defined(CLIP_PLANE)
+    if(v_clipDistance < 0.0) discard;
+    #endif
+ 
     #if defined(LIGHTING)
 
     #if defined(VERTEX_COLOR)

+ 12 - 0
gameplay/res/shaders/colored.vert

@@ -66,6 +66,11 @@ uniform vec3 u_cameraPosition;
 
 #endif
 
+#if defined(CLIP_PLANE)
+uniform mat4 u_worldMatrix;
+uniform vec4 u_clipPlane;
+#endif
+
 ///////////////////////////////////////////////////////////
 // Varyings
 #if defined(LIGHTMAP)
@@ -106,6 +111,9 @@ varying vec3 v_cameraDirection;
 #include "skinning-none.vert" 
 #endif
 
+#if defined(CLIP_PLANE)
+varying float v_clipDistance;
+#endif
 
 void main()
 {
@@ -134,4 +142,8 @@ void main()
     #if defined(VERTEX_COLOR)
 	v_color = a_color;
     #endif
+    
+    #if defined(CLIP_PLANE)
+    v_clipDistance = dot(u_worldMatrix * position, u_clipPlane);
+    #endif    
 }

+ 8 - 0
gameplay/res/shaders/textured.frag

@@ -113,9 +113,17 @@ varying vec3 v_cameraDirection;
 
 #endif
 
+#if defined(CLIP_PLANE)
+varying float v_clipDistance;
+#endif
+
 
 void main()
 {
+    #if defined(CLIP_PLANE)
+    if(v_clipDistance < 0.0) discard;
+    #endif
+ 
     _baseColor = texture2D(u_diffuseTexture, v_texCoord);
  
     gl_FragColor.a = _baseColor.a;

+ 13 - 0
gameplay/res/shaders/textured.vert

@@ -79,6 +79,11 @@ uniform vec2 u_textureRepeat;
 uniform vec2 u_textureOffset;
 #endif
 
+#if defined(CLIP_PLANE)
+uniform mat4 u_worldMatrix;
+uniform vec4 u_clipPlane;
+#endif
+
 ///////////////////////////////////////////////////////////
 // Varyings
 varying vec2 v_texCoord;
@@ -122,6 +127,10 @@ varying vec3 v_cameraDirection;
 #include "skinning-none.vert" 
 #endif
 
+#if defined(CLIP_PLANE)
+varying float v_clipDistance;
+#endif
+
 void main()
 {
     vec4 position = getPosition();
@@ -164,4 +173,8 @@ void main()
     #if defined(LIGHTMAP)
     v_texCoord1 = a_texCoord1;
     #endif
+    
+    #if defined(CLIP_PLANE)
+    v_clipDistance = dot(u_worldMatrix * position, u_clipPlane);
+    #endif
 }

+ 7 - 21
newproject.bat

@@ -141,13 +141,10 @@ copy template\template.vcxproj "%projPath%\%projName%.vcxproj"
 call:replace "%projPath%\%projName%.vcxproj" TEMPLATE_PROJECT "%projName%"
 call:replace "%projPath%\%projName%.vcxproj" TemplateGame "%className%"
 call:replace "%projPath%\%projName%.vcxproj" GAMEPLAY_PATH "%gpPath%"
-
 copy template\template.vcxproj.filters "%projPath%\%projName%.vcxproj.filters"
 call:replace "%projPath%\%projName%.vcxproj.filters" TemplateGame "%className%"
-
 copy template\template.vcxproj.user "%projPath%\%projName%.vcxproj.user"
 call:replace "%projPath%\%projName%.vcxproj.user" GAMEPLAY_PATH "%gpPath%"
-
 call:replacevar gpPath "\" "/"
 
 REM Copy Apple XCode project files
@@ -156,68 +153,57 @@ copy template\template.xcodeproj\project.pbxproj "%projPath%\%projName%.xcodepro
 call:replace "%projPath%\%projName%.xcodeproj\project.pbxproj" GAMEPLAY_PATH "%gpPath%"
 call:replace "%projPath%\%projName%.xcodeproj\project.pbxproj" TemplateGame "%className%"
 call:replace "%projPath%\%projName%.xcodeproj\project.pbxproj" TEMPLATE_PROJECT "%projName%"
-
 copy template\TEMPLATE_PROJECT-macosx.plist "%projPath%\%projName%-macosx.plist"
 call:replace "%projPath%\%projName%-macosx.plist" TEMPLATE_UUID "%uuid%"
-
 copy template\TEMPLATE_PROJECT-ios.plist "%projPath%\%projName%-ios.plist"
 copy template\[email protected] "%projPath%\[email protected]"
 call:replace "%projPath%\%projName%-ios.plist" TEMPLATE_TITLE "%title%"
 call:replace "%projPath%\%projName%-ios.plist" TEMPLATE_UUID "%uuid%"
 
-
 REM Copy Android NDK project files
 mkdir "%projPath%\android"
-
 copy template\android\AndroidManifest.xml "%projPath%\android\AndroidManifest.xml"
 call:replace "%projPath%\android\AndroidManifest.xml" TEMPLATE_PROJECT "%projName%"
 call:replace "%projPath%\android\AndroidManifest.xml" TEMPLATE_UUID "%uuid%"
-
 copy template\android\build.xml "%projPath%\android\build.xml"
 call:replace "%projPath%\android\build.xml" TEMPLATE_PROJECT "%projName%"
 call:replace "%projPath%\android\build.xml" GAMEPLAY_PATH "%gpPath%"
-
 copy template\android\project.properties "%projPath%\android\project.properties"
-
 mkdir "%projPath%\android\jni"
-
 copy template\android\jni\Application.mk "%projPath%\android\jni\Application.mk"
-
 copy template\android\jni\Android.mk "%projPath%\android\jni\Android.mk"
 call:replace "%projPath%\android\jni\Android.mk" TemplateGame "%className%"
 call:replace "%projPath%\android\jni\Android.mk" TEMPLATE_PROJECT "%projName%"
 call:replace "%projPath%\android\jni\Android.mk" GAMEPLAY_PATH "%gpPath%"
-
 mkdir "%projPath%\android\res\drawable"
-
 copy template\icon.png "%projPath%\android\res\drawable\icon.png"
-
 mkdir "%projPath%\android\res\values"
-
 copy template\android\res\values\template.strings.xml "%projPath%\android\res\values\strings.xml"
 call:replace "%projPath%\android\res\values\strings.xml" TEMPLATE_TITLE "%title%"
 
-REM Copy Android Eclipse files
+REM Copy Eclipse files for Android
 copy template\android\.cproject "%projPath%\android\.cproject"
 call:replace "%projPath%\android\.cproject" TEMPLATE_PROJECT "%projName%"
 call:replace "%projPath%\android\.cproject" TEMPLATE_UUID "%uuid%"
 call:replace "%projPath%\android\.cproject" GAMEPLAY_PATH "%gpPath%"
-
 copy template\android\.project "%projPath%\android\.project"
 call:replace "%projPath%\android\.project" TEMPLATE_PROJECT "%projName%"
-
 copy template\android\.classpath "%projPath%\android\.classpath"
 call:replace "%projPath%\android\.classpath" TEMPLATE_PROJECT "%projName%"
 
-REM Copy Linux Eclipse files
+REM Copy Eclipse files for Linux
 copy template\.cproject "%projPath%\.cproject"
 call:replace "%projPath%\.cproject" TEMPLATE_PROJECT "%projName%"
 call:replace "%projPath%\.cproject" TEMPLATE_UUID "%uuid%"
 call:replace "%projPath%\.cproject" GAMEPLAY_PATH "%gpPath%"
-
 copy template\.project "%projPath%\.project"
 call:replace "%projPath%\.project" TEMPLATE_PROJECT "%projName%"
 
+REM Copy QtCreator files
+copy template\TEMPLATE_PROJECT.pro "%projPath%\%projName%.pro"
+call:replace "%projPath%\%projName%.pro" TEMPLATE_PROJECT "%projName%"
+call:replace "%projPath%\%projName%.pro" GAMEPLAY_PATH "%gpPath%"
+call:replace "%projPath%\%projName%.pro" TemplateGame %className%
 
 REM Copy CMake files
 mkdir "%projPath%\build"

+ 10 - 18
newproject.sh

@@ -153,19 +153,15 @@ fi
 # Copy Microsoft Visual Studio project files
 #############################################
 gpPathWin=$(echo $gpPath | sed 's*/*\\\\*g')
-
 cp "template/template.vcxproj" "$projPath/$projName.vcxproj"
 aliassedinplace "s*TEMPLATE_PROJECT*$projName*g" "$projPath/$projName.vcxproj"
 aliassedinplace "s*TemplateGame*$className*g" "$projPath/$projName.vcxproj"
 aliassedinplace "s*GAMEPLAY_PATH*$gpPathWin*g" "$projPath/$projName.vcxproj"
-
 cp "template/template.vcxproj.filters" "$projPath/$projName.vcxproj.filters"
 aliassedinplace "s*TemplateGame*$className*g" "$projPath/$projName.vcxproj.filters"
-
 cp "template/template.vcxproj.user" "$projPath/$projName.vcxproj.user"
 aliassedinplace "s*GAMEPLAY_PATH*$gpPathWin*g" "$projPath/$projName.vcxproj.user"
 
-
 #############################################
 # Copy Apple Xcode project files
 #############################################
@@ -174,10 +170,8 @@ cp "template/template.xcodeproj/project.pbxproj" "$projPath/$projName.xcodeproj/
 aliassedinplace "s*TEMPLATE_PROJECT*$projName*g" "$projPath/$projName.xcodeproj/project.pbxproj"
 aliassedinplace "s*TemplateGame*$className*g" "$projPath/$projName.xcodeproj/project.pbxproj"
 aliassedinplace "s*GAMEPLAY_PATH*$gpPath*g" "$projPath/$projName.xcodeproj/project.pbxproj"
-
 cp "template/TEMPLATE_PROJECT-macosx.plist" "$projPath/$projName-macosx.plist"
 aliassedinplace "s*TEMPLATE_UUID*$uuid*g" "$projPath/$projName-macosx.plist"
-
 cp "template/TEMPLATE_PROJECT-ios.plist" "$projPath/$projName-ios.plist"
 cp "template/[email protected]" "$projPath/[email protected]"
 aliassedinplace "s*TEMPLATE_TITLE*$title*g" "$projPath/$projName-ios.plist"
@@ -190,53 +184,52 @@ mkdir -p "$projPath/android"
 mkdir -p "$projPath/android/jni"
 mkdir -p "$projPath/android/res/values"
 mkdir -p "$projPath/android/res/drawable"
-
 cp "template/android/AndroidManifest.xml" "$projPath/android/AndroidManifest.xml"
 aliassedinplace "s*TEMPLATE_PROJECT*$projName*g" "$projPath/android/AndroidManifest.xml"
 aliassedinplace "s*TEMPLATE_UUID*$uuid*g" "$projPath/android/AndroidManifest.xml"
-
 cp "template/android/build.xml" "$projPath/android/build.xml"
 aliassedinplace "s*TEMPLATE_PROJECT*$projName*g" "$projPath/android/build.xml"
 aliassedinplace "s*GAMEPLAY_PATH*$gpPath*g" "$projPath/android/build.xml"
-
 cp "template/android/project.properties" "$projPath/android/project.properties"
-
 cp "template/android/jni/Application.mk" "$projPath/android/jni/Application.mk"
 cp "template/android/jni/Android.mk" "$projPath/android/jni/Android.mk"
 aliassedinplace "s*TEMPLATE_PROJECT*$projName*g" "$projPath/android/jni/Android.mk"
 aliassedinplace "s*TemplateGame*$className*g" "$projPath/android/jni/Android.mk"
 aliassedinplace "s*GAMEPLAY_PATH*$gpPath*g" "$projPath/android/jni/Android.mk"
-
 cp "template/icon.png" "$projPath/android/res/drawable/icon.png"
 cp "template/android/res/values/template.strings.xml" "$projPath/android/res/values/strings.xml"
 aliassedinplace "s*TEMPLATE_TITLE*$title*g" "$projPath/android/res/values/strings.xml"
 
 #############################################
-# Copy Android Eclipse files
+# Copy Eclipse files for Android
 #############################################
 cp "template/android/.cproject" "$projPath/android/.cproject"
 aliassedinplace "s*TEMPLATE_PROJECT*$projName*g" "$projPath/android/.cproject"
 aliassedinplace "s*TEMPLATE_UUID*$uuid*g" "$projPath/android/.cproject"
 aliassedinplace "s*GAMEPLAY_PATH*$gpPath*g" "$projPath/android/.cproject"
-
 cp "template/android/.project" "$projPath/android/.project"
 aliassedinplace "s*TEMPLATE_PROJECT*$projName*g" "$projPath/android/.project"
-
 cp "template/android/.classpath" "$projPath/android/.classpath"
 aliassedinplace "s*TEMPLATE_PROJECT*$projName*g" "$projPath/android/.classpath"
 
 #############################################
-# Copy Linux Eclipse files
+# Copy Eclipse files for Linux
 #############################################
-
 cp "template/.cproject" "$projPath/.cproject"
 aliassedinplace "s*TEMPLATE_PROJECT*$projName*g" "$projPath/.cproject"
 aliassedinplace "s*TEMPLATE_UUID*$uuid*g" "$projPath/.cproject"
 aliassedinplace "s*GAMEPLAY_PATH*$gpPath*g" "$projPath/.cproject"
-
 cp "template/.project" "$projPath/.project"
 aliassedinplace "s*TEMPLATE_PROJECT*$projName*g" "$projPath/.project"
 
+#############################################
+# Copy QtCreator files
+#############################################
+cp "template/TEMPLATE_PROJECT.pro" "$projPath/$projName.pro"
+aliassedinplace "s*TEMPLATE_PROJECT*$projName*g" "$projPath/$projName.pro"
+aliassedinplace "s*TemplateGame*$className*g" "$projPath/$projName.pro"
+aliassedinplace "s*GAMEPLAY_PATH*$gpPath*g" "$projPath/$projName.pro"
+
 #############################################
 # Copy CMake files
 #############################################
@@ -246,7 +239,6 @@ aliassedinplace "s*TEMPLATE_PROJECT*$projName*g" "$projPath/CMakeLists.txt"
 aliassedinplace "s*TemplateGame*$className*g" "$projPath/CMakeLists.txt"
 aliassedinplace "s*GAMEPLAY_PATH*$gpPath*g" "$projPath/CMakeLists.txt"
 
-
 #############################################
 # Copy source files
 #############################################

+ 2 - 1
samples/browser/CMakeLists.txt

@@ -59,7 +59,6 @@ set(GAME_SRC
     src/BillboardSample.cpp
     src/BillboardSample.h
     src/CreateSceneSample.cpp
-    src/CreateSceneSample.h    
     src/CreateSceneSample.h
     src/FirstPersonCamera.cpp
     src/FirstPersonCamera.h
@@ -99,6 +98,8 @@ set(GAME_SRC
     src/TextureSample.h
     src/TriangleSample.cpp
     src/TriangleSample.h
+    src/WaterSample.cpp
+    src.WaterSample.h
 )
 
 add_executable(${GAME_NAME}

+ 1 - 1
samples/browser/android/AndroidManifest.xml

@@ -11,7 +11,7 @@
     <application android:icon="@drawable/icon" android:label="@string/app_name" android:hasCode="true">
         <activity android:name="org.gameplay3d.GameNativeActivity"
                   android:label="@string/app_name"
-                  android:configChanges="orientation|keyboardHidden"
+                  android:configChanges="orientation|screenSize|keyboardHidden"
 				  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
 				  android:screenOrientation="landscape">
             <meta-data android:name="android.app.lib_name" android:value="sample-browser" />

+ 2 - 1
samples/browser/android/jni/Android.mk

@@ -106,7 +106,8 @@ LOCAL_SRC_FILES := ../../../gameplay/src/gameplay-main-android.cpp \
     TerrainSample.cpp \
     TextSample.cpp \
     TextureSample.cpp \
-    TriangleSample.cpp
+    TriangleSample.cpp \
+    WaterSample.cpp
 
 LOCAL_CPPFLAGS += -std=c++11 -Wno-switch-enum -Wno-switch
 LOCAL_ARM_MODE := arm

BIN
samples/browser/res/common/water/pond.gpb


BIN
samples/browser/res/common/water/water_normal.png


BIN
samples/browser/res/common/water/water_sample.png


+ 83 - 0
samples/browser/res/common/water/watersample.frag

@@ -0,0 +1,83 @@
+#ifdef OPENGL_ES
+precision mediump float;
+#endif
+
+//////////////////////////
+// Uniforms
+uniform sampler2D u_refractionTexture;
+uniform sampler2D u_reflectionTexture;
+
+uniform sampler2D u_normalMap;
+
+uniform float u_time;
+
+//////////////////////////
+// Varyings
+varying vec4 v_vertexRefractionPosition;
+varying vec4 v_vertexReflectionPosition;
+
+varying vec2 v_texCoord;
+
+varying vec3 v_eyePosition;
+
+//////////////////////////
+
+const float distortAmount = 0.05;
+const float specularAmount = 2.5;
+const float textureRepeat = 2.0;
+
+const vec4 tangent = vec4(1.0, 0.0, 0.0, 0.0);
+const vec4 viewNormal = vec4(0.0, 1.0, 0.0, 0.0);
+const vec4 bitangent = vec4(0.0, 0.0, 1.0, 0.0);
+
+const vec4 waterColour = vec4(0.36, 0.32, 0.2,1.0);
+
+vec2 fromClipSpace(vec4 position)
+{
+    return position.xy / position.w / 2.0 + 0.5;
+}
+
+void main()
+{	
+    //get normal
+    vec4 normal = texture2D(u_normalMap, v_texCoord * textureRepeat + u_time);
+    normal = normalize(normal * 2.0 - 1.0);
+    
+    //distortion offset
+    vec4 dudv = normal * distortAmount;
+
+    //refraction sample
+    vec2 textureCoord = fromClipSpace(v_vertexRefractionPosition) + dudv.rg;
+    textureCoord = clamp(textureCoord, 0.001, 0.999);
+    vec4 refractionColour = texture2D(u_refractionTexture, textureCoord) * waterColour;
+
+    //calc fog distance
+    //----version 1 (exponential)----//
+    //float z = gl_FragCoord.z / gl_FragCoord.w;
+    //const float fogDensity = 0.0005;
+    //float fogAmount = exp2(-fogDensity * fogDensity * z * z * 1.442695);
+    //fogAmount = clamp(fogAmount, 0.0, 0.7);
+
+    //----version 2 (linear)----//
+    float z = (gl_FragCoord.z / gl_FragCoord.w) / 300.0; //const is max fog distance
+    const float fogDensity = 6.0;
+    float fogAmount = z * fogDensity;	
+    fogAmount = clamp(fogAmount, 0.0, 1.0);
+
+    refractionColour = mix(refractionColour, waterColour, fogAmount);
+
+    //reflection sample
+    textureCoord = fromClipSpace(v_vertexReflectionPosition) + dudv.rg;
+    textureCoord = clamp(textureCoord, 0.001, 0.999);	
+    vec4 reflectionColour = texture2D(u_reflectionTexture, textureCoord);
+
+    //put view in tangent space
+    vec4 viewDir = normalize(vec4(v_eyePosition, 1.0));
+    vec4 viewTanSpace = normalize(vec4(dot(viewDir, tangent), dot(viewDir, bitangent), dot(viewDir, viewNormal), 1.0));	
+    vec4 viewReflection = normalize(reflect(-1.0 * viewTanSpace, normal));
+    float fresnel = dot(normal, viewReflection);	
+
+    vec3 specular = vec3(clamp(pow(dot(viewTanSpace, normal), 255.0), 0.0, 1.0)) * specularAmount;
+
+    gl_FragColor = mix(reflectionColour, refractionColour, fresnel) + vec4(specular, 1.0);
+}

+ 70 - 0
samples/browser/res/common/water/watersample.material

@@ -0,0 +1,70 @@
+material ground
+{
+    technique
+    {
+        pass
+        {
+            vertexShader = res/shaders/textured.vert
+            fragmentShader = res/shaders/textured.frag
+            defines = DIRECTIONAL_LIGHT_COUNT 1;CLIP_PLANE
+            
+            u_worldMatrix = WORLD_MATRIX
+            u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
+            u_inverseTransposeWorldViewMatrix = INVERSE_TRANSPOSE_WORLD_VIEW_MATRIX
+            
+            u_ambientColor = SCENE_AMBIENT_COLOR
+	    u_directionalLightColor[0] = 1, 1, 1
+            
+            sampler u_diffuseTexture
+            {
+            	mipmap = true
+	    	wrapS = REPEAT
+	    	wrapT = REPEAT
+	    	minFilter = LINEAR_MIPMAP_LINEAR
+		magFilter = LINEAR
+		
+		path = res/common/water/water_sample.png
+            }
+            
+            renderState
+            {
+                cullFace = true
+                depthTest = true
+            }
+        }
+    }
+}
+
+material water
+{
+    technique
+    {
+
+        pass
+        {
+             vertexShader = res/common/water/watersample.vert
+             fragmentShader = res/common/water/watersample.frag
+
+             u_worldMatrix = WORLD_MATRIX
+             u_worldViewProjectionMatrix = WORLD_VIEW_PROJECTION_MATRIX
+             u_cameraPosition = CAMERA_WORLD_POSITION
+
+             sampler u_normalMap
+             {
+                 mipmap = true
+                 wrapS = REPEAT
+                 wrapT = REPEAT
+                 minFilter = LINEAR_MIPMAP_LINEAR
+                 magFilter = LINEAR
+
+                 path = res/common/water/water_normal.png
+             }
+
+             renderState
+             {
+                 cullFace = true
+                 depthTest = true
+             }
+         }
+     }
+}

+ 15 - 0
samples/browser/res/common/water/watersample.scene

@@ -0,0 +1,15 @@
+scene
+{
+    path = res/common/water/pond.gpb
+
+
+    node Ground
+    {
+        material = res/common/water/watersample.material#ground
+    }
+
+    node Water
+    {
+        material = res/common/water/watersample.material#water		
+    }    	
+}

+ 34 - 0
samples/browser/res/common/water/watersample.vert

@@ -0,0 +1,34 @@
+/////////////////////////////
+// Attributes
+attribute vec4 a_position;
+attribute vec2 a_texCoord;
+
+/////////////////////////////
+// Uniforms
+uniform mat4 u_worldMatrix;
+uniform mat4 u_worldViewProjectionMatrix;
+uniform mat4 u_worldViewProjectionReflectionMatrix;
+
+uniform vec3 u_cameraPosition;
+
+/////////////////////////////
+// Varyings
+varying vec4 v_vertexRefractionPosition;
+varying vec4 v_vertexReflectionPosition;
+
+varying vec2 v_texCoord;
+
+varying vec3 v_eyePosition;
+
+/////////////////////////////
+void main()
+{
+    v_vertexRefractionPosition = u_worldViewProjectionMatrix * a_position;
+    v_vertexReflectionPosition = u_worldViewProjectionReflectionMatrix * a_position;
+
+    gl_Position = v_vertexRefractionPosition;
+
+    v_texCoord = a_texCoord;
+
+    v_eyePosition = u_cameraPosition - (u_worldMatrix * a_position).xyz;
+}

+ 124 - 0
samples/browser/sample-browser.pro

@@ -0,0 +1,124 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator
+#
+#-------------------------------------------------
+
+QT -= core gui
+
+TARGET = sample-browser
+TEMPLATE = app
+
+SOURCES += src/Audio3DSample.cpp \
+    src/BillboardSample.cpp \
+    src/CreateSceneSample.cpp \
+    src/FirstPersonCamera.cpp \
+    src/FormsSample.cpp \
+    src/GamepadSample.cpp \
+    src/GestureSample.cpp \
+    src/Grid.cpp \
+    src/InputSample.cpp \
+    src/LightSample.cpp \
+    src/LoadSceneSample.cpp \
+    src/MeshBatchSample.cpp \
+    src/MeshPrimitiveSample.cpp \
+    src/PhysicsCollisionObjectSample.cpp \
+    src/PostProcessSample.cpp \
+    src/SpriteBatchSample.cpp \
+    src/TerrainSample.cpp \
+    src/Sample.cpp \
+    src/SamplesGame.cpp \
+    src/TextSample.cpp \
+    src/TextureSample.cpp \
+    src/TriangleSample.cpp \
+    src/WaterSample.cpp
+
+HEADERS += src/Audio3DSample.h \
+    src/BillboardSample.h \
+    src/CreateSceneSample.h \
+    src/FirstPersonCamera.h \
+    src/FormsSample.h \
+    src/GamepadSample.h \
+    src/GestureSample.h \
+    src/Grid.h \
+    src/InputSample.h \
+    src/LightSample.h \
+    src/LoadSceneSample.h \
+    src/MeshBatchSample.h \
+    src/MeshPrimitiveSample.h \
+    src/PhysicsCollisionObjectSample.h \
+    src/PostProcessSample.h \
+    src/SpriteBatchSample.h \
+    src/TerrainSample.h \
+    src/Sample.h \
+    src/SamplesGame.h \
+    src/TextSample.h \
+    src/TextureSample.h \
+    src/TriangleSample.h \
+    src/WaterSample.h
+
+INCLUDEPATH += $$PWD/../../gameplay/src
+INCLUDEPATH += $$PWD/../../external-deps/bullet/include
+INCLUDEPATH += $$PWD/../../external-deps/lua/include
+INCLUDEPATH += $$PWD/../../external-deps/png/include
+INCLUDEPATH += $$PWD/../../external-deps/zlib/include
+INCLUDEPATH += $$PWD/../../external-deps/ogg/include
+INCLUDEPATH += $$PWD/../../external-deps/vorbis/include
+INCLUDEPATH += $$PWD/../../external-deps/openal/include
+linux:!android: INCLUDEPATH += $$PWD/../../external-deps/glew/include
+linux:!android: INCLUDEPATH += /usr/include/gtk-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/gtk-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/atk-1.0
+linux:!android: INCLUDEPATH += /usr/include/cairo
+linux:!android: INCLUDEPATH += /usr/include/gdk-pixbuf-2.0
+linux:!android: INCLUDEPATH += /usr/include/pango-1.0
+linux:!android: INCLUDEPATH += /usr/include/gio-unix-2.0
+linux:!android: INCLUDEPATH += /usr/include/freetype2
+linux:!android: INCLUDEPATH += /usr/include/glib-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/pixman-1
+linux:!android: INCLUDEPATH += /usr/include/libpng12
+linux:!android: INCLUDEPATH += /usr/include/harfbuzz
+DEPENDPATH += INCLUDEPATH
+
+linux:!android: DEFINES += GP_USE_GAMEPAD
+linux:!android: DEFINES += __linux__
+linux:!android: QMAKE_CXXFLAGS += -std=c++11 -lstdc++ -pthread -w
+
+linux:!android: LIBS += -L$$PWD/../../gameplay/Debug/ -lgameplay
+linux:!android: LIBS += -L$$PWD/../../external-deps/lua/lib/linux/x64/ -llua
+linux:!android: LIBS += -L$$PWD/../../external-deps/png/lib/linux/x64/ -lpng
+linux:!android: LIBS += -L$$PWD/../../external-deps/zlib/lib/linux/x64/ -lz
+linux:!android: LIBS += -L$$PWD/../../external-deps/vorbis/lib/linux/x64/ -lvorbis
+linux:!android: LIBS += -L$$PWD/../../external-deps/ogg/lib/linux/x64/ -logg
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletDynamics
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletCollision
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lLinearMath
+linux:!android: LIBS += -L$$PWD/../../external-deps/openal/lib/linux/x64/ -lopenal
+linux:!android: LIBS += -L$$PWD/../../external-deps/glew/lib/linux/x64/ -lGLEW
+linux:!android: LIBS += -lm
+linux:!android: LIBS += -lGL
+linux:!android: LIBS += -lrt
+linux:!android: LIBS += -ldl
+linux:!android: LIBS += -lX11
+linux:!android: LIBS += -lpthread
+linux:!android: LIBS += -lgtk-x11-2.0
+linux:!android: LIBS += -lglib-2.0
+linux:!android: LIBS += -lgobject-2.0
+
+linux:!android: PRE_TARGETDEPS += $$PWD/../../gameplay/Debug/libgameplay.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/lua/lib/linux/x64/liblua.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libLinearMath.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletCollision.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletDynamics.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/png/lib/linux/x64/libpng.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/zlib/lib/linux/x64/libz.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/ogg/lib/linux/x64/libogg.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/vorbis/lib/linux/x64/libvorbis.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/openal/lib/linux/x64/libopenal.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/glew/lib/linux/x64/libGLEW.a
+
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/shaders ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/ui ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(cp -rf $$PWD/../../gameplay/res/logo_powered_white.png ../res$$escape_expand(\n\t))
+

+ 3 - 1
samples/browser/sample-browser.vcxproj

@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?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|x64">
@@ -273,6 +273,7 @@ copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     <ClCompile Include="src\TextSample.cpp" />
     <ClCompile Include="src\TextureSample.cpp" />
     <ClCompile Include="src\MeshBatchSample.cpp" />
+    <ClCompile Include="src\WaterSample.cpp" />
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="src\Audio3DSample.h" />
@@ -297,6 +298,7 @@ copy ..\..\gameplay\res\logo_powered_white.png res</Command>
     <ClInclude Include="src\TextSample.h" />
     <ClInclude Include="src\TextureSample.h" />
     <ClInclude Include="src\MeshBatchSample.h" />
+    <ClInclude Include="src\WaterSample.h" />
   </ItemGroup>
   <ItemGroup>
     <Image Include="res\common\terrain\dirt.dds" />

+ 460 - 454
samples/browser/sample-browser.vcxproj.filters

@@ -1,455 +1,461 @@
-<?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>
-    <Filter Include="res\common\fonts">
-      <UniqueIdentifier>{10e17594-e3ef-49d2-a2a4-fb874c32b5c7}</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\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\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\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\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>
-    <None Include="res\common\terrain\terrain.material">
-      <Filter>res\common\terrain</Filter>
-    </None>
-    <None Include="res\common\fonts\arial-distance.gpb">
-      <Filter>res\common\fonts</Filter>
-    </None>
-    <None Include="res\common\fonts\badaboom.gpb">
-      <Filter>res\common\fonts</Filter>
-    </None>
-    <None Include="res\common\fonts\custom.gpb">
-      <Filter>res\common\fonts</Filter>
-    </None>
-    <None Include="res\common\fonts\fishfingers.gpb">
-      <Filter>res\common\fonts</Filter>
-    </None>
-    <None Include="res\common\fonts\neuropol.gpb">
-      <Filter>res\common\fonts</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>
-  </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>
-  </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\logo_powered_white.png">
-      <Filter>res</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.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\png\logo.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>
+    <Filter Include="res\common\fonts">
+      <UniqueIdentifier>{10e17594-e3ef-49d2-a2a4-fb874c32b5c7}</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\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\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\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\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>
+    <None Include="res\common\terrain\terrain.material">
+      <Filter>res\common\terrain</Filter>
+    </None>
+    <None Include="res\common\fonts\arial-distance.gpb">
+      <Filter>res\common\fonts</Filter>
+    </None>
+    <None Include="res\common\fonts\badaboom.gpb">
+      <Filter>res\common\fonts</Filter>
+    </None>
+    <None Include="res\common\fonts\custom.gpb">
+      <Filter>res\common\fonts</Filter>
+    </None>
+    <None Include="res\common\fonts\fishfingers.gpb">
+      <Filter>res\common\fonts</Filter>
+    </None>
+    <None Include="res\common\fonts\neuropol.gpb">
+      <Filter>res\common\fonts</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\WaterSample.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\WaterSample.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\logo_powered_white.png">
+      <Filter>res</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.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\png\logo.png">
+      <Filter>res\png</Filter>
+    </Image>
+  </ItemGroup>
+  <ItemGroup>
+    <Media Include="res\common\footsteps.wav">
+      <Filter>res\common</Filter>
+    </Media>
+  </ItemGroup>
 </Project>

+ 8 - 0
samples/browser/sample-browser.xcodeproj/project.pbxproj

@@ -40,6 +40,8 @@
 		422FE594169690830062D1FE /* PostProcessSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 422FE592169690830062D1FE /* PostProcessSample.cpp */; };
 		422FE595169690830062D1FE /* PostProcessSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 422FE592169690830062D1FE /* PostProcessSample.cpp */; };
 		424CC030161F8E3000577827 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 424CC02F161F8E3000577827 /* IOKit.framework */; };
+		4258369D1A0F2AF400AFDFEB /* WaterSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4258369B1A0F2AF400AFDFEB /* WaterSample.cpp */; };
+		4258369E1A0F2AF400AFDFEB /* WaterSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4258369B1A0F2AF400AFDFEB /* WaterSample.cpp */; };
 		425F3A5617FBCBF00085454F /* libgameplay.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 425F3A5517FBCBF00085454F /* libgameplay.a */; };
 		428F7BDE15CB131A009ED24C /* game.config in Resources */ = {isa = PBXBuildFile; fileRef = 428F7BDD15CB131A009ED24C /* game.config */; };
 		42BE773016A68CE3008AFA65 /* GamepadSample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 42BE772E16A68CE3008AFA65 /* GamepadSample.cpp */; };
@@ -125,6 +127,8 @@
 		422FE592169690830062D1FE /* PostProcessSample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PostProcessSample.cpp; sourceTree = "<group>"; };
 		422FE593169690830062D1FE /* PostProcessSample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PostProcessSample.h; sourceTree = "<group>"; };
 		424CC02F161F8E3000577827 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
+		4258369B1A0F2AF400AFDFEB /* WaterSample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WaterSample.cpp; sourceTree = "<group>"; };
+		4258369C1A0F2AF400AFDFEB /* WaterSample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WaterSample.h; sourceTree = "<group>"; };
 		425F3A5517FBCBF00085454F /* libgameplay.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgameplay.a; path = "/Users/setaylor/Code/GamePlay/samples/character/../../../../Library/Developer/Xcode/DerivedData/gameplay-exiunaubxxjndaapmcqkaoeboiob/Build/Products/Debug-iphoneos/libgameplay.a"; sourceTree = "<absolute>"; };
 		428F7BDD15CB131A009ED24C /* game.config */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = game.config; sourceTree = "<group>"; };
 		42BE772E16A68CE3008AFA65 /* GamepadSample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GamepadSample.cpp; sourceTree = "<group>"; };
@@ -347,6 +351,8 @@
 				420D545515FE430D00AD0B91 /* TextureSample.h */,
 				420D545615FE430D00AD0B91 /* TriangleSample.cpp */,
 				420D545715FE430D00AD0B91 /* TriangleSample.h */,
+				4258369B1A0F2AF400AFDFEB /* WaterSample.cpp */,
+				4258369C1A0F2AF400AFDFEB /* WaterSample.h */,
 			);
 			path = src;
 			sourceTree = "<group>";
@@ -510,6 +516,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				4258369D1A0F2AF400AFDFEB /* WaterSample.cpp in Sources */,
 				42C932F11491A5160098216A /* SamplesGame.cpp in Sources */,
 				420D545815FE430D00AD0B91 /* Audio3DSample.cpp in Sources */,
 				420D545A15FE430D00AD0B91 /* CreateSceneSample.cpp in Sources */,
@@ -539,6 +546,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				4258369E1A0F2AF400AFDFEB /* WaterSample.cpp in Sources */,
 				5B61611614CCC24C0073B857 /* SamplesGame.cpp in Sources */,
 				420D545915FE430D00AD0B91 /* Audio3DSample.cpp in Sources */,
 				420D545B15FE430D00AD0B91 /* CreateSceneSample.cpp in Sources */,

+ 339 - 0
samples/browser/src/WaterSample.cpp

@@ -0,0 +1,339 @@
+#include "WaterSample.h"
+#include "SamplesGame.h"
+
+#if defined(ADD_SAMPLE)
+ADD_SAMPLE("Graphics", "Water", WaterSample, 14);
+#endif
+
+// Camera movement consts
+static const float MOUSE_SPEED = 0.125f;
+static const float MASS = 1.8f;
+static const float FRICTION = 0.9f;
+static const float SPEED = 5.5f;
+static const unsigned int BUFFER_SIZE = 512;
+static const float WATER_OFFSET = 0.55f;
+
+WaterSample::WaterSample()
+    : _font(NULL), _scene(NULL), _cameraNode(NULL),
+    _reflectCameraNode(NULL), _inputMask(0u), _prevX(0),
+     _prevY(0), _waterHeight(0.f), 
+     _refractBuffer(NULL), _refractBatch(NULL), _reflectBuffer(NULL), _reflectBatch(NULL), 
+     _showBuffers(false), _gamepad(NULL)
+{
+}
+
+void WaterSample::initialize()
+{
+    // Create the font for drawing the framerate.
+    _font = Font::create("res/ui/arial.gpb");
+
+    // Load the scene file
+    _scene = Scene::load("res/common/water/watersample.scene");
+    _waterHeight = _scene->findNode("Water")->getTranslationY();
+
+    // Set up a first person style camera
+    const Vector3 camStartPosition(0.f, 10.f, -30.f);
+    _cameraNode = Node::create("cameraNode");
+    _cameraNode->setTranslation(camStartPosition);
+
+    Node* camPitchNode = Node::create();
+    Matrix m;
+    Matrix::createLookAt(_cameraNode->getTranslation(), Vector3::zero(), Vector3::unitY(), &m);
+    camPitchNode->rotate(m);
+    _cameraNode->addChild(camPitchNode);
+    _scene->addNode(_cameraNode);
+    Camera* camera = Camera::createPerspective(45.f, Game::getInstance()->getAspectRatio(), 0.1f, 150.f);
+    camPitchNode->setCamera(camera);
+    _scene->setActiveCamera(camera);
+    SAFE_RELEASE(camera);
+    SAFE_RELEASE(camPitchNode);
+
+    // Add a second camera do draw the reflections
+    _reflectCameraNode = Node::create("reflectCamNode");
+    _reflectCameraNode->setTranslation(camStartPosition.x, -camStartPosition.y, camStartPosition.z);
+    camPitchNode = Node::create();
+    Matrix::createLookAt(_reflectCameraNode->getTranslation(), Vector3::zero(), Vector3::unitY(), &m);
+    camPitchNode->rotate(m);
+    _reflectCameraNode->addChild(camPitchNode);
+    camera = Camera::createPerspective(45.f, Game::getInstance()->getAspectRatio(), 0.1f, 150.f);
+    camPitchNode->setCamera(camera);
+    SAFE_RELEASE(camera);
+    SAFE_RELEASE(camPitchNode);
+
+    // Render buffer and preview for refraction
+    _refractBuffer = FrameBuffer::create("refractBuffer", BUFFER_SIZE, BUFFER_SIZE);
+    DepthStencilTarget* refractDepthTarget = DepthStencilTarget::create("refractDepth", DepthStencilTarget::DEPTH, BUFFER_SIZE, BUFFER_SIZE);
+    _refractBuffer->setDepthStencilTarget(refractDepthTarget);
+    SAFE_RELEASE(refractDepthTarget);
+    _refractBatch = SpriteBatch::create(_refractBuffer->getRenderTarget()->getTexture());
+
+    // Render buffer and preview for reflection
+    _reflectBuffer = FrameBuffer::create("reflectBuffer", BUFFER_SIZE, BUFFER_SIZE);
+    DepthStencilTarget* reflectDepthTarget = DepthStencilTarget::create("reflectDepth", DepthStencilTarget::DEPTH, BUFFER_SIZE, BUFFER_SIZE);
+    _reflectBuffer->setDepthStencilTarget(reflectDepthTarget);
+    SAFE_RELEASE(reflectDepthTarget);
+    _reflectBatch = SpriteBatch::create(_reflectBuffer->getRenderTarget()->getTexture());
+
+    // Add a node to provide light direction
+    Node* lightNode = Node::create("lightNode");
+    lightNode->rotateX(-MATH_DEG_TO_RAD(90));
+    _scene->addNode(lightNode);
+
+    // Bind material properties
+    Material* groundMaterial = _scene->findNode("Ground")->getModel()->getMaterial();
+    groundMaterial->getParameter("u_clipPlane")->bindValue(this, &WaterSample::getClipPlane);
+    groundMaterial->getParameter("u_directionalLightDirection[0]")->bindValue(lightNode, &Node::getForwardVectorView);
+    auto waterMaterial = _scene->findNode("Water")->getModel()->getMaterial();
+    auto refractSampler = Texture::Sampler::create(_refractBuffer->getRenderTarget()->getTexture());
+    waterMaterial->getParameter("u_refractionTexture")->setSampler(refractSampler);
+    SAFE_RELEASE(refractSampler);
+    auto reflectSampler = Texture::Sampler::create(_reflectBuffer->getRenderTarget()->getTexture());
+    waterMaterial->getParameter("u_reflectionTexture")->setSampler(reflectSampler);
+    SAFE_RELEASE(reflectSampler);
+    waterMaterial->getParameter("u_worldViewProjectionReflectionMatrix")->bindValue(this, &WaterSample::getReflectionMatrix);
+    waterMaterial->getParameter("u_time")->bindValue(this, &WaterSample::getTime);
+    SAFE_RELEASE(lightNode);
+
+    setMouseCaptured(true);
+
+    setMultiTouch(true);
+    _gamepad = getGamepad(0);
+    if (_gamepad && _gamepad->isVirtual())
+        _gamepad->getForm()->setEnabled(true);
+
+}
+
+void WaterSample::finalize()
+{
+    setMouseCaptured(false);
+    SAFE_DELETE(_reflectBatch);
+    SAFE_RELEASE(_reflectBuffer);
+    SAFE_DELETE(_refractBatch);
+    SAFE_RELEASE(_refractBuffer);
+    SAFE_RELEASE(_reflectCameraNode);
+    SAFE_RELEASE(_cameraNode);
+    SAFE_RELEASE(_scene);
+    SAFE_RELEASE(_font);
+}
+
+void WaterSample::update(float elapsedTime)
+{
+    Vector2 axis;
+    const float minVal = 0.1f;
+    if (_gamepad && _gamepad->getJoystickCount())
+        _gamepad->getJoystickValues(0, &axis);
+    
+    // Move the camera by applying a force
+    Vector3 force;
+    if ((_inputMask & MOVE_FORWARD) || axis.y > minVal)
+        force += _cameraNode->getFirstChild()->getForwardVectorWorld();
+    if (_inputMask & MOVE_BACKWARD || axis.y < -minVal)
+        force -= _cameraNode->getFirstChild()->getForwardVectorWorld();
+    if (_inputMask & MOVE_LEFT || axis.x < -minVal)
+        force += _cameraNode->getRightVectorWorld();
+    if (_inputMask & MOVE_RIGHT || axis.y > minVal)
+        force -= _cameraNode->getRightVectorWorld();
+    if (force.lengthSquared() > 1.f) force.normalize();
+
+    _cameraAcceleration += force / MASS;
+    _cameraAcceleration *= FRICTION;
+    if (_cameraAcceleration.lengthSquared() < 0.01f)
+        _cameraAcceleration = Vector3::zero();
+    _cameraNode->translate(_cameraAcceleration * SPEED * (elapsedTime / 1000.f));
+    
+    // Make sure the reflection camera follows
+    Vector3 position = _cameraNode->getTranslation();
+    position.y = -position.y + _waterHeight * 2.f;
+    _reflectCameraNode->setTranslation(position);
+}
+
+void WaterSample::render(float elapsedTime)
+{
+    const Vector4 clearColour(0.84f, 0.89f, 1.f, 1.f);
+    
+    // Update the refract buffer
+    FrameBuffer* defaultBuffer = _refractBuffer->bind();
+    Rectangle defaultViewport = getViewport();
+    setViewport(Rectangle(BUFFER_SIZE, BUFFER_SIZE));
+    _clipPlane.y = -1.f;
+    _clipPlane.w = _waterHeight + WATER_OFFSET;
+    clear(CLEAR_COLOR_DEPTH, clearColour, 1.0f, 0);
+    _scene->visit(this, &WaterSample::drawScene, false);
+
+    // Switch plane direction and camera, and update reflection buffer
+    _reflectBuffer->bind();
+    _clipPlane.y = 1.f;
+    _clipPlane.w = -_waterHeight + WATER_OFFSET;
+    Camera* defaultCamera = _scene->getActiveCamera();
+    _scene->setActiveCamera(_reflectCameraNode->getFirstChild()->getCamera());
+
+    // Store the mvp matrix here as it is only valid when reflect camera is active
+    m_worldViewProjectionReflection = _scene->findNode("Water")->getWorldViewProjectionMatrix();
+    clear(CLEAR_COLOR_DEPTH, clearColour, 1.0f, 0);
+    _scene->visit(this, &WaterSample::drawScene, false);
+
+    // Draw the final scene
+    defaultBuffer->bind();
+    setViewport(defaultViewport);
+    _clipPlane = Vector4::zero();
+    _scene->setActiveCamera(defaultCamera);
+    clear(CLEAR_COLOR_DEPTH, clearColour, 1.0f, 0);
+    _scene->visit(this, &WaterSample::drawScene, true);
+
+    // Draw preview if enabled
+    if (_showBuffers)
+    {
+        _refractBatch->start();
+        _refractBatch->draw(Vector3(0.f, 4.f, 0.f), Rectangle(BUFFER_SIZE, BUFFER_SIZE), Vector2(426.f, 240.f));
+        _refractBatch->finish();
+        _reflectBatch->start();
+        _reflectBatch->draw(Vector3(430.f, 4.f, 0.f), Rectangle(BUFFER_SIZE, BUFFER_SIZE), Vector2(426.f, 240.f));
+        _reflectBatch->finish();
+    }
+
+    // Draw the gamepad
+    _gamepad->draw();
+
+    drawFrameRate(_font, Vector4(0, 0.5f, 1, 1), 5, 1, getFrameRate());
+}
+
+void WaterSample::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
+{
+    switch (evt)
+    {
+    case Touch::TOUCH_PRESS:
+        if (x < 75 && y < 50)
+        {
+            // Toggle buffer preview if the user touches the top left corner
+            _showBuffers = !_showBuffers;
+        }
+        _prevX = x;
+        _prevY = y;
+        break;
+    case Touch::TOUCH_RELEASE:
+        _prevX = x;
+        _prevY = y;
+        break;
+    case Touch::TOUCH_MOVE:
+    {
+        int deltaX = x - _prevX;
+        int deltaY = y - _prevY;
+        _prevX = x;
+        _prevY = y;
+        
+        float xMovement = MATH_DEG_TO_RAD(deltaX * 0.25f);
+        float yMovement = MATH_DEG_TO_RAD(-deltaY * 0.25f);
+        _cameraNode->rotateY(-xMovement);
+        _cameraNode->getFirstChild()->rotateX(yMovement);
+        _reflectCameraNode->rotateY(-xMovement);
+        _reflectCameraNode->getFirstChild()->rotateX(-yMovement);
+    }
+        break;
+    };
+}
+
+void WaterSample::keyEvent(Keyboard::KeyEvent evt, int key)
+{
+    if (evt == Keyboard::KEY_PRESS)
+    {
+        switch (key)
+        {
+        case Keyboard::KEY_SPACE:
+            _showBuffers = !_showBuffers;
+            break;
+        case Keyboard::KEY_W:
+        case Keyboard::KEY_UP_ARROW:
+            _inputMask |= MOVE_FORWARD;
+            break;
+        case Keyboard::KEY_S:
+        case Keyboard::KEY_DOWN_ARROW:
+            _inputMask |= MOVE_BACKWARD;
+            break;
+        case Keyboard::KEY_A:
+        case Keyboard::KEY_LEFT_ARROW:
+            _inputMask |= MOVE_LEFT;
+            break;
+        case Keyboard::KEY_D:
+        case Keyboard::KEY_RIGHT_ARROW:
+            _inputMask |= MOVE_RIGHT;
+            break;
+        }
+    }
+    else if (evt == Keyboard::KEY_RELEASE)
+    {
+        switch (key)
+        {
+        case Keyboard::KEY_W:
+        case Keyboard::KEY_UP_ARROW:
+            _inputMask &= ~MOVE_FORWARD;
+            break;
+        case Keyboard::KEY_S:
+        case Keyboard::KEY_DOWN_ARROW:
+            _inputMask &= ~MOVE_BACKWARD;
+            break;
+        case Keyboard::KEY_A:
+        case Keyboard::KEY_LEFT_ARROW:
+            _inputMask &= ~MOVE_LEFT;
+            break;
+        case Keyboard::KEY_D:
+        case Keyboard::KEY_RIGHT_ARROW:
+            _inputMask &= ~MOVE_RIGHT;
+            break;
+        }
+    }
+}
+
+bool WaterSample::mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta)
+{
+    switch (evt)
+    {
+    case Mouse::MOUSE_MOVE:
+    {
+        float xMovement = MATH_DEG_TO_RAD(-x * MOUSE_SPEED);
+        float yMovement = MATH_DEG_TO_RAD(-y * MOUSE_SPEED);
+        _cameraNode->rotateY(xMovement);
+        _cameraNode->getFirstChild()->rotateX(yMovement);
+        _reflectCameraNode->rotateY(xMovement);
+        _reflectCameraNode->getFirstChild()->rotateX(-yMovement);
+    }
+        return true;
+    case Mouse::MOUSE_PRESS_LEFT_BUTTON:
+        _inputMask |= MOVE_FORWARD;
+        return true;
+    case Mouse::MOUSE_RELEASE_LEFT_BUTTON:
+        _inputMask &= ~MOVE_FORWARD;
+        return true;
+    case Mouse::MOUSE_PRESS_RIGHT_BUTTON:
+        _inputMask |= MOVE_BACKWARD;
+        return true;
+    case Mouse::MOUSE_RELEASE_RIGHT_BUTTON:
+        _inputMask &= ~MOVE_BACKWARD;
+        return true;
+    default: return false;
+    }
+    return false;
+}
+
+void WaterSample::gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad)
+{
+    switch (evt)
+    {
+    case Gamepad::CONNECTED_EVENT:
+    case Gamepad::DISCONNECTED_EVENT:
+        _gamepad = getGamepad(0);
+        if (_gamepad && _gamepad->isVirtual())
+            _gamepad->getForm()->setEnabled(true);
+        break;
+    }
+}
+
+bool WaterSample::drawScene(Node* node, bool drawWater)
+{
+    std::string id = node->getId();
+    if (!drawWater && id == "Water") return true;
+    
+    Model* model = node->getModel();
+    if (model)
+        model->draw();
+    return true;
+}

+ 82 - 0
samples/browser/src/WaterSample.h

@@ -0,0 +1,82 @@
+#ifndef WATERSAMPLE_H_
+#define WATERSAMPLE_H_
+
+#include "gameplay.h"
+#include "Sample.h"
+
+using namespace gameplay;
+
+/**
+* Sample creating a water effect.
+*/
+class WaterSample : public Sample
+{
+public:
+
+    WaterSample();
+
+    void touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex);
+    
+    void keyEvent(Keyboard::KeyEvent evt, int key);
+
+    bool mouseEvent(Mouse::MouseEvent evt, int x, int y, int wheelDelta);
+
+    void gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad);
+
+protected:
+
+    void initialize();
+
+    void finalize();
+
+    void update(float elapsedTime);
+
+    void render(float elapsedTime);
+
+private:
+    enum CameraMovement
+    {
+        MOVE_FORWARD     = (1 << 0),
+        MOVE_BACKWARD    = (1 << 1),
+        MOVE_LEFT        = (1 << 2),
+        MOVE_RIGHT       = (1 << 3)
+    };
+
+    Font* _font;
+    Scene* _scene;
+    Node* _cameraNode;
+    Node* _reflectCameraNode;
+
+    Vector3 _cameraAcceleration;
+    float _waterHeight;
+
+    unsigned _inputMask;
+    int _prevX, _prevY;
+
+    FrameBuffer* _refractBuffer;
+    SpriteBatch* _refractBatch;
+    FrameBuffer* _reflectBuffer;
+    SpriteBatch* _reflectBatch;
+
+    bool _showBuffers;
+    Vector4 _clipPlane;
+    const Vector4& getClipPlane() const
+    {
+        return _clipPlane;
+    }
+    Matrix m_worldViewProjectionReflection;
+    const Matrix& getReflectionMatrix() const
+    {
+        return m_worldViewProjectionReflection;
+    }
+
+    float getTime() const
+    {
+        return Game::getGameTime() * 0.0001;
+    }
+
+    Gamepad* _gamepad;
+    bool drawScene(Node* node, bool drawWater);
+};
+
+#endif

+ 1 - 1
samples/character/android/AndroidManifest.xml

@@ -11,7 +11,7 @@
     <application android:icon="@drawable/icon" android:label="@string/app_name" android:hasCode="true">
         <activity android:name="org.gameplay3d.GameNativeActivity"
                   android:label="@string/app_name"
-                  android:configChanges="orientation|keyboardHidden"
+                  android:configChanges="orientation|screenSize|keyboardHidden"
 				  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
 				  android:screenOrientation="landscape">
             <meta-data android:name="android.app.lib_name" android:value="sample-character" />

+ 81 - 0
samples/character/sample-character.pro

@@ -0,0 +1,81 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator
+#
+#-------------------------------------------------
+
+QT -= core gui
+
+TARGET = sample-character
+TEMPLATE = app
+
+SOURCES += src/CharacterGame.cpp
+
+HEADERS += src/CharacterGame.h 
+
+INCLUDEPATH += $$PWD/../../gameplay/src
+INCLUDEPATH += $$PWD/../../external-deps/bullet/include
+INCLUDEPATH += $$PWD/../../external-deps/lua/include
+INCLUDEPATH += $$PWD/../../external-deps/png/include
+INCLUDEPATH += $$PWD/../../external-deps/zlib/include
+INCLUDEPATH += $$PWD/../../external-deps/ogg/include
+INCLUDEPATH += $$PWD/../../external-deps/vorbis/include
+INCLUDEPATH += $$PWD/../../external-deps/openal/include
+linux:!android: INCLUDEPATH += $$PWD/../../external-deps/glew/include
+linux:!android: INCLUDEPATH += /usr/include/gtk-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/gtk-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/atk-1.0
+linux:!android: INCLUDEPATH += /usr/include/cairo
+linux:!android: INCLUDEPATH += /usr/include/gdk-pixbuf-2.0
+linux:!android: INCLUDEPATH += /usr/include/pango-1.0
+linux:!android: INCLUDEPATH += /usr/include/gio-unix-2.0
+linux:!android: INCLUDEPATH += /usr/include/freetype2
+linux:!android: INCLUDEPATH += /usr/include/glib-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/pixman-1
+linux:!android: INCLUDEPATH += /usr/include/libpng12
+linux:!android: INCLUDEPATH += /usr/include/harfbuzz
+DEPENDPATH += INCLUDEPATH
+
+linux:!android: DEFINES += GP_USE_GAMEPAD
+linux:!android: DEFINES += __linux__
+linux:!android: QMAKE_CXXFLAGS += -std=c++11 -lstdc++ -pthread -w
+
+linux:!android: LIBS += -L$$PWD/../../gameplay/Debug/ -lgameplay
+linux:!android: LIBS += -L$$PWD/../../external-deps/lua/lib/linux/x64/ -llua
+linux:!android: LIBS += -L$$PWD/../../external-deps/png/lib/linux/x64/ -lpng
+linux:!android: LIBS += -L$$PWD/../../external-deps/zlib/lib/linux/x64/ -lz
+linux:!android: LIBS += -L$$PWD/../../external-deps/vorbis/lib/linux/x64/ -lvorbis
+linux:!android: LIBS += -L$$PWD/../../external-deps/ogg/lib/linux/x64/ -logg
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletDynamics
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletCollision
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lLinearMath
+linux:!android: LIBS += -L$$PWD/../../external-deps/openal/lib/linux/x64/ -lopenal
+linux:!android: LIBS += -L$$PWD/../../external-deps/glew/lib/linux/x64/ -lGLEW
+linux:!android: LIBS += -lm
+linux:!android: LIBS += -lGL
+linux:!android: LIBS += -lrt
+linux:!android: LIBS += -ldl
+linux:!android: LIBS += -lX11
+linux:!android: LIBS += -lpthread
+linux:!android: LIBS += -lgtk-x11-2.0
+linux:!android: LIBS += -lglib-2.0
+linux:!android: LIBS += -lgobject-2.0
+
+linux:!android: PRE_TARGETDEPS += $$PWD/../../gameplay/Debug/libgameplay.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/lua/lib/linux/x64/liblua.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libLinearMath.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletCollision.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletDynamics.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/png/lib/linux/x64/libpng.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/zlib/lib/linux/x64/libz.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/ogg/lib/linux/x64/libogg.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/vorbis/lib/linux/x64/libvorbis.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/openal/lib/linux/x64/libopenal.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/glew/lib/linux/x64/libGLEW.a
+
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/shaders ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/ui ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(cp -rf $$PWD/../../gameplay/res/logo_powered_white.png ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(cp -rf $$PWD/game.dxt.config ../game.config$$escape_expand(\n\t))
+

+ 1 - 1
samples/lua/android/AndroidManifest.xml

@@ -11,7 +11,7 @@
     <application android:icon="@drawable/icon" android:label="@string/app_name" android:hasCode="true">
         <activity android:name="org.gameplay3d.GameNativeActivity"
                 android:label="@string/app_name"
-                android:configChanges="orientation|keyboardHidden"
+                android:configChanges="orientation|screenSize|keyboardHidden"
 				android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
 				android:screenOrientation="landscape">
             <meta-data android:name="android.app.lib_name" android:value="sample-lua" />

+ 81 - 0
samples/lua/sample-lua.pro

@@ -0,0 +1,81 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator
+#
+#-------------------------------------------------
+
+QT -= core gui
+
+TARGET = sample-lua
+TEMPLATE = app
+
+SOURCES += src/LuaGame.cpp
+
+HEADERS += src/LuaGame.h 
+
+INCLUDEPATH += $$PWD/../../gameplay/src
+INCLUDEPATH += $$PWD/../../external-deps/bullet/include
+INCLUDEPATH += $$PWD/../../external-deps/lua/include
+INCLUDEPATH += $$PWD/../../external-deps/png/include
+INCLUDEPATH += $$PWD/../../external-deps/zlib/include
+INCLUDEPATH += $$PWD/../../external-deps/ogg/include
+INCLUDEPATH += $$PWD/../../external-deps/vorbis/include
+INCLUDEPATH += $$PWD/../../external-deps/openal/include
+linux:!android: INCLUDEPATH += $$PWD/../../external-deps/glew/include
+linux:!android: INCLUDEPATH += /usr/include/gtk-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/gtk-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/atk-1.0
+linux:!android: INCLUDEPATH += /usr/include/cairo
+linux:!android: INCLUDEPATH += /usr/include/gdk-pixbuf-2.0
+linux:!android: INCLUDEPATH += /usr/include/pango-1.0
+linux:!android: INCLUDEPATH += /usr/include/gio-unix-2.0
+linux:!android: INCLUDEPATH += /usr/include/freetype2
+linux:!android: INCLUDEPATH += /usr/include/glib-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/pixman-1
+linux:!android: INCLUDEPATH += /usr/include/libpng12
+linux:!android: INCLUDEPATH += /usr/include/harfbuzz
+DEPENDPATH += INCLUDEPATH
+
+linux:!android: DEFINES += GP_USE_GAMEPAD
+linux:!android: DEFINES += __linux__
+linux:!android: QMAKE_CXXFLAGS += -std=c++11 -lstdc++ -pthread -w
+
+linux:!android: LIBS += -L$$PWD/../../gameplay/Debug/ -lgameplay
+linux:!android: LIBS += -L$$PWD/../../external-deps/lua/lib/linux/x64/ -llua
+linux:!android: LIBS += -L$$PWD/../../external-deps/png/lib/linux/x64/ -lpng
+linux:!android: LIBS += -L$$PWD/../../external-deps/zlib/lib/linux/x64/ -lz
+linux:!android: LIBS += -L$$PWD/../../external-deps/vorbis/lib/linux/x64/ -lvorbis
+linux:!android: LIBS += -L$$PWD/../../external-deps/ogg/lib/linux/x64/ -logg
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletDynamics
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletCollision
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lLinearMath
+linux:!android: LIBS += -L$$PWD/../../external-deps/openal/lib/linux/x64/ -lopenal
+linux:!android: LIBS += -L$$PWD/../../external-deps/glew/lib/linux/x64/ -lGLEW
+linux:!android: LIBS += -lm
+linux:!android: LIBS += -lGL
+linux:!android: LIBS += -lrt
+linux:!android: LIBS += -ldl
+linux:!android: LIBS += -lX11
+linux:!android: LIBS += -lpthread
+linux:!android: LIBS += -lgtk-x11-2.0
+linux:!android: LIBS += -lglib-2.0
+linux:!android: LIBS += -lgobject-2.0
+
+linux:!android: PRE_TARGETDEPS += $$PWD/../../gameplay/Debug/libgameplay.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/lua/lib/linux/x64/liblua.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libLinearMath.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletCollision.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletDynamics.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/png/lib/linux/x64/libpng.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/zlib/lib/linux/x64/libz.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/ogg/lib/linux/x64/libogg.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/vorbis/lib/linux/x64/libvorbis.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/openal/lib/linux/x64/libopenal.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/glew/lib/linux/x64/libGLEW.a
+
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/shaders ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/ui ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(cp -rf $$PWD/../../gameplay/res/logo_powered_white.png ../res$$escape_expand(\n\t))
+
+

+ 1 - 1
samples/mesh/android/AndroidManifest.xml

@@ -11,7 +11,7 @@
     <application android:icon="@drawable/icon" android:label="@string/app_name" android:hasCode="true">
         <activity android:name="org.gameplay3d.GameNativeActivity"
                   android:label="@string/app_name"
-                  android:configChanges="orientation|keyboardHidden"
+                  android:configChanges="orientation|screenSize|keyboardHidden"
 				  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
 				  android:screenOrientation="landscape">
             <meta-data android:name="android.app.lib_name" android:value="sample-mesh" />

+ 80 - 0
samples/mesh/sample-mesh.pro

@@ -0,0 +1,80 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator
+#
+#-------------------------------------------------
+
+QT -= core gui
+
+TARGET = sample-mesh
+TEMPLATE = app
+
+SOURCES += src/MeshGame.cpp
+
+HEADERS += src/MeshGame.h 
+
+INCLUDEPATH += $$PWD/../../gameplay/src
+INCLUDEPATH += $$PWD/../../external-deps/bullet/include
+INCLUDEPATH += $$PWD/../../external-deps/lua/include
+INCLUDEPATH += $$PWD/../../external-deps/png/include
+INCLUDEPATH += $$PWD/../../external-deps/zlib/include
+INCLUDEPATH += $$PWD/../../external-deps/ogg/include
+INCLUDEPATH += $$PWD/../../external-deps/vorbis/include
+INCLUDEPATH += $$PWD/../../external-deps/openal/include
+linux:!android: INCLUDEPATH += $$PWD/../../external-deps/glew/include
+linux:!android: INCLUDEPATH += /usr/include/gtk-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/gtk-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/atk-1.0
+linux:!android: INCLUDEPATH += /usr/include/cairo
+linux:!android: INCLUDEPATH += /usr/include/gdk-pixbuf-2.0
+linux:!android: INCLUDEPATH += /usr/include/pango-1.0
+linux:!android: INCLUDEPATH += /usr/include/gio-unix-2.0
+linux:!android: INCLUDEPATH += /usr/include/freetype2
+linux:!android: INCLUDEPATH += /usr/include/glib-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/pixman-1
+linux:!android: INCLUDEPATH += /usr/include/libpng12
+linux:!android: INCLUDEPATH += /usr/include/harfbuzz
+DEPENDPATH += INCLUDEPATH
+
+linux:!android: DEFINES += GP_USE_GAMEPAD
+linux:!android: DEFINES += __linux__
+linux:!android: QMAKE_CXXFLAGS += -std=c++11 -lstdc++ -pthread -w
+
+linux:!android: LIBS += -L$$PWD/../../gameplay/Debug/ -lgameplay
+linux:!android: LIBS += -L$$PWD/../../external-deps/lua/lib/linux/x64/ -llua
+linux:!android: LIBS += -L$$PWD/../../external-deps/png/lib/linux/x64/ -lpng
+linux:!android: LIBS += -L$$PWD/../../external-deps/zlib/lib/linux/x64/ -lz
+linux:!android: LIBS += -L$$PWD/../../external-deps/vorbis/lib/linux/x64/ -lvorbis
+linux:!android: LIBS += -L$$PWD/../../external-deps/ogg/lib/linux/x64/ -logg
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletDynamics
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletCollision
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lLinearMath
+linux:!android: LIBS += -L$$PWD/../../external-deps/openal/lib/linux/x64/ -lopenal
+linux:!android: LIBS += -L$$PWD/../../external-deps/glew/lib/linux/x64/ -lGLEW
+linux:!android: LIBS += -lm
+linux:!android: LIBS += -lGL
+linux:!android: LIBS += -lrt
+linux:!android: LIBS += -ldl
+linux:!android: LIBS += -lX11
+linux:!android: LIBS += -lpthread
+linux:!android: LIBS += -lgtk-x11-2.0
+linux:!android: LIBS += -lglib-2.0
+linux:!android: LIBS += -lgobject-2.0
+
+linux:!android: PRE_TARGETDEPS += $$PWD/../../gameplay/Debug/libgameplay.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/lua/lib/linux/x64/liblua.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libLinearMath.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletCollision.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletDynamics.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/png/lib/linux/x64/libpng.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/zlib/lib/linux/x64/libz.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/ogg/lib/linux/x64/libogg.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/vorbis/lib/linux/x64/libvorbis.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/openal/lib/linux/x64/libopenal.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/glew/lib/linux/x64/libGLEW.a
+
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/shaders ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/ui ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(cp -rf $$PWD/../../gameplay/res/logo_powered_white.png ../res$$escape_expand(\n\t))
+

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

@@ -121,7 +121,7 @@ void MeshGame::drawFrameRate(Font* font, const Vector4& color, unsigned int x, u
     char buffer[10];
     sprintf(buffer, "%u", fps);
     font->start();
-    font->drawText(buffer, x, y, color, font->getSize());
+    font->drawText(buffer, x, y, color, 20);
     font->finish();
 }
 
@@ -217,4 +217,4 @@ Model* MeshGame::createGridModel(unsigned int lineCount)
     model->setMaterial("res/mesh.material#grid");
     SAFE_RELEASE(mesh);
     return model;
-}
+}

+ 1 - 1
samples/particles/android/AndroidManifest.xml

@@ -11,7 +11,7 @@
     <application android:icon="@drawable/icon" android:label="@string/app_name" android:hasCode="true">
         <activity android:name="org.gameplay3d.GameNativeActivity"
                   android:label="@string/app_name"
-                  android:configChanges="orientation|keyboardHidden"
+                  android:configChanges="orientation|screenSize|keyboardHidden"
 				  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
 				  android:screenOrientation="landscape">
             <meta-data android:name="android.app.lib_name" android:value="sample-particles" />

+ 80 - 0
samples/particles/sample-particles.pro

@@ -0,0 +1,80 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator
+#
+#-------------------------------------------------
+
+QT -= core gui
+
+TARGET = sample-particles
+TEMPLATE = app
+
+SOURCES += src/ParticlesGame.cpp
+
+HEADERS += src/ParticlesGame.h 
+
+INCLUDEPATH += $$PWD/../../gameplay/src
+INCLUDEPATH += $$PWD/../../external-deps/bullet/include
+INCLUDEPATH += $$PWD/../../external-deps/lua/include
+INCLUDEPATH += $$PWD/../../external-deps/png/include
+INCLUDEPATH += $$PWD/../../external-deps/zlib/include
+INCLUDEPATH += $$PWD/../../external-deps/ogg/include
+INCLUDEPATH += $$PWD/../../external-deps/vorbis/include
+INCLUDEPATH += $$PWD/../../external-deps/openal/include
+linux:!android: INCLUDEPATH += $$PWD/../../external-deps/glew/include
+linux:!android: INCLUDEPATH += /usr/include/gtk-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/gtk-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/atk-1.0
+linux:!android: INCLUDEPATH += /usr/include/cairo
+linux:!android: INCLUDEPATH += /usr/include/gdk-pixbuf-2.0
+linux:!android: INCLUDEPATH += /usr/include/pango-1.0
+linux:!android: INCLUDEPATH += /usr/include/gio-unix-2.0
+linux:!android: INCLUDEPATH += /usr/include/freetype2
+linux:!android: INCLUDEPATH += /usr/include/glib-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/pixman-1
+linux:!android: INCLUDEPATH += /usr/include/libpng12
+linux:!android: INCLUDEPATH += /usr/include/harfbuzz
+DEPENDPATH += INCLUDEPATH
+
+linux:!android: DEFINES += GP_USE_GAMEPAD
+linux:!android: DEFINES += __linux__
+linux:!android: QMAKE_CXXFLAGS += -std=c++11 -lstdc++ -pthread -w
+
+linux:!android: LIBS += -L$$PWD/../../gameplay/Debug/ -lgameplay
+linux:!android: LIBS += -L$$PWD/../../external-deps/lua/lib/linux/x64/ -llua
+linux:!android: LIBS += -L$$PWD/../../external-deps/png/lib/linux/x64/ -lpng
+linux:!android: LIBS += -L$$PWD/../../external-deps/zlib/lib/linux/x64/ -lz
+linux:!android: LIBS += -L$$PWD/../../external-deps/vorbis/lib/linux/x64/ -lvorbis
+linux:!android: LIBS += -L$$PWD/../../external-deps/ogg/lib/linux/x64/ -logg
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletDynamics
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletCollision
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lLinearMath
+linux:!android: LIBS += -L$$PWD/../../external-deps/openal/lib/linux/x64/ -lopenal
+linux:!android: LIBS += -L$$PWD/../../external-deps/glew/lib/linux/x64/ -lGLEW
+linux:!android: LIBS += -lm
+linux:!android: LIBS += -lGL
+linux:!android: LIBS += -lrt
+linux:!android: LIBS += -ldl
+linux:!android: LIBS += -lX11
+linux:!android: LIBS += -lpthread
+linux:!android: LIBS += -lgtk-x11-2.0
+linux:!android: LIBS += -lglib-2.0
+linux:!android: LIBS += -lgobject-2.0
+
+linux:!android: PRE_TARGETDEPS += $$PWD/../../gameplay/Debug/libgameplay.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/lua/lib/linux/x64/liblua.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libLinearMath.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletCollision.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletDynamics.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/png/lib/linux/x64/libpng.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/zlib/lib/linux/x64/libz.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/ogg/lib/linux/x64/libogg.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/vorbis/lib/linux/x64/libvorbis.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/openal/lib/linux/x64/libopenal.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/glew/lib/linux/x64/libGLEW.a
+
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/shaders ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/ui ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(cp -rf $$PWD/../../gameplay/res/logo_powered_white.png ../res$$escape_expand(\n\t))
+

+ 1 - 1
samples/racer/android/AndroidManifest.xml

@@ -11,7 +11,7 @@
     <application android:icon="@drawable/icon" android:label="@string/app_name" android:hasCode="true">
         <activity android:name="org.gameplay3d.GameNativeActivity"
                   android:label="@string/app_name"
-                  android:configChanges="orientation|keyboardHidden"
+                  android:configChanges="orientation|screenSize|keyboardHidden"
 				  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
 				  android:screenOrientation="landscape">
             <meta-data android:name="android.app.lib_name"

+ 81 - 0
samples/racer/sample-racer.pro

@@ -0,0 +1,81 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator
+#
+#-------------------------------------------------
+
+QT -= core gui
+
+TARGET = sample-racer
+TEMPLATE = app
+
+SOURCES += src/RacerGame.cpp
+
+HEADERS += src/RacerGame.h 
+
+INCLUDEPATH += $$PWD/../../gameplay/src
+INCLUDEPATH += $$PWD/../../external-deps/bullet/include
+INCLUDEPATH += $$PWD/../../external-deps/lua/include
+INCLUDEPATH += $$PWD/../../external-deps/png/include
+INCLUDEPATH += $$PWD/../../external-deps/zlib/include
+INCLUDEPATH += $$PWD/../../external-deps/ogg/include
+INCLUDEPATH += $$PWD/../../external-deps/vorbis/include
+INCLUDEPATH += $$PWD/../../external-deps/openal/include
+linux:!android: INCLUDEPATH += $$PWD/../../external-deps/glew/include
+linux:!android: INCLUDEPATH += /usr/include/gtk-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/gtk-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/atk-1.0
+linux:!android: INCLUDEPATH += /usr/include/cairo
+linux:!android: INCLUDEPATH += /usr/include/gdk-pixbuf-2.0
+linux:!android: INCLUDEPATH += /usr/include/pango-1.0
+linux:!android: INCLUDEPATH += /usr/include/gio-unix-2.0
+linux:!android: INCLUDEPATH += /usr/include/freetype2
+linux:!android: INCLUDEPATH += /usr/include/glib-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/pixman-1
+linux:!android: INCLUDEPATH += /usr/include/libpng12
+linux:!android: INCLUDEPATH += /usr/include/harfbuzz
+DEPENDPATH += INCLUDEPATH
+
+linux:!android: DEFINES += GP_USE_GAMEPAD
+linux:!android: DEFINES += __linux__
+linux:!android: QMAKE_CXXFLAGS += -std=c++11 -lstdc++ -pthread -w
+
+linux:!android: LIBS += -L$$PWD/../../gameplay/Debug/ -lgameplay
+linux:!android: LIBS += -L$$PWD/../../external-deps/lua/lib/linux/x64/ -llua
+linux:!android: LIBS += -L$$PWD/../../external-deps/png/lib/linux/x64/ -lpng
+linux:!android: LIBS += -L$$PWD/../../external-deps/zlib/lib/linux/x64/ -lz
+linux:!android: LIBS += -L$$PWD/../../external-deps/vorbis/lib/linux/x64/ -lvorbis
+linux:!android: LIBS += -L$$PWD/../../external-deps/ogg/lib/linux/x64/ -logg
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletDynamics
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletCollision
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lLinearMath
+linux:!android: LIBS += -L$$PWD/../../external-deps/openal/lib/linux/x64/ -lopenal
+linux:!android: LIBS += -L$$PWD/../../external-deps/glew/lib/linux/x64/ -lGLEW
+linux:!android: LIBS += -lm
+linux:!android: LIBS += -lGL
+linux:!android: LIBS += -lrt
+linux:!android: LIBS += -ldl
+linux:!android: LIBS += -lX11
+linux:!android: LIBS += -lpthread
+linux:!android: LIBS += -lgtk-x11-2.0
+linux:!android: LIBS += -lglib-2.0
+linux:!android: LIBS += -lgobject-2.0
+
+linux:!android: PRE_TARGETDEPS += $$PWD/../../gameplay/Debug/libgameplay.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/lua/lib/linux/x64/liblua.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libLinearMath.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletCollision.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletDynamics.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/png/lib/linux/x64/libpng.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/zlib/lib/linux/x64/libz.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/ogg/lib/linux/x64/libogg.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/vorbis/lib/linux/x64/libvorbis.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/openal/lib/linux/x64/libopenal.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/glew/lib/linux/x64/libGLEW.a
+
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/shaders ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/ui ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(cp -rf $$PWD/../../gameplay/res/logo_powered_white.png ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(cp -rf $$PWD/game.dxt.config ../game.config$$escape_expand(\n\t))
+

+ 1 - 1
samples/spaceship/android/AndroidManifest.xml

@@ -11,7 +11,7 @@
     <application android:icon="@drawable/icon" android:label="@string/app_name" android:hasCode="true">
         <activity android:name="org.gameplay3d.GameNativeActivity"
                   android:label="@string/app_name"
-                  android:configChanges="orientation|keyboardHidden"
+                  android:configChanges="orientation|screenSize|keyboardHidden"
 				  android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
 				  android:screenOrientation="landscape">
             <meta-data android:name="android.app.lib_name" android:value="sample-spaceship"/>

+ 80 - 0
samples/spaceship/sample-spaceship.pro

@@ -0,0 +1,80 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator
+#
+#-------------------------------------------------
+
+QT -= core gui
+
+TARGET = sample-spaceship
+TEMPLATE = app
+
+SOURCES += src/SpaceshipGame.cpp
+
+HEADERS += src/SpaceshipGame.h 
+
+INCLUDEPATH += $$PWD/../../gameplay/src
+INCLUDEPATH += $$PWD/../../external-deps/bullet/include
+INCLUDEPATH += $$PWD/../../external-deps/lua/include
+INCLUDEPATH += $$PWD/../../external-deps/png/include
+INCLUDEPATH += $$PWD/../../external-deps/zlib/include
+INCLUDEPATH += $$PWD/../../external-deps/ogg/include
+INCLUDEPATH += $$PWD/../../external-deps/vorbis/include
+INCLUDEPATH += $$PWD/../../external-deps/openal/include
+linux:!android: INCLUDEPATH += $$PWD/../../external-deps/glew/include
+linux:!android: INCLUDEPATH += /usr/include/gtk-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/gtk-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/atk-1.0
+linux:!android: INCLUDEPATH += /usr/include/cairo
+linux:!android: INCLUDEPATH += /usr/include/gdk-pixbuf-2.0
+linux:!android: INCLUDEPATH += /usr/include/pango-1.0
+linux:!android: INCLUDEPATH += /usr/include/gio-unix-2.0
+linux:!android: INCLUDEPATH += /usr/include/freetype2
+linux:!android: INCLUDEPATH += /usr/include/glib-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/pixman-1
+linux:!android: INCLUDEPATH += /usr/include/libpng12
+linux:!android: INCLUDEPATH += /usr/include/harfbuzz
+DEPENDPATH += INCLUDEPATH
+
+linux:!android: DEFINES += GP_USE_GAMEPAD
+linux:!android: DEFINES += __linux__
+linux:!android: QMAKE_CXXFLAGS += -std=c++11 -lstdc++ -pthread -w
+
+linux:!android: LIBS += -L$$PWD/../../gameplay/Debug/ -lgameplay
+linux:!android: LIBS += -L$$PWD/../../external-deps/lua/lib/linux/x64/ -llua
+linux:!android: LIBS += -L$$PWD/../../external-deps/png/lib/linux/x64/ -lpng
+linux:!android: LIBS += -L$$PWD/../../external-deps/zlib/lib/linux/x64/ -lz
+linux:!android: LIBS += -L$$PWD/../../external-deps/vorbis/lib/linux/x64/ -lvorbis
+linux:!android: LIBS += -L$$PWD/../../external-deps/ogg/lib/linux/x64/ -logg
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletDynamics
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lBulletCollision
+linux:!android: LIBS += -L$$PWD/../../external-deps/bullet/lib/linux/x64/ -lLinearMath
+linux:!android: LIBS += -L$$PWD/../../external-deps/openal/lib/linux/x64/ -lopenal
+linux:!android: LIBS += -L$$PWD/../../external-deps/glew/lib/linux/x64/ -lGLEW
+linux:!android: LIBS += -lm
+linux:!android: LIBS += -lGL
+linux:!android: LIBS += -lrt
+linux:!android: LIBS += -ldl
+linux:!android: LIBS += -lX11
+linux:!android: LIBS += -lpthread
+linux:!android: LIBS += -lgtk-x11-2.0
+linux:!android: LIBS += -lglib-2.0
+linux:!android: LIBS += -lgobject-2.0
+
+linux:!android: PRE_TARGETDEPS += $$PWD/../../gameplay/Debug/libgameplay.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/lua/lib/linux/x64/liblua.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libLinearMath.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletCollision.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/bullet/lib/linux/x64/libBulletDynamics.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/png/lib/linux/x64/libpng.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/zlib/lib/linux/x64/libz.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/ogg/lib/linux/x64/libogg.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/vorbis/lib/linux/x64/libvorbis.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/openal/lib/linux/x64/libopenal.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/glew/lib/linux/x64/libGLEW.a
+
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/shaders ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/../../gameplay/res/ui ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(cp -rf $$PWD/../../gameplay/res/logo_powered_white.png ../res$$escape_expand(\n\t))
+

+ 2 - 0
template/TEMPLATE_PROJECT-ios.plist

@@ -26,6 +26,8 @@
 	<string>1</string>
 	<key>LSApplicationCategoryType</key>
 	<string>public.app-category.games</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
 	<key>UIStatusBarHidden</key>
 	<true/>
 	<key>UISupportedInterfaceOrientations</key>

+ 80 - 0
template/TEMPLATE_PROJECT.pro

@@ -0,0 +1,80 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator
+#
+#-------------------------------------------------
+
+QT -= core gui
+
+TARGET = TEMPLATE_PROJECT
+TEMPLATE = app
+
+SOURCES += src/TemplateGame.cpp
+
+HEADERS += src/TemplateGame.h
+
+INCLUDEPATH += GAMEPLAY_PATH/gameplay/src
+INCLUDEPATH += GAMEPLAY_PATH/external-deps/bullet/include
+INCLUDEPATH += GAMEPLAY_PATH/external-deps/lua/include
+INCLUDEPATH += GAMEPLAY_PATH/external-deps/png/include
+INCLUDEPATH += GAMEPLAY_PATH/external-deps/zlib/include
+INCLUDEPATH += GAMEPLAY_PATH/external-deps/ogg/include
+INCLUDEPATH += GAMEPLAY_PATH/external-deps/vorbis/include
+INCLUDEPATH += GAMEPLAY_PATH/external-deps/openal/include
+linux:!android: INCLUDEPATH += GAMEPLAY_PATH/external-deps/glew/include
+linux:!android: INCLUDEPATH += /usr/include/gtk-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/gtk-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/atk-1.0
+linux:!android: INCLUDEPATH += /usr/include/cairo
+linux:!android: INCLUDEPATH += /usr/include/gdk-pixbuf-2.0
+linux:!android: INCLUDEPATH += /usr/include/pango-1.0
+linux:!android: INCLUDEPATH += /usr/include/gio-unix-2.0
+linux:!android: INCLUDEPATH += /usr/include/freetype2
+linux:!android: INCLUDEPATH += /usr/include/glib-2.0
+linux:!android: INCLUDEPATH += /usr/lib/x86_64-linux-gnu/glib-2.0/include
+linux:!android: INCLUDEPATH += /usr/include/pixman-1
+linux:!android: INCLUDEPATH += /usr/include/libpng12
+linux:!android: INCLUDEPATH += /usr/include/harfbuzz
+DEPENDPATH += INCLUDEPATH
+
+linux:!android: DEFINES += GP_USE_GAMEPAD
+linux:!android: DEFINES += __linux__
+linux:!android: QMAKE_CXXFLAGS += -std=c++11 -lstdc++ -pthread -w
+
+linux:!android: LIBS += -L$$PWD/GAMEPLAY_PATH/gameplay/Debug/ -lgameplay
+linux:!android: LIBS += -L$$PWD/GAMEPLAY_PATH/external-deps/lua/lib/linux/x64/ -llua
+linux:!android: LIBS += -L$$PWD/GAMEPLAY_PATH/external-deps/png/lib/linux/x64/ -lpng
+linux:!android: LIBS += -L$$PWD/GAMEPLAY_PATH/external-deps/zlib/lib/linux/x64/ -lz
+linux:!android: LIBS += -L$$PWD/GAMEPLAY_PATH/external-deps/vorbis/lib/linux/x64/ -lvorbis
+linux:!android: LIBS += -L$$PWD/GAMEPLAY_PATH/external-deps/ogg/lib/linux/x64/ -logg
+linux:!android: LIBS += -L$$PWD/GAMEPLAY_PATH/external-deps/bullet/lib/linux/x64/ -lBulletDynamics
+linux:!android: LIBS += -L$$PWD/GAMEPLAY_PATH/external-deps/bullet/lib/linux/x64/ -lBulletCollision
+linux:!android: LIBS += -L$$PWD/GAMEPLAY_PATH/external-deps/bullet/lib/linux/x64/ -lLinearMath
+linux:!android: LIBS += -L$$PWD/GAMEPLAY_PATH/external-deps/openal/lib/linux/x64/ -lopenal
+linux:!android: LIBS += -L$$PWD/GAMEPLAY_PATH/external-deps/glew/lib/linux/x64/ -lGLEW
+linux:!android: LIBS += -lm
+linux:!android: LIBS += -lGL
+linux:!android: LIBS += -lrt
+linux:!android: LIBS += -ldl
+linux:!android: LIBS += -lX11
+linux:!android: LIBS += -lpthread
+linux:!android: LIBS += -lgtk-x11-2.0
+linux:!android: LIBS += -lglib-2.0
+linux:!android: LIBS += -lgobject-2.0
+
+linux:!android: PRE_TARGETDEPS += $$PWD/GAMEPLAY_PATH/gameplay/Debug/libgameplay.a
+linux:!android: PRE_TARGETDEPS += $$PWD/GAMEPLAY_PATH/external-deps/lua/lib/linux/x64/liblua.a
+linux:!android: PRE_TARGETDEPS += $$PWD/GAMEPLAY_PATH/external-deps/bullet/lib/linux/x64/libLinearMath.a
+linux:!android: PRE_TARGETDEPS += $$PWD/GAMEPLAY_PATH/external-deps/bullet/lib/linux/x64/libBulletCollision.a
+linux:!android: PRE_TARGETDEPS += $$PWD/GAMEPLAY_PATH/external-deps/bullet/lib/linux/x64/libBulletDynamics.a
+linux:!android: PRE_TARGETDEPS += $$PWD/GAMEPLAY_PATH/external-deps/png/lib/linux/x64/libpng.a
+linux:!android: PRE_TARGETDEPS += $$PWD/GAMEPLAY_PATH/external-deps/zlib/lib/linux/x64/libz.a
+linux:!android: PRE_TARGETDEPS += $$PWD/GAMEPLAY_PATH/external-deps/ogg/lib/linux/x64/libogg.a
+linux:!android: PRE_TARGETDEPS += $$PWD/GAMEPLAY_PATH/external-deps/vorbis/lib/linux/x64/libvorbis.a
+linux:!android: PRE_TARGETDEPS += $$PWD/GAMEPLAY_PATH/external-deps/openal/lib/linux/x64/libopenal.a
+linux:!android: PRE_TARGETDEPS += $$PWD/GAMEPLAY_PATH/external-deps/glew/lib/linux/x64/libGLEW.a
+
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/GAMEPLAY_PATH/gameplay/res/shaders ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(rsync -rau $$PWD/GAMEPLAY_PATH/gameplay/res/ui ../res$$escape_expand(\n\t))
+linux:!android: QMAKE_POST_LINK += $$quote(cp -rf $$PWD/GAMEPLAY_PATH/gameplay/res/logo_powered_white.png ../res$$escape_expand(\n\t))
+

+ 1 - 1
template/android/AndroidManifest.xml

@@ -11,7 +11,7 @@
     <application android:icon="@drawable/icon" android:label="@string/app_name" android:hasCode="true">
         <activity android:name="org.gameplay3d.GameNativeActivity"
                   android:label="@string/app_name"
-                  android:configChanges="screenSize|orientation|keyboardHidden"
+                  android:configChanges="orientation|screenSize|keyboardHidden"
                   android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
                   android:screenOrientation="landscape">
             <meta-data android:name="android.app.lib_name" android:value="TEMPLATE_PROJECT" />

+ 2 - 1
template/template.xcodeproj/project.pbxproj

@@ -660,7 +660,8 @@
 					"GAMEPLAY_PATH/external-deps/bullet/include",
 					"GAMEPLAY_PATH/external-deps/lua/include",
 					"GAMEPLAY_PATH/external-deps/png/include",
-					"GAMEPLAY_PATH/external-deps/oggvorbis/include",
+					"GAMEPLAY_PATH/external-deps/ogg/include",
+					"GAMEPLAY_PATH/external-deps/vorbis/include",
 				);
 				INFOPLIST_FILE = "TEMPLATE_PROJECT-ios.plist";
 				IPHONEOS_DEPLOYMENT_TARGET = 7.1;

+ 3 - 1
tools/encoder/CMakeLists.txt

@@ -7,7 +7,9 @@ include_directories(
     /usr/include
 )
 
+if ( "${CMAKE_BUILD_TYPE}" STREQUAL "DEBUG" )
 add_definitions(-D_DEBUG)
+endif()
 add_definitions(-D__linux__ -DUSE_FBX)
 
 link_directories(
@@ -32,6 +34,7 @@ add_definitions(-lstdc++ -ldl -lfbxsdk -lpng -lz -lfreetype -lpthread)
 set( APP_NAME gameplay-encoder )
 
 set(APP_SRC
+    src/main.cpp
     src/AnimationChannel.cpp
     src/AnimationChannel.h
     src/Animation.cpp
@@ -75,7 +78,6 @@ set(APP_SRC
     src/Image.h
     src/Light.cpp
     src/Light.h
-    src/main.cpp
     src/Material.cpp
     src/Material.h
     src/MaterialParameter.cpp

+ 138 - 0
tools/encoder/gameplay-encoder.pro

@@ -0,0 +1,138 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator
+#
+#-------------------------------------------------
+
+QT       -= core gui
+
+TARGET = gameplay-encoder
+CONFIG   += console
+CONFIG   -= app_bundle
+
+TEMPLATE = app
+
+SOURCES += src/Mesh.cpp \
+    src/AnimationChannel.cpp \
+    src/Animation.cpp \
+    src/Animations.cpp \
+    src/Base.cpp \
+    src/BoundingVolume.cpp \
+    src/Camera.cpp \
+    src/Constants.cpp \
+    src/Curve.cpp \
+    src/edtaa3func.c \
+    src/Effect.cpp \
+    src/EncoderArguments.cpp \
+    src/FBXSceneEncoder.cpp \
+    src/FBXUtil.cpp \
+    src/FileIO.cpp \
+    src/Font.cpp \
+    src/Glyph.cpp \
+    src/GPBDecoder.cpp \
+    src/GPBFile.cpp \
+    src/Heightmap.cpp \
+    src/Image.cpp \
+    src/Light.cpp \
+    src/main.cpp \
+    src/Material.cpp \
+    src/MaterialParameter.cpp \
+    src/Matrix.cpp \
+    src/MeshPart.cpp \
+    src/MeshSkin.cpp \
+    src/MeshSubSet.cpp \
+    src/Model.cpp \
+    src/Node.cpp \
+    src/NormalMapGenerator.cpp \
+    src/Object.cpp \
+    src/Quaternion.cpp \
+    src/Reference.cpp \
+    src/ReferenceTable.cpp \
+    src/Sampler.cpp \
+    src/Scene.cpp \
+    src/StringUtil.cpp \
+    src/Transform.cpp \
+    src/TTFFontEncoder.cpp \
+    src/Vector2.cpp \
+    src/Vector3.cpp \
+    src/Vector4.cpp \
+    src/Vertex.cpp \
+    src/VertexElement.cpp
+
+HEADERS += src/AnimationChannel.h \
+    src/AnimationChannel.h \
+    src/Animation.h \
+    src/Animations.h \
+    src/Base.h \
+    src/BoundingVolume.h \
+    src/Camera.h \
+    src/Constants.h \
+    src/Curve.h \
+    src/Curve.inl \
+    src/edtaa3func.h \
+    src/Effect.h \
+    src/EncoderArguments.h \
+    src/FBXSceneEncoder.h \
+    src/FBXUtil.h \
+    src/FileIO.h \
+    src/Font.h \
+    src/Glyph.h \
+    src/GPBDecoder.h \
+    src/GPBFile.h \
+    src/Heightmap.h \
+    src/Image.h \
+    src/Light.h \
+    src/Material.h \
+    src/MaterialParameter.h \
+    src/Matrix.h \
+    src/Mesh.h \
+    src/MeshPart.h \
+    src/MeshSkin.h \
+    src/MeshSubSet.h \
+    src/Model.h \
+    src/Node.h \
+    src/NormalMapGenerator.h \
+    src/Object.h \
+    src/Quaternion.h \
+    src/Quaternion.inl \
+    src/Reference.h \
+    src/ReferenceTable.h \
+    src/Sampler.h \
+    src/Scene.h \
+    src/StringUtil.h \
+    src/Thread.h \
+    src/Transform.h \
+    src/TTFFontEncoder.h \
+    src/Vector2.h \
+    src/Vector2.inl \
+    src/Vector3.h \
+    src/Vector3.inl \
+    src/Vector4.h \
+    src/Vector4.inl \
+    src/VertexElement.h \
+    src/Vertex.h
+
+INCLUDEPATH += $$PWD/../../external-deps/png/include
+INCLUDEPATH += $$PWD/../../external-deps/zlib/include
+INCLUDEPATH += $$PWD/../../external-deps/freetype2/include
+linux:!android: INCLUDEPATH += /usr/include/fbxsdk
+linux:!android: INCLUDEPATH += /usr/include
+
+DEPENDPATH += INCLUDEPATH
+
+linux:!android: DEFINES += USE_FBX
+linux:!android: DEFINES += __linux__
+
+linux:!android: QMAKE_CXXFLAGS += -std=c++11 -lstdc++ -pthread -w
+
+linux:!android: LIBS += -L$$PWD/../../external-deps/png/lib/linux/x64/ -lpng
+linux:!android: LIBS += -L$$PWD/../../external-deps/zlib/lib/linux/x64/ -lz
+linux:!android: LIBS += -L$$PWD/../../external-deps/freetype2/lib/linux/x64/ -lfreetype
+linux:!android: LIBS += -L/usr/lib/gcc4/x64/release -lfbxsdk
+linux:!android: LIBS += -lstdc++
+linux:!android: LIBS += -ldl
+linux:!android: LIBS += -lpthread
+
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/png/lib/linux/x64/libpng.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/zlib/lib/linux/x64/libz.a
+linux:!android: PRE_TARGETDEPS += /usr/lib/gcc4/x64/release/libfbxsdk.a

+ 1 - 1
tools/luagen/CMakeLists.txt

@@ -23,6 +23,7 @@ add_definitions(-lstdc++ -llua -ltinyxml2)
 set( APP_NAME gameplay-luagen )
 
 set(APP_SRC
+    src/main.cpp
     src/Base.h
     src/ClassBinding.cpp
     src/ClassBinding.h
@@ -33,7 +34,6 @@ set(APP_SRC
     src/FunctionBinding.h
     src/Generator.cpp
     src/Generator.h
-    src/main.cpp
     src/TypedefBinding.h
 )
 

+ 45 - 0
tools/luagen/gameplay-luagen.pro

@@ -0,0 +1,45 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator
+#
+#-------------------------------------------------
+
+QT       -= core gui
+
+TARGET = gameplay-luagen
+CONFIG   += console
+CONFIG   -= app_bundle
+
+TEMPLATE = app
+
+SOURCES += src/main.cpp \
+    src/ClassBinding.cpp \
+    src/DebugNew.cpp \
+    src/FunctionBinding.cpp \
+    src/Generator.cpp
+
+
+HEADERS += src/Base.h \
+    src/ClassBinding.h \
+    src/DebugNew.h \
+    src/EnumBinding.h \
+    src/FunctionBinding.h \
+    src/Generator.h \
+    src/TypedefBinding.h
+
+INCLUDEPATH += $$PWD/../../external-deps/lua/include
+INCLUDEPATH += $$PWD/../../external-deps/tinyxml2/include
+
+DEPENDPATH += INCLUDEPATH
+
+linux:!android: DEFINES += __linux__
+
+linux:!android: QMAKE_CXXFLAGS += -std=c++11 -lstdc++ -pthread -w
+
+linux:!android: LIBS += -L$$PWD/../../external-deps/lua/lib/linux/x64/ -llua
+linux:!android: LIBS += -L$$PWD/../../external-deps/tinyxml2/lib/linux/x64/ -ltinyxml2
+linux:!android: LIBS += -lstdc++
+
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/lua/lib/linux/x64/liblua.a
+linux:!android: PRE_TARGETDEPS += $$PWD/../../external-deps/tinyxml2/lib/linux/x64/libtinyxml2.a
+

+ 8 - 8
tools/luagen/src/DebugNew.cpp

@@ -46,42 +46,42 @@ void* operator new[] (std::size_t size, const char* file, int line)
     return operator new (size, file, line);
 }
 
-void* operator new (std::size_t size) throw(std::bad_alloc)
+void* operator new (std::size_t size)
 {
     return operator new (size, "", 0);
 }
 
-void* operator new[] (std::size_t size) throw(std::bad_alloc)
+void* operator new[] (std::size_t size)
 {
     return operator new (size, "", 0);
 }
 
-void* operator new (std::size_t size, const std::nothrow_t&) throw()
+void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept
 {
     return operator new (size, "", 0);
 }
 
-void* operator new[] (std::size_t size, const std::nothrow_t&) throw()
+void* operator new[] (std::size_t size, const std::nothrow_t& nothrow_value) noexcept
 {
     return operator new (size, "", 0);
 }
 
-void operator delete (void* p) throw()
+void operator delete (void* p) noexcept
 {
     debugFree(p);
 }
 
-void operator delete[] (void* p) throw()
+void operator delete[] (void* p) noexcept
 {
     operator delete (p);
 }
 
-void operator delete (void* p, const char* file, int line) throw()
+void operator delete (void* p, const char* file, int line) noexcept
 {
     operator delete (p);
 }
 
-void operator delete[] (void* p, const char* file, int line) throw()
+void operator delete[] (void* p, const char* file, int line) noexcept
 {
     operator delete (p);
 }

+ 8 - 8
tools/luagen/src/DebugNew.h

@@ -16,14 +16,14 @@ extern void printMemoryLeaks();
 #endif
 void* operator new (std::size_t size, const char* file, int line);
 void* operator new[] (std::size_t size, const char* file, int line);
-void* operator new (std::size_t size) throw(std::bad_alloc);
-void* operator new[] (std::size_t size) throw(std::bad_alloc);
-void* operator new (std::size_t size, const std::nothrow_t&) throw();
-void* operator new[] (std::size_t size, const std::nothrow_t&) throw();
-void operator delete (void* p) throw();
-void operator delete[] (void* p) throw();
-void operator delete (void* p, const char* file, int line) throw();
-void operator delete[] (void* p, const char* file, int line) throw();
+void* operator new (std::size_t size);
+void* operator new[] (std::size_t size);
+void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;
+void* operator new[] (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;
+void operator delete (void* p) noexcept;
+void operator delete[] (void* p) noexcept;
+void operator delete (void* p, const char* file, int line) noexcept;
+void operator delete[] (void* p, const char* file, int line) noexcept;
 #ifdef _MSC_VER
 #pragma warning( default : 4290 )
 #endif