Browse Source

Merge pull request #236 from blackberry-gaming/next

Next
Sean Paul Taylor 13 năm trước cách đây
mục cha
commit
d696ae5128
48 tập tin đã thay đổi với 384 bổ sung104 xóa
  1. 68 9
      gameplay-encoder/src/DAESceneEncoder.cpp
  2. 2 0
      gameplay-encoder/src/DAESceneEncoder.h
  3. 130 0
      gameplay-encoder/src/DAEUtil.cpp
  4. 67 1
      gameplay-encoder/src/DAEUtil.h
  5. 1 1
      gameplay-encoder/src/EncoderArguments.cpp
  6. 1 1
      gameplay-encoder/src/EncoderArguments.h
  7. 16 1
      gameplay-encoder/src/GPBFile.cpp
  8. 8 0
      gameplay-encoder/src/GPBFile.h
  9. 1 1
      gameplay-encoder/src/MeshSkin.cpp
  10. 1 1
      gameplay-encoder/src/Quaternion.h
  11. 2 2
      gameplay-encoder/src/Vector2.h
  12. 2 2
      gameplay-encoder/src/Vector3.h
  13. 2 2
      gameplay-encoder/src/Vector4.h
  14. 7 7
      gameplay.sln
  15. 1 1
      gameplay/src/AIAgent.h
  16. 2 2
      gameplay/src/AIController.h
  17. 8 8
      gameplay/src/AIMessage.h
  18. 1 1
      gameplay/src/AIStateMachine.h
  19. 1 1
      gameplay/src/Container.h
  20. 2 2
      gameplay/src/Control.h
  21. 1 1
      gameplay/src/FileSystem.h
  22. 1 1
      gameplay/src/Frustum.h
  23. 5 5
      gameplay/src/Game.h
  24. 1 1
      gameplay/src/Joint.h
  25. 1 1
      gameplay/src/Material.h
  26. 1 1
      gameplay/src/MaterialParameter.h
  27. 4 4
      gameplay/src/Mesh.h
  28. 6 6
      gameplay/src/MeshBatch.h
  29. 1 1
      gameplay/src/Model.h
  30. 1 1
      gameplay/src/Node.h
  31. 1 1
      gameplay/src/Pass.h
  32. 2 2
      gameplay/src/PhysicsCharacter.h
  33. 5 5
      gameplay/src/PhysicsCollisionShape.h
  34. 4 4
      gameplay/src/PhysicsController.h
  35. 1 1
      gameplay/src/PhysicsRigidBody.h
  36. 2 2
      gameplay/src/Platform.h
  37. 1 1
      gameplay/src/Properties.h
  38. 1 1
      gameplay/src/Quaternion.h
  39. 1 1
      gameplay/src/RenderState.h
  40. 1 1
      gameplay/src/Scene.h
  41. 6 6
      gameplay/src/ScriptController.h
  42. 1 1
      gameplay/src/TextBox.h
  43. 2 2
      gameplay/src/Texture.h
  44. 2 2
      gameplay/src/Vector2.h
  45. 2 2
      gameplay/src/Vector3.h
  46. 2 2
      gameplay/src/Vector4.h
  47. 3 3
      gameplay/src/VertexAttributeBinding.h
  48. 2 2
      gameplay/src/VertexFormat.h

+ 68 - 9
gameplay-encoder/src/DAESceneEncoder.cpp

@@ -34,21 +34,79 @@ unsigned int getMaxOffset(domInputLocalOffset_Array& inputArray)
     return maxOffset;
 }
 
+/**
+ * Prompts the user if they want to group animations automatically.
+ * If the user enters an invalid response, the question is asked again.
+ * 
+ * @return True if the user wants to group animations, false otherwise.
+ */
+bool promptUserGroupAnimations()
+{
+    char buffer[80];
+    for (;;)
+    {
+        printf("Do you want to group animations ? (y/n)\n");
+        std::cin.getline(buffer, 80);
+        
+        if (buffer[0] == 'y' || buffer[0] == 'Y' || buffer[0] == '\0')
+        {
+            return true;
+        }
+        else if (buffer[0] == 'n' || buffer[0] == 'N')
+        {
+            return false;
+        }
+    }
+}
+
 void DAESceneEncoder::optimizeCOLLADA(const EncoderArguments& arguments, domCOLLADA* dom)
 {
-    DAEOptimizer optimizer(dom);
     const std::vector<std::string>& groupAnimatioNodeIds = arguments.getGroupAnimationNodeId();
     const std::vector<std::string>& groupAnimatioIds = arguments.getGroupAnimationAnimationId();
     assert(groupAnimatioNodeIds.size() == groupAnimatioIds.size());
-    size_t size = groupAnimatioNodeIds.size();
-    if (size > 0)
+    if (!groupAnimatioNodeIds.empty())
     {
-        begin();
-        for (size_t i = 0; i < size; ++i)
+        size_t size = groupAnimatioNodeIds.size();
+        if (size > 0)
         {
-            optimizer.combineAnimations(groupAnimatioNodeIds[i], groupAnimatioIds[i]);
+            DAEOptimizer optimizer(dom);
+            begin();
+            for (size_t i = 0; i < size; ++i)
+            {
+                optimizer.combineAnimations(groupAnimatioNodeIds[i], groupAnimatioIds[i]);
+            }
+            end("groupAnimation");
+        }
+    }
+    else
+    {
+        // Determine if there are any mesh skins that are animated that have more than 1 animation targeting its joints.
+        // (candidates for grouping)
+        std::vector<std::string> nodeIds;
+        if (findGroupAnimationNodes(dom, nodeIds))
+        {
+            // Ask the user if they want to group animations automatically.
+            if (promptUserGroupAnimations())
+            {
+                printf("Grouping animations...\n");
+
+                DAEOptimizer optimizer(dom);
+                begin();
+                char buffer[20];
+                size_t size = nodeIds.size();
+                for (size_t i = 0; i < size; ++i)
+                {
+                    // In COLLADA, ids must be unique but they don't have to be unique in GPB.
+                    // Save the animation id as "animations___#" and then rename it once the GPB objects are created
+                    // but before the GPB is written to file.
+                    sprintf(buffer, "animations___%d", i);
+                    std::string animationId(buffer);
+                    _tempGroupAnimationIds.push_back(animationId);
+                    optimizer.combineAnimations(nodeIds[i], animationId);
+                }
+                end("groupAnimation");
+            }
         }
-        end("groupAnimation");
     }
     if (arguments.DAEOutputEnabled())
     {
@@ -306,6 +364,7 @@ void DAESceneEncoder::write(const std::string& filepath, const EncoderArguments&
     end("loadAnimations");
 
     _gamePlayFile.adjust();
+    _gamePlayFile.renameAnimations(_tempGroupAnimationIds, "animations");
 
     // Write the output file
     std::string outputFilePath = arguments.getOutputFilePath();
@@ -626,7 +685,7 @@ bool DAESceneEncoder::loadTarget(const domChannelRef& channelRef, AnimationChann
             }
             else if (type == domMatrix::ID())
             {
-                // If the animation is targetting a matrix then convert it into
+                // If the animation is targeting a matrix then convert it into
                 // a scale, rotate, translate animation by decomposing the matrix.
                 targetProperty = Transform::ANIMATE_SCALE_ROTATE_TRANSLATE;
 
@@ -1333,7 +1392,7 @@ Model* DAESceneEncoder::loadSkin(const domSkin* skinElement)
             std::vector<std::string> list;
             getJointNames(source, list);
 
-            // Go through the joint list and conver them from sid to id because the sid information is
+            // Go through the joint list and convert them from sid to id because the sid information is
             // lost when converting to the gameplay binary format.
             for (std::vector<std::string>::iterator i = list.begin(); i != list.end(); i++)
             {

+ 2 - 0
gameplay-encoder/src/DAESceneEncoder.h

@@ -204,6 +204,8 @@ private:
     float* _vertexBlendWeights;
     unsigned int* _vertexBlendIndices;
 
+    std::vector<std::string> _tempGroupAnimationIds;
+
     clock_t _begin;
 };
 

+ 130 - 0
gameplay-encoder/src/DAEUtil.cpp

@@ -1,3 +1,4 @@
+#include <set>
 #include "Base.h"
 #include "DAEUtil.h"
 #include "StringUtil.h"
@@ -421,4 +422,133 @@ domVisual_scene* getVisualScene(const domCOLLADA::domSceneRef& domScene)
     return NULL;
 }
 
+domNode* getParent(domNodeRef node)
+{
+    daeElement* parent = node->getParent();
+    if (parent && parent->getElementType() == COLLADA_TYPE::NODE)
+    {
+        domNodeRef parentNode = daeSafeCast<domNode>(parent);
+        return parentNode.cast();
+    }
+    return NULL;
+}
+
+domAnimation* getAnimation(domChannelRef channel)
+{
+    daeElement* parent = channel->getParent();
+    if (parent && parent->getElementType() == COLLADA_TYPE::ANIMATION)
+    {
+        domAnimationRef parentNode = daeSafeCast<domAnimation>(parent);
+        return parentNode.cast();
+    }
+    return NULL;
+}
+
+domNode* getCommonNodeAncestor(std::list<domNodeRef>& nodes)
+{
+    if (nodes.empty())
+        return NULL;
+    if (nodes.size() == 1)
+        return nodes.begin()->cast();
+
+    std::list<domNode*> ancestors;
+    size_t minAncestorCount = INT_MAX;
+    for (std::list<domNodeRef>::iterator it = nodes.begin(); it != nodes.end(); ++it)
+    {
+        domNodeRef& node = *it;
+        getNodeAncestors(node, ancestors);
+        ancestors.push_back(node.cast());
+        minAncestorCount = std::min(minAncestorCount, ancestors.size());
+    }
+    ancestors.resize(minAncestorCount);
+
+    return ancestors.back();
+}
+
+void getNodeAncestors(domNodeRef& node, std::list<domNode*>& ancestors)
+{
+    ancestors.clear();
+    domNode* parent = getParent(node);
+    while (parent != NULL)
+    {
+        ancestors.push_front(parent);
+        parent = getParent(parent);
+    }
+}
+
+bool findGroupAnimationNodes(domCOLLADA* dom, std::vector<std::string>& nodesToGroup)
+{
+    bool groupPossible = false;
+    const domLibrary_controllers_Array& controllersArrays = dom->getLibrary_controllers_array();
+    size_t controllersArraysCount = controllersArrays.getCount();
+    for (size_t i = 0; i < controllersArraysCount; ++i)
+    {
+        const domLibrary_controllersRef& libraryController = controllersArrays.get(i);
+        const domController_Array& controllerArray = libraryController->getController_array();
+        size_t controllerCount = controllerArray.getCount();
+        for (size_t j = 0; j < controllerCount; ++j)
+        {
+            const domControllerRef& controllerRef = controllerArray.get(j);
+            const domSkinRef& skinRef = controllerRef->getSkin();
+            if (skinRef.cast() != NULL)
+            {
+                domSkin::domJointsRef joints = skinRef->getJoints();
+                domInputLocal_Array& jointInputs = joints->getInput_array();
+                for (unsigned int i = 0; i < jointInputs.getCount(); ++i)
+                {
+                    domInputLocalRef input = jointInputs.get(i);
+                    std::string inputSemantic = std::string(input->getSemantic());
+                    domURIFragmentType* sourceURI = &input->getSource();
+                    sourceURI->resolveElement();
+                    const domSourceRef source = (domSource*)(daeElement*)sourceURI->getElement();
+                    if (equals(inputSemantic, "JOINT"))
+                    {
+                        std::list<domChannelRef> channels;
+                        std::list<domNodeRef> nodes;
+                        findChannelsTargetingJoints(source, channels, nodes);
+                        // If the channels don't share the same animation then they can be grouped.
+                        if (!sameAnimation(channels))
+                        {
+                            groupPossible = true;
+                            domNode* parentMost = getCommonNodeAncestor(nodes);
+                            nodesToGroup.push_back(parentMost->getId());
+                        }
+                    }
+                }
+            }
+        }
+    }
+    return groupPossible;
+}
+
+bool sameAnimation(std::list<domChannelRef>& channels)
+{
+    std::list<domChannelRef>::iterator it = channels.begin();
+    domAnimation* temp = getAnimation(*it);
+    ++it;
+    for (; it != channels.end(); ++it)
+    {
+        if (getAnimation(*it) != temp)
+            return false;
+    }
+    return true;
+}
+
+void findChannelsTargetingJoints(const domSourceRef& source, std::list<domChannelRef>& channels, std::list<domNodeRef>& nodes)
+{
+    std::vector<std::string> jointNames;
+    getJointNames(source, jointNames);
+    for (std::vector<std::string>::iterator i = jointNames.begin(); i != jointNames.end(); i++)
+    {
+        daeSIDResolver resolver(source->getDocument()->getDomRoot(), i->c_str());
+        daeElement* element = resolver.getElement();
+        if (element && element->getElementType() == COLLADA_TYPE::NODE)
+        {
+            domNodeRef node = daeSafeCast<domNode>(element);
+            nodes.push_back(node);
+            getAnimationChannels(node, channels);
+        }
+    }
+}
+
 }

+ 67 - 1
gameplay-encoder/src/DAEUtil.h

@@ -126,12 +126,78 @@ bool isEmptyAnimation(domAnimationRef& animation);
 /**
  * Gets the visual scene from the given COLLADA dom scene.
  * 
- * @param COLLADA dom scene.
+ * @param domScene The dom scene.
  * 
  * @return The visual scene or NULL if not found.
  */
 domVisual_scene* getVisualScene(const domCOLLADA::domSceneRef& domScene);
 
+/**
+ * Returns the parent node of the given node or NULL if there is no parent.
+ * 
+ * @param node The node to get the parent for.
+ * 
+ * @return The parent node or NULL if the node does not have a parent node.
+ */
+domNode* getParent(domNodeRef node);
+
+/**
+ * Returns the animation for the given channel.
+ * 
+ * @param channel The animation channel to get the animation for.
+ * 
+ * @return The animation of the channel or NULL if the channel does not belong to an animation.
+ */
+domAnimation* getAnimation(domChannelRef channel);
+
+/**
+ * Gets the common node ancestor for the given list of nodes.
+ * This function assumes that the nodes share a common ancestor.
+ * 
+ * @param nodes The list of nodes.
+ * 
+ * @return The common node ancestor or NULL if the list of was empty.
+ */
+domNode* getCommonNodeAncestor(std::list<domNodeRef>& nodes);
+
+/**
+ * Gets the list of node ancestors for the given node.
+ * 
+ * @param node The node to get the ancestors for.
+ * @param ancestors The output list of ancestors. 
+ *                  The first element is the root node and the last element is the direct parent of the node.
+ */
+void getNodeAncestors(domNodeRef& node, std::list<domNode*>& ancestors);
+
+/**
+ * Finds the nodes that can be automatically grouped because there is a mesh skin that has joints 
+ * that are being targetted by animations that are not grouped.
+ * 
+ * @param dom The COLLADA dom.
+ * @param nodesToGroup The list of node IDs that can have their animations automatically grouped under.
+ * 
+ * @return True if there are mesh skins that can have their animations grouped, false otherwise.
+ */
+bool findGroupAnimationNodes(domCOLLADA* dom, std::vector<std::string>& nodesToGroup);
+
+/**
+ * Returns true if the list of animation channels share the same animation.
+ * 
+ * @param channels The list of channels.
+ * 
+ * @return True if the channels share the same animation, false otherwis.
+ */ 
+bool sameAnimation(std::list<domChannelRef>& channels);
+
+/**
+ * Finds the animation channels that target the given joints and the list of nodes that are targetted by those channels.
+ * 
+ * @param source The source element to get the list of joints from.
+ * @param channels The output list of channels.
+ * @param nodes The output list of nodes.
+ */
+void findChannelsTargetingJoints(const domSourceRef& source, std::list<domChannelRef>& channels, std::list<domNodeRef>& nodes);
+
 }
 
 #endif

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

@@ -180,7 +180,7 @@ void EncoderArguments::printUsage() const
     fprintf(stderr,"  -i <id>\t\tFilter by node ID.\n");
     fprintf(stderr,"  -t\t\t\tWrite text/xml.\n");
     fprintf(stderr,"  -g <node id> <animation id>\n" \
-        "\t\t\tGroup all animation channels targetting the nodes into a new animation.\n");
+        "\t\t\tGroup all animation channels targeting the nodes into a new animation.\n");
     fprintf(stderr,"  -h \"<node ids>\"\n" \
         "\t\t\tList of nodes to generate heightmaps for.\n" \
         "\t\t\tNode id list should be in quotes with a space between each id.\n" \

+ 1 - 1
gameplay-encoder/src/EncoderArguments.h

@@ -76,7 +76,7 @@ public:
     const std::vector<std::string>& getHeightmapNodeIds() const;
 
     /**
-     * Returns true if an error occured while parsing the command line arguments.
+     * Returns true if an error occurred while parsing the command line arguments.
      */
     bool parseErrorOccured() const;
 

+ 16 - 1
gameplay-encoder/src/GPBFile.cpp

@@ -300,10 +300,25 @@ void GPBFile::adjust()
     //
     // merge animations if possible
     //   Search for animations that have the same target and key times and see if they can be merged.
-    //   Blender will output a simple translation animation to 3 separate animations with the same key times but targetting X, Y and Z.
+    //   Blender will output a simple translation animation to 3 separate animations with the same key times but targeting X, Y and Z.
     //   This can be merged into one animation. Same for scale animations.
 }
 
+void GPBFile::renameAnimations(std::vector<std::string>& animationIds, const char* newId)
+{
+    const unsigned int animationCount = _animations.getAnimationCount();
+    for (unsigned int animationIndex = 0; animationIndex < animationCount; ++animationIndex)
+    {
+        Animation* animation = _animations.getAnimation(animationIndex);
+        assert(animation);
+        std::vector<std::string>::const_iterator it = find(animationIds.begin(), animationIds.end(), animation->getId());
+        if (it != animationIds.end())
+        {
+            animation->setId(newId);
+        }
+    }
+}
+
 void GPBFile::computeBounds(Node* node)
 {
     assert(node);

+ 8 - 0
gameplay-encoder/src/GPBFile.h

@@ -102,6 +102,14 @@ public:
      */
     void adjust();
 
+    /**
+     * Renames the animations in the list of animation ids to the new animation id.
+     * 
+     * @param animationIds The list of animations to rename.
+     * @param newId The new animation id.
+     */
+    void renameAnimations(std::vector<std::string>& animationIds, const char* newId);
+
 private:
     /**
      * Computes the bounds of all meshes in the node hierarchy.

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

@@ -340,7 +340,7 @@ void MeshSkin::computeBounds()
     DEBUGPRINT("\n");
 
     // Compute a total combined bounding volume for the MeshSkin that contains all possible
-    // vertex positions for all animations targetting the skin. This rough approximation allows
+    // vertex positions for all animations targeting the skin. This rough approximation allows
     // us to store a volume that can be used for rough intersection tests (such as for visibility
     // determination) efficiently at runtime.
 

+ 1 - 1
gameplay-encoder/src/Quaternion.h

@@ -14,7 +14,7 @@ class Matrix;
  *
  * Quaternions are typically used as a replacement for euler angles and rotation matrices as a way to achieve smooth interpolation and avoid gimbal lock.
  *
- * Note that this quaternion class does not automatically keep the quaternion normalized. Therefore, care must be taken to normalize the quaternion when neccessary, by calling the normalize method.
+ * Note that this quaternion class does not automatically keep the quaternion normalized. Therefore, care must be taken to normalize the quaternion when necessary, by calling the normalize method.
  * The package provides three methods for doing quaternion interpolation: lerp, slerp, and squad.
  *
  * lerp (linear interpolation): the interpolation curve gives a straight line in quaternion space. It is simple and fast to compute. The only problem is that it does not provide constant angular velocity. Note that a constant velocity is not necessarily a requirement for a curve;

+ 2 - 2
gameplay-encoder/src/Vector2.h

@@ -163,7 +163,7 @@ public:
     /**
      * Returns the squared distance between this vector and v.
      *
-     * When it is not neccessary to get the exact distance between
+     * When it is not necessary to get the exact distance between
      * two vectors (for example, when simply comparing the
      * distance between different vectors), it is advised to use
      * this method instead of distance.
@@ -207,7 +207,7 @@ public:
     /**
      * Returns the squared length of this vector.
      *
-     * When it is not neccessary to get the exact length of a
+     * When it is not necessary to get the exact length of a
      * vector (for example, when simply comparing the lengths of
      * different vectors), it is advised to use this method
      * instead of length.

+ 2 - 2
gameplay-encoder/src/Vector3.h

@@ -210,7 +210,7 @@ public:
     /**
      * Returns the squared distance between this vector and v.
      *
-     * When it is not neccessary to get the exact distance between
+     * When it is not necessary to get the exact distance between
      * two vectors (for example, when simply comparing the
      * distance between different vectors), it is advised to use
      * this method instead of distance.
@@ -254,7 +254,7 @@ public:
     /**
      * Returns the squared length of this vector.
      *
-     * When it is not neccessary to get the exact length of a
+     * When it is not necessary to get the exact length of a
      * vector (for example, when simply comparing the lengths of
      * different vectors), it is advised to use this method
      * instead of length.

+ 2 - 2
gameplay-encoder/src/Vector4.h

@@ -201,7 +201,7 @@ public:
     /**
      * Returns the squared distance between this vector and v.
      *
-     * When it is not neccessary to get the exact distance between
+     * When it is not necessary to get the exact distance between
      * two vectors (for example, when simply comparing the
      * distance between different vectors), it is advised to use
      * this method instead of distance.
@@ -245,7 +245,7 @@ public:
     /**
      * Returns the squared length of this vector.
      *
-     * When it is not neccessary to get the exact length of a
+     * When it is not necessary to get the exact length of a
      * vector (for example, when simply comparing the lengths of
      * different vectors), it is advised to use this method
      * instead of length.

+ 7 - 7
gameplay.sln

@@ -28,7 +28,7 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample00-mesh", "gameplay-s
 		{1032BA4B-57EB-4348-9E03-29DD63E80E4A} = {1032BA4B-57EB-4348-9E03-29DD63E80E4A}
 	EndProjectSection
 EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample05-lua", "gameplay-samples\sample05-lua\sample05-lua.vcxproj", "{04EAF3E5-0F9E-AF4D-53F9-269CE114211F}"
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sample05-lua", "gameplay-samples\sample05-lua\sample05-lua.vcxproj", "{C220DB61-B43A-9628-54DF-7285E1F597C8}"
 	ProjectSection(ProjectDependencies) = postProject
 		{1032BA4B-57EB-4348-9E03-29DD63E80E4A} = {1032BA4B-57EB-4348-9E03-29DD63E80E4A}
 	EndProjectSection
@@ -76,12 +76,12 @@ Global
 		{D672DC66-3CE0-4878-B0D2-813CA731012F}.DebugMem|Win32.Build.0 = DebugMem|Win32
 		{D672DC66-3CE0-4878-B0D2-813CA731012F}.Release|Win32.ActiveCfg = Release|Win32
 		{D672DC66-3CE0-4878-B0D2-813CA731012F}.Release|Win32.Build.0 = Release|Win32
-		{04EAF3E5-0F9E-AF4D-53F9-269CE114211F}.Debug|Win32.ActiveCfg = Debug|Win32
-		{04EAF3E5-0F9E-AF4D-53F9-269CE114211F}.Debug|Win32.Build.0 = Debug|Win32
-		{04EAF3E5-0F9E-AF4D-53F9-269CE114211F}.DebugMem|Win32.ActiveCfg = DebugMem|Win32
-		{04EAF3E5-0F9E-AF4D-53F9-269CE114211F}.DebugMem|Win32.Build.0 = DebugMem|Win32
-		{04EAF3E5-0F9E-AF4D-53F9-269CE114211F}.Release|Win32.ActiveCfg = Release|Win32
-		{04EAF3E5-0F9E-AF4D-53F9-269CE114211F}.Release|Win32.Build.0 = Release|Win32
+		{C220DB61-B43A-9628-54DF-7285E1F597C8}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C220DB61-B43A-9628-54DF-7285E1F597C8}.Debug|Win32.Build.0 = Debug|Win32
+		{C220DB61-B43A-9628-54DF-7285E1F597C8}.DebugMem|Win32.ActiveCfg = DebugMem|Win32
+		{C220DB61-B43A-9628-54DF-7285E1F597C8}.DebugMem|Win32.Build.0 = DebugMem|Win32
+		{C220DB61-B43A-9628-54DF-7285E1F597C8}.Release|Win32.ActiveCfg = Release|Win32
+		{C220DB61-B43A-9628-54DF-7285E1F597C8}.Release|Win32.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 1 - 1
gameplay/src/AIAgent.h

@@ -15,7 +15,7 @@ class Node;
  * Defines an AI agent that can be added to nodes in a scene.
  *
  * Agents represent a unit of intelligence in a game and can be used
- * to program logic for a character or object in a game, using constrcuts
+ * to program logic for a character or object in a game, using constructs
  * such as state machines. By default, an AIAgent has an empty state 
  * machine.
  */

+ 2 - 2
gameplay/src/AIController.h

@@ -20,13 +20,13 @@ class AIController
 public:
 
     /**
-     * Routes the secified message to its intended recipient(s).
+     * Routes the specified message to its intended recipient(s).
      *
      * Messages are arbitrary packets of data that are sent either to a single or to multiple
      * recipients in the game.
      *
      * Once the specified message has been delivered, it is automatically destroyed by the AIController.
-     * For this reason, AIMessage pointers should NOT be held or explicity destroyed by any code after
+     * For this reason, AIMessage pointers should NOT be held or explicitly destroyed by any code after
      * they are sent through the AIController.
      *
      * @param message The message to send.

+ 8 - 8
gameplay/src/AIMessage.h

@@ -50,7 +50,7 @@ public:
      * the message pointer.
      *
      * @param id The message ID.
-     * @param sender AIAgent sender ID (can be empty or null for an annoymous message).
+     * @param sender AIAgent sender ID (can be empty or null for an anonymous message).
      * @param receiver AIAgent receiver ID (can be empty or null for a broadcast message).
      * @param parameterCount Number of parameters for this message.
      *
@@ -82,7 +82,7 @@ public:
     /**
      * Returns the value of the specified parameter as an integer.
      *
-     * @param index Index of the paramter to get.
+     * @param index Index of the parameter to get.
      *
      * @return The parameter value.
      */
@@ -99,7 +99,7 @@ public:
     /**
      * Returns the value of the specified parameter as a long integer.
      *
-     * @param index Index of the paramter to get.
+     * @param index Index of the parameter to get.
      *
      * @return The parameter value.
      */
@@ -116,7 +116,7 @@ public:
     /**
      * Returns the value of the specified parameter as a float.
      *
-     * @param index Index of the paramter to get.
+     * @param index Index of the parameter to get.
      *
      * @return The parameter value.
      */
@@ -133,7 +133,7 @@ public:
     /**
      * Returns the value of the specified parameter as a double.
      *
-     * @param index Index of the paramter to get.
+     * @param index Index of the parameter to get.
      *
      * @return The parameter value.
      */
@@ -150,7 +150,7 @@ public:
     /**
      * Returns the value of the specified parameter as a boolean.
      *
-     * @param index Index of the paramter to get.
+     * @param index Index of the parameter to get.
      *
      * @return The parameter value.
      */
@@ -167,7 +167,7 @@ public:
     /**
      * Returns the value of the specified parameter as a string.
      *
-     * @param index Index of the paramter to get.
+     * @param index Index of the parameter to get.
      *
      * @return The parameter value.
      */
@@ -238,7 +238,7 @@ private:
     AIMessage();
 
     /**
-     * Hidden copy construcotr.
+     * Hidden copy constructor.
      */
     AIMessage(const AIMessage&);
 

+ 1 - 1
gameplay/src/AIStateMachine.h

@@ -20,7 +20,7 @@ class AIAgent;
  * and then the stateUpdate event will begin to be called each frame
  * while the new state is active.
  *
- * Communication of state changes is facilated through the AIMessage class.
+ * Communication of state changes is facilitated through the AIMessage class.
  * Messages are dispatched by the AIController and can be used for purposes
  * other than state changes as well. Messages may be sent to the state
  * machines of any other agents in a game and can contain any arbitrary

+ 1 - 1
gameplay/src/Container.h

@@ -262,7 +262,7 @@ protected:
     /**
      * Keyboard callback on key events.  Passes key events on to the currently focused control.
      *
-     * @param evt The key event that occured.
+     * @param evt The key event that occurred.
      * @param key If evt is KEY_PRESS or KEY_RELEASE then key is the key code from Keyboard::Key.
      *            If evt is KEY_CHAR then key is the unicode value of the character.
      *

+ 2 - 2
gameplay/src/Control.h

@@ -781,7 +781,7 @@ protected:
     /**
      * Keyboard callback on key events.
      *
-     * @param evt The key event that occured.
+     * @param evt The key event that occurred.
      * @param key If evt is KEY_PRESS or KEY_RELEASE then key is the key code from Keyboard::Key.
      *            If evt is KEY_CHAR then key is the unicode value of the character.
      *
@@ -946,7 +946,7 @@ protected:
     bool _consumeInputEvents;
     
     /**
-     * The Control's Alignmnet
+     * The Control's Alignment
      */
     Alignment _alignment;
     

+ 1 - 1
gameplay/src/FileSystem.h

@@ -56,7 +56,7 @@ public:
      * Loads a set of filesystem aliases from the given Properties object.
      *
      * The specified properties object contains a single namespace with a list
-     * of fielsystem aliases that will be used to establish soft links to files
+     * of filesystem aliases that will be used to establish soft links to files
      * when reading files through this class.
      *
      * This can be helpful for managing loading of resources that may change

+ 1 - 1
gameplay/src/Frustum.h

@@ -21,7 +21,7 @@ namespace gameplay
  *
  * You can query a Frustum object for any one of its bounding planes,
  * for its corners, and for whether it intersects with a given object.
- * Since objects that don't intersect with your view frustrum generally
+ * Since objects that don't intersect with your view frustum generally
  * don't need to be rendered, culling them quickly can save you a lot of
  * rendering time.
  */

+ 5 - 5
gameplay/src/Game.h

@@ -115,7 +115,7 @@ public:
      * This method returns a Properties object containing the contents
      * of the game.config file.
      *
-     * @return The game conifguration Properties object.
+     * @return The game configuration Properties object.
      */
     Properties* getConfig() const;
 
@@ -142,7 +142,7 @@ public:
     void exit();
 
     /**
-     * Platform frame delagate.
+     * Platform frame delegate.
      *
      * This is called every frame from the platform.
      * This in turn calls back on the user implemented game methods: update() then render()
@@ -221,7 +221,7 @@ public:
     inline PhysicsController* getPhysicsController() const;
 
     /** 
-     * Gets the AI controller for managing control of artifical
+     * Gets the AI controller for managing control of artificial
      * intelligence associated with the game.
      *
      * @return The AI controller for this game.
@@ -258,7 +258,7 @@ public:
     /**
      * Keyboard callback on keyPress events.
      *
-     * @param evt The key event that occured.
+     * @param evt The key event that occurred.
      * @param key If evt is KEY_PRESS or KEY_RELEASE then key is the key code from Keyboard::Key.
      *            If evt is KEY_CHAR then key is the unicode value of the character.
      * 
@@ -558,7 +558,7 @@ private:
     AnimationController* _animationController;  // Controls the scheduling and running of animations.
     AudioController* _audioController;          // Controls audio sources that are playing in the game.
     PhysicsController* _physicsController;      // Controls the simulation of a physics scene and entities.
-    AIController* _aiController;                // Controls AI siulation.
+    AIController* _aiController;                // Controls AI simulation.
     AudioListener* _audioListener;              // The audio listener in 3D space.
     std::vector<Gamepad*>* _gamepads;           // The connected gamepads.
     std::priority_queue<TimeEvent, std::vector<TimeEvent>, std::less<TimeEvent> >* _timeEvents;     // Contains the scheduled time events.

+ 1 - 1
gameplay/src/Joint.h

@@ -10,7 +10,7 @@ class MeshSkin;
 class Bundle;
 
 /**
- * Defines a basic hierachial structure of transformation spaces.
+ * Defines a basic hierarchical structure of transformation spaces.
  */
 class Joint : public Node
 {

+ 1 - 1
gameplay/src/Material.h

@@ -70,7 +70,7 @@ public:
      *
      * @param vshPath Path to the vertex shader file.
      * @param fshPath Path to the fragment shader file.
-     * @param defines New-line delimitted list of preprocessor defines.
+     * @param defines New-line delimited list of preprocessor defines.
      * 
      * @return A new Material.
      * @script{create}

+ 1 - 1
gameplay/src/MaterialParameter.h

@@ -141,7 +141,7 @@ public:
      *
      * This overloads the setBinding method to provide support for array parameters.
      * The valueMethod parameter should return an array (pointer) of a supported
-     * material parameter type, such as Matirx* for an array of matrices. The
+     * material parameter type, such as Matrix* for an array of matrices. The
      * countMethod should point to a method that returns the number of entries in
      * the value returned from valueMethod.
      *

+ 4 - 4
gameplay/src/Mesh.h

@@ -237,10 +237,10 @@ public:
      * local bounds.
      *
      * Meshes that are attached to a Model with a MeshSkin will have
-     * a bounding volume that is not neccessarily tight fighting on the
+     * a bounding volume that is not necessarily tight fighting on the
      * Mesh vertices. Instead, the bounding volume will be an approximation
      * that contains all possible vertex positions in all possible poses after
-     * skinning is applied. This is neccessary since skinning vertices 
+     * skinning is applied. This is necessary since skinning vertices 
      * result in vertex positions that lie outside the original mesh bounds
      * and could otherwise result in a bounding volume that does not fully
      * contain an animated/skinned mesh.
@@ -266,10 +266,10 @@ public:
      * local bounds.
      *
      * Meshes that are attached to a Model with a MeshSkin will have
-     * a bounding volume that is not neccessarily tight fighting on the
+     * a bounding volume that is not necessarily tight fighting on the
      * Mesh vertices. Instead, the bounding volume will be an approximation
      * that contains all possible vertex positions in all possible poses after
-     * skinning is applied. This is neccessary since skinning vertices 
+     * skinning is applied. This is necessary since skinning vertices 
      * result in vertex positions that lie outside the original mesh bounds
      * and could otherwise result in a bounding volume that does not fully
      * contain an animated/skinned mesh.

+ 6 - 6
gameplay/src/MeshBatch.h

@@ -20,7 +20,7 @@ public:
      * @param vertexFormat The format of vertices in the new batch.
      * @param primitiveType The type of primitives that will be added to the batch.
      * @param materialPath Path to a material file to be used for drawing the batch.
-     * @param indexed True if the batched primivites will contain index data, false otherwise.
+     * @param indexed True if the batched primitives will contain index data, false otherwise.
      * @param initialCapacity The initial capacity of the batch, in triangles.
      * @param growSize Amount to grow the batch by when it overflows (a value of zero prevents batch growing).
      *
@@ -35,7 +35,7 @@ public:
      * @param vertexFormat The format of vertices in the new batch.
      * @param primitiveType The type of primitives that will be added to the batch.
      * @param material Material to be used for drawing the batch.
-     * @param indexed True if the batched primivites will contain index data, false otherwise.
+     * @param indexed True if the batched primitives will contain index data, false otherwise.
      * @param initialCapacity The initial capacity of the batch, in triangles.
      * @param growSize Amount to grow the batch by when it overflows (a value of zero prevents batch growing).
      *
@@ -50,7 +50,7 @@ public:
     ~MeshBatch();
 
     /**
-     * Returs the current capacity of the batch.
+     * Returns the current capacity of the batch.
      *
      * @return The batch capacity.
      */
@@ -77,12 +77,12 @@ public:
      * the format of a single vertex (e.g. {x,y,z,u,v}).
      *
      * If the batch was created with 'indexed' set to true, then valid index data should be
-     * passed in this method. However, if 'indxed' was set to false, the indices and indexCount
+     * passed in this method. However, if 'indexed' was set to false, the indices and indexCount
      * parameters can be omitted since only vertex data will be used.
      *
      * If the batch created to draw triangle strips, this method assumes that separate calls to
-     * add specify seprate triangle strips. In this case, this method will automatically stitch
-     * seperate triangle strips together using degenerate (zero-area) triangles.
+     * add specify separate triangle strips. In this case, this method will automatically stitch
+     * separate triangle strips together using degenerate (zero-area) triangles.
      *
      * @param vertices Array of vertices.
      * @param vertexCount Number of vertices.

+ 1 - 1
gameplay/src/Model.h

@@ -139,7 +139,7 @@ public:
      *
      * This method binds the vertex buffer and index buffers for the Mesh and
      * all of its MeshParts and draws the mesh geometry. Any other state
-     * neccessary to render the Mesh, such as rendering states, shader state,
+     * necessary to render the Mesh, such as rendering states, shader state,
      * and so on, should be set up before calling this method.
      *
      * @param wireframe If true, draw the model in wireframe mode.

+ 1 - 1
gameplay/src/Node.h

@@ -22,7 +22,7 @@ class Scene;
 class Form;
 
 /**
- * Defines a basic hierachial structure of transformation spaces.
+ * Defines a basic hierarchical structure of transformation spaces.
  */
 class Node : public Transform, public Ref
 {

+ 1 - 1
gameplay/src/Pass.h

@@ -54,7 +54,7 @@ public:
     /**
      * Sets a vertex attribute binding for this pass.
      *
-     * @return The vertextu attribute binding for this pass.
+     * @return The vertex attribute binding for this pass.
      */
     VertexAttributeBinding* getVertexAttributeBinding() const;
 

+ 2 - 2
gameplay/src/PhysicsCharacter.h

@@ -40,7 +40,7 @@ public:
     bool isPhysicsEnabled() const;
 
     /**
-     * Enables or disables phyiscs simulation for the character.
+     * Enables or disables physics simulation for the character.
      *
      * When physics simulation is enabled (default), the physics character automatically
      * responds to collisions in the physics world. For example, the character will
@@ -192,7 +192,7 @@ private:
      * Use PhysicsController::createCharacter to create physics characters.
      *
      * @param node Scene node that represents the character.
-     * @param shape Physis collision shape definition.
+     * @param shape Physics collision shape definition.
      * @param mass The mass of the character.
      */
     PhysicsCharacter(Node* node, const PhysicsCollisionShape::Definition& shape, float mass);

+ 5 - 5
gameplay/src/PhysicsCollisionShape.h

@@ -55,7 +55,7 @@ public:
         Definition();
 
         /** 
-         * Constructs a new Defintion that is a copy of the specified Definition.
+         * Constructs a new Definition that is a copy of the specified Definition.
          *
          * @param definition The Definition to copy.
          */ 
@@ -143,7 +143,7 @@ public:
      *
      * @param extents Extents of the box shape along the x, y and z axes.
      * @param center Center point of the box.
-     * @param absolute True to specifiy that the given center point is an absolute position.
+     * @param absolute True to specify that the given center point is an absolute position.
      *        By default the center point is treated as relative to the location of the node
      *        that the shape is attached to.
      *
@@ -163,7 +163,7 @@ public:
      *
      * @param radius Radius of the sphere.
      * @param center Center point of the sphere.
-     * @param absolute True to specifiy that the given center point is an absolute position.
+     * @param absolute True to specify that the given center point is an absolute position.
      *        By default the center point is treated as relative to the location of the node
      *        that the shape is attached to.
      *
@@ -184,7 +184,7 @@ public:
      * @param radius Radius of the capsule.
      * @param height Height of the capsule.
      * @param center Center point of the capsule.
-     * @param absolute True to specifiy that the given center point is an absolute position.
+     * @param absolute True to specify that the given center point is an absolute position.
      *        By default the center point is treated as relative to the location of the node
      *        that the shape is attached to.
      *
@@ -200,7 +200,7 @@ public:
     static PhysicsCollisionShape::Definition heightfield(Image* image);
 
     /**
-     * Defines a mesh shape using the specified mehs.
+     * Defines a mesh shape using the specified mesh.
      *
      * @return Definition of a mesh shape.
      */

+ 4 - 4
gameplay/src/PhysicsController.h

@@ -67,7 +67,7 @@ public:
     };
 
     /**
-     * Stucture that stores hit test results for ray and sweep tests.
+     * Structure that stores hit test results for ray and sweep tests.
      */
     struct HitResult
     {
@@ -134,7 +134,7 @@ public:
          *
          * @param result HitResult object containing information about the hit.
          * 
-         * @return True (default) to continue with defautl behavior where closer
+         * @return True (default) to continue with default behavior where closer
          *      objects are processed, false to process all intersecting objects.
          */
         virtual bool hit(const HitResult& result);
@@ -300,7 +300,7 @@ public:
      * @param result Optional pointer to a HitTest structure to store the hit test result information in.
      *      When using a default (or no) filter, this will always be the closest object hit. Otherwise, if 
      *      using a custom filter, it will be the last object passed to the HitFilter::hit method (which
-     *      is not neccessarily the closest or furthest).
+     *      is not necessarily the closest or furthest).
      * @param filter Optional filter pointer used to control which objects are tested.
      *
      * @return True if the ray test collided with a physics object, false otherwise.
@@ -318,7 +318,7 @@ public:
      * @param result Optional pointer to a HitTest structure to store the hit test result information in.
      *      When using a default (or no) filter, this will always be the closest object hit. Otherwise, if 
      *      using a custom filter, it will be the last object passed to the HitFilter::hit method (which
-     *      is not neccessarily the closest or furthest).
+     *      is not necessarily the closest or furthest).
      * @param filter Optional filter pointer used to control which objects are tested.
      * 
      * @return True if the object intersects any other physics objects, false otherwise.

+ 1 - 1
gameplay/src/PhysicsRigidBody.h

@@ -67,7 +67,7 @@ public:
         bool kinematic;
 
         /**
-         * The ansitropic friction term for the rigid body.
+         * The anisotropic friction term for the rigid body.
          */
         Vector3 anisotropicFriction;
 

+ 2 - 2
gameplay/src/Platform.h

@@ -23,7 +23,7 @@ public:
     ~Platform();
 
     /**
-     * Creates a platform for the specified game which is will interacte with.
+     * Creates a platform for the specified game which it will interact with.
      *
      * @param game The game to create a platform for.
      * @param attachToWindow The native window handle to optionally attach to.
@@ -191,7 +191,7 @@ public:
     /**
      * Keyboard callback on keyPress events.
      *
-     * @param evt The key event that occured.
+     * @param evt The key event that occurred.
      * @param key If evt is KEY_PRESS or KEY_RELEASE then key is the key code from Keyboard::Key.
      *            If evt is KEY_CHAR then key is the unicode value of the character.
      * 

+ 1 - 1
gameplay/src/Properties.h

@@ -221,7 +221,7 @@ public:
     /**
      * Returns the type of a property.
      *
-     * @param name The name of hte property to interpret, or NULL to return the current property's type.
+     * @param name The name of the property to interpret, or NULL to return the current property's type.
      *
      * @return The type of the property.
      */

+ 1 - 1
gameplay/src/Quaternion.h

@@ -15,7 +15,7 @@ class Matrix;
  *
  * Quaternions are typically used as a replacement for euler angles and rotation matrices as a way to achieve smooth interpolation and avoid gimbal lock.
  *
- * Note that this quaternion class does not automatically keep the quaternion normalized. Therefore, care must be taken to normalize the quaternion when neccessary, by calling the normalize method.
+ * Note that this quaternion class does not automatically keep the quaternion normalized. Therefore, care must be taken to normalize the quaternion when necessary, by calling the normalize method.
  * This class provides three methods for doing quaternion interpolation: lerp, slerp, and squad.
  *
  * lerp (linear interpolation): the interpolation curve gives a straight line in quaternion space. It is simple and fast to compute. The only problem is that it does not provide constant angular velocity. Note that a constant velocity is not necessarily a requirement for a curve;

+ 1 - 1
gameplay/src/RenderState.h

@@ -279,7 +279,7 @@ public:
      *
      * It is legal to pass the returned StateBlock to another RenderState object.
      * In this case, the StateBlock will be referenced by both RenderState objects
-     * and any changes to the StateBlock will be refelcted in all objects
+     * and any changes to the StateBlock will be reflected in all objects
      * that reference it.
      *
      * @return The StateBlock for this RenderState.

+ 1 - 1
gameplay/src/Scene.h

@@ -183,7 +183,7 @@ public:
      * 
      * The visitMethod parameter must be a pointer to a method that has a bool
      * return type and accepts two parameters: a Node pointer and a cookie of a
-     * user-specified type. The scene travesal continues while visitMethod return
+     * user-specified type. The scene traversal continues while visitMethod return
      * true. Returning false will cause the traversal to stop.
      *
      * @param instance The pointer to an instance of the object that contains visitMethod.

+ 6 - 6
gameplay/src/ScriptController.h

@@ -204,7 +204,7 @@ double* getDoublePointer(int index);
  * @param type The type of object pointer to retrieve.
  * @param index The stack index.
  * @param nonNull Whether the pointer must be non-null (e.g. if the parameter we 
- *      are retreiving is actually a reference or by-value parameter).
+ *      are retrieving is actually a reference or by-value parameter).
  * @return The object pointer or <code>NULL</code> if the data at the stack index
  *      is not an object or if the object is not derived from the given type.
  * @script{ignore}
@@ -260,7 +260,7 @@ public:
     std::string loadUrl(const char* url);
 
     /**
-     * Calls the specifed no-parameter Lua function.
+     * Calls the specified no-parameter Lua function.
      * 
      * @param func The name of the function to call.
      * @return The return value of the executed Lua function.
@@ -268,7 +268,7 @@ public:
     template<typename T> T executeFunction(const char* func);
 
     /**
-     * Calls the specifed Lua function using the given parameters.
+     * Calls the specified Lua function using the given parameters.
      * 
      * @param func The name of the function to call.
      * @param args The argument signature of the function. Of the form 'xxx', where each 'x' is a parameter type and must be one of:
@@ -292,7 +292,7 @@ public:
     template<typename T> T executeFunction(const char* func, const char* args, ...);
 
     /**
-     * Calls the specifed Lua function using the given parameters.
+     * Calls the specified Lua function using the given parameters.
      * 
      * @param func The name of the function to call.
      * @param args The argument signature of the function. Of the form 'xxx', where each 'x' is a parameter type and must be one of:
@@ -619,7 +619,7 @@ private:
     /**
      * Script keyboard callback on key events.
      *
-     * @param evt The key event that occured.
+     * @param evt The key event that occurred.
      * @param key If evt is KEY_PRESS or KEY_RELEASE then key is the key code from Keyboard::Key.
      *            If evt is KEY_CHAR then key is the unicode value of the character.
      * 
@@ -664,7 +664,7 @@ private:
     void gamepadEvent(Gamepad::GamepadEvent evt, Gamepad* gamepad);
 
     /**
-     * Calls the specifed Lua function using the given parameters.
+     * Calls the specified Lua function using the given parameters.
      * 
      * @param resultCount The expected number of returned values.
      * @param func The name of the function to call.

+ 1 - 1
gameplay/src/TextBox.h

@@ -113,7 +113,7 @@ protected:
     /**
      * Keyboard callback on key events.
      *
-     * @param evt The key event that occured.
+     * @param evt The key event that occurred.
      * @param key If evt is KEY_PRESS or KEY_RELEASE then key is the key code from Keyboard::Key.
      *            If evt is KEY_CHAR then key is the unicode value of the character.
      * 

+ 2 - 2
gameplay/src/Texture.h

@@ -50,7 +50,7 @@ public:
     };
     
     /**
-     * Defnies a texture sampler.
+     * Defines a texture sampler.
      *
      * A texture sampler is basically an instance of a texture that can be
      * used to sample a texture from a material. In addition to the texture
@@ -206,7 +206,7 @@ public:
     bool isMipmapped() const;
 
     /**
-     * Determines if this texture is a compressed teture.
+     * Determines if this texture is a compressed texture.
      */
     bool isCompressed() const;
 

+ 2 - 2
gameplay/src/Vector2.h

@@ -163,7 +163,7 @@ public:
     /**
      * Returns the squared distance between this vector and v.
      *
-     * When it is not neccessary to get the exact distance between
+     * When it is not necessary to get the exact distance between
      * two vectors (for example, when simply comparing the
      * distance between different vectors), it is advised to use
      * this method instead of distance.
@@ -207,7 +207,7 @@ public:
     /**
      * Returns the squared length of this vector.
      *
-     * When it is not neccessary to get the exact length of a
+     * When it is not necessary to get the exact length of a
      * vector (for example, when simply comparing the lengths of
      * different vectors), it is advised to use this method
      * instead of length.

+ 2 - 2
gameplay/src/Vector3.h

@@ -210,7 +210,7 @@ public:
     /**
      * Returns the squared distance between this vector and v.
      *
-     * When it is not neccessary to get the exact distance between
+     * When it is not necessary to get the exact distance between
      * two vectors (for example, when simply comparing the
      * distance between different vectors), it is advised to use
      * this method instead of distance.
@@ -254,7 +254,7 @@ public:
     /**
      * Returns the squared length of this vector.
      *
-     * When it is not neccessary to get the exact length of a
+     * When it is not necessary to get the exact length of a
      * vector (for example, when simply comparing the lengths of
      * different vectors), it is advised to use this method
      * instead of length.

+ 2 - 2
gameplay/src/Vector4.h

@@ -201,7 +201,7 @@ public:
     /**
      * Returns the squared distance between this vector and v.
      *
-     * When it is not neccessary to get the exact distance between
+     * When it is not necessary to get the exact distance between
      * two vectors (for example, when simply comparing the
      * distance between different vectors), it is advised to use
      * this method instead of distance.
@@ -245,7 +245,7 @@ public:
     /**
      * Returns the squared length of this vector.
      *
-     * When it is not neccessary to get the exact length of a
+     * When it is not necessary to get the exact length of a
      * vector (for example, when simply comparing the lengths of
      * different vectors), it is advised to use this method
      * instead of length.

+ 3 - 3
gameplay/src/VertexAttributeBinding.h

@@ -16,14 +16,14 @@ class Effect;
  *
  * In a perfect world, this class would always be a binding directly between
  * a unique VertexFormat and an Effect, where the VertexFormat is simply the
- * definition of the layout of any annoymous vertex buffer. However, the OpenGL
+ * definition of the layout of any anonymous vertex buffer. However, the OpenGL
  * mechanism for setting up these bindings is Vertex Array Objects (VAOs).
  * OpenGL requires a separate VAO per vertex buffer object (VBO), rather than per
  * vertex layout definition. Therefore, although we would like to define this
  * binding between a VertexFormat and Effect, we are specifying the binding
  * between a Mesh and Effect to satisfy the OpenGL requirement of one VAO per VBO.
  *
- * Note that this class still does proivide a binding between a VertexFormat
+ * Note that this class still does provide a binding between a VertexFormat
  * and an Effect, however this binding is actually a client-side binding and 
  * should only be used when writing custom code that use client-side vertex
  * arrays, since it is slower than the server-side VAOs used by OpenGL
@@ -57,7 +57,7 @@ public:
      * set of parameters that need to be passed to the renderer to setup vertex attribute
      * bindings between a vertex buffer and a vertex shader. The specified vertexPointer is
      * a client-side block of memory that contains the vertices to be send to the renderer,
-     * formatted as indiicated in the specified vertexFormat parameter.
+     * formatted as indicated in the specified vertexFormat parameter.
      *
      * @param vertexFormat The vertex format.
      * @param vertexPointer Pointer to beginning of client-side vertex array.

+ 2 - 2
gameplay/src/VertexFormat.h

@@ -84,7 +84,7 @@ public:
          *
          * @param e The vertex element to compare.
          *
-         * @return true if this element does not matche the specified one, false otherwise.
+         * @return true if this element does not match the specified one, false otherwise.
          */
         bool operator != (const Element& e) const;
     };
@@ -107,7 +107,7 @@ public:
     /**
      * Gets the vertex element at the specified index.
      *
-     * @param index The index of the element to retreive.
+     * @param index The index of the element to retrieve.
      */
     const Element& getElement(unsigned int index) const;