瀏覽代碼

Further optimization of the parent node network replication attribute.

Lasse Öörni 14 年之前
父節點
當前提交
cc2a487361

+ 2 - 3
Engine/Graphics/AnimatedModel.cpp

@@ -42,7 +42,6 @@
 #include "ResourceEvents.h"
 #include "Scene.h"
 #include "Sort.h"
-#include "VectorBuffer.h"
 #include "VertexBuffer.h"
 
 #include "DebugNew.h"
@@ -85,8 +84,8 @@ void AnimatedModel::RegisterObject(Context* context)
     ACCESSOR_ATTRIBUTE(AnimatedModel, VAR_RESOURCEREFLIST, "Materials", GetMaterialsAttr, SetMaterialsAttr, ResourceRefList, ResourceRefList(Material::GetTypeStatic()), AM_DEFAULT);
     ATTRIBUTE(AnimatedModel, VAR_FLOAT, "Animation LOD Bias", animationLodBias_, 1.0f, AM_DEFAULT);
     ATTRIBUTE(AnimatedModel, VAR_INT, "Raycast/Occlusion LOD Level", softwareLodLevel_, M_MAX_UNSIGNED, AM_DEFAULT);
-    ACCESSOR_ATTRIBUTE(AnimatedModel, VAR_BUFFER, "Bone Animation Enabled", GetBonesEnabledAttr, SetBonesEnabledAttr, PODVector<unsigned char>, PODVector<unsigned char>(), AM_FILE);
-    ACCESSOR_ATTRIBUTE(AnimatedModel, VAR_BUFFER, "Animation States", GetAnimationStatesAttr, SetAnimationStatesAttr, PODVector<unsigned char>, PODVector<unsigned char>(), AM_FILE);
+    ACCESSOR_ATTRIBUTE(AnimatedModel, VAR_BUFFER, "Bone Animation Enabled", GetBonesEnabledAttr, SetBonesEnabledAttr, PODVector<unsigned char>, PODVector<unsigned char>(), AM_FILE | AM_NOEDIT);
+    ACCESSOR_ATTRIBUTE(AnimatedModel, VAR_BUFFER, "Animation States", GetAnimationStatesAttr, SetAnimationStatesAttr, PODVector<unsigned char>, PODVector<unsigned char>(), AM_FILE | AM_NOEDIT);
 }
 
 void AnimatedModel::FinishUpdate()

+ 1 - 2
Engine/Graphics/AnimationController.cpp

@@ -32,7 +32,6 @@
 #include "ResourceCache.h"
 #include "Scene.h"
 #include "SceneEvents.h"
-#include "VectorBuffer.h"
 
 #include "DebugNew.h"
 
@@ -53,7 +52,7 @@ void AnimationController::RegisterObject(Context* context)
 {
     context->RegisterFactory<AnimationController>();
     
-    ACCESSOR_ATTRIBUTE(AnimationController, VAR_BUFFER, "Animations", GetAnimationsAttr, SetAnimationsAttr, PODVector<unsigned char>, PODVector<unsigned char>(), AM_DEFAULT);
+    ACCESSOR_ATTRIBUTE(AnimationController, VAR_BUFFER, "Animations", GetAnimationsAttr, SetAnimationsAttr, PODVector<unsigned char>, PODVector<unsigned char>(), AM_FILE | AM_NOEDIT);
 }
 
 void AnimationController::Update(float timeStep)

+ 0 - 1
Engine/Graphics/BillboardSet.cpp

@@ -35,7 +35,6 @@
 #include "Profiler.h"
 #include "ResourceCache.h"
 #include "Sort.h"
-#include "VectorBuffer.h"
 #include "VertexBuffer.h"
 #include "XMLElement.h"
 

+ 0 - 1
Engine/Graphics/ParticleEmitter.cpp

@@ -32,7 +32,6 @@
 #include "Scene.h"
 #include "SceneEvents.h"
 #include "XMLFile.h"
-#include "VectorBuffer.h"
 
 #include "DebugNew.h"
 

+ 0 - 1
Engine/Physics/PhysicsWorld.cpp

@@ -35,7 +35,6 @@
 #include "RigidBody.h"
 #include "Scene.h"
 #include "SceneEvents.h"
-#include "VectorBuffer.h"
 
 #include <ode/ode.h>
 #include "Sort.h"

+ 9 - 10
Engine/Scene/Node.cpp

@@ -27,7 +27,6 @@
 #include "Log.h"
 #include "MemoryBuffer.h"
 #include "Scene.h"
-#include "VectorBuffer.h"
 #include "XMLElement.h"
 
 #include "DebugNew.h"
@@ -70,7 +69,7 @@ void Node::RegisterObject(Context* context)
     REF_ACCESSOR_ATTRIBUTE(Node, VAR_VECTOR3, "Position", GetPosition, SetPosition, Vector3, Vector3::ZERO, AM_DEFAULT | AM_LATESTDATA);
     REF_ACCESSOR_ATTRIBUTE(Node, VAR_QUATERNION, "Rotation", GetRotation, SetRotation, Quaternion, Quaternion::IDENTITY, AM_DEFAULT | AM_LATESTDATA);
     REF_ACCESSOR_ATTRIBUTE(Node, VAR_VECTOR3, "Scale", GetScale, SetScale, Vector3, Vector3::UNITY, AM_DEFAULT);
-    ACCESSOR_ATTRIBUTE(Node, VAR_BUFFER, "Parent Node", GetParentAttr, SetParentAttr, PODVector<unsigned char>, PODVector<unsigned char>(), AM_NET | AM_NOEDIT);
+    REF_ACCESSOR_ATTRIBUTE(Node, VAR_BUFFER, "Parent Node", GetParentAttr, SetParentAttr, PODVector<unsigned char>, PODVector<unsigned char>(), AM_NET | AM_NOEDIT);
     ATTRIBUTE(Node, VAR_VARIANTMAP, "Variables", vars_, VariantMap(), AM_FILE);
 }
 
@@ -621,7 +620,7 @@ void Node::SetOwner(Connection* owner)
     owner_ = owner;
 }
 
-void Node::SetParentAttr(PODVector<unsigned char> value)
+void Node::SetParentAttr(const PODVector<unsigned char>& value)
 {
     Scene* scene = GetScene();
     if (!scene)
@@ -642,15 +641,15 @@ void Node::SetParentAttr(PODVector<unsigned char> value)
     }
 }
 
-PODVector<unsigned char> Node::GetParentAttr() const
+const PODVector<unsigned char>& Node::GetParentAttr() const
 {
-    VectorBuffer buf;
+    parentAttr_.Clear();
     Scene* scene = GetScene();
     if (scene && parent_)
     {
         unsigned parentID = parent_->GetID();
         if (parentID < FIRST_LOCAL_ID)
-            buf.WriteVLE(parentID);
+            parentAttr_.WriteVLE(parentID);
         else
         {
             // Parent is local: traverse hierarchy to find a non-local base node
@@ -659,14 +658,14 @@ PODVector<unsigned char> Node::GetParentAttr() const
             while (current->GetID() >= FIRST_LOCAL_ID)
                 current = current->GetParent();
             
-            buf.WriteVLE(current->GetID());
-            buf.WriteStringHash(parent_->GetNameHash());
+            parentAttr_.WriteVLE(current->GetID());
+            parentAttr_.WriteStringHash(parent_->GetNameHash());
         }
     }
     else
-        buf.WriteVLE(0);
+        parentAttr_.WriteVLE(0);
     
-    return buf.GetBuffer();
+    return parentAttr_.GetBuffer();
 }
 
 bool Node::Load(Deserializer& source, bool readChildren)

+ 5 - 2
Engine/Scene/Node.h

@@ -25,6 +25,7 @@
 
 #include "Matrix3x4.h"
 #include "Serializable.h"
+#include "VectorBuffer.h"
 
 class Component;
 class Connection;
@@ -244,9 +245,9 @@ public:
     void SetOwner(Connection* owner);
     
     /// Set parent attribute (network only)
-    void SetParentAttr(PODVector<unsigned char> value);
+    void SetParentAttr(const PODVector<unsigned char>& value);
     /// Return parent attribute (network only)
-    PODVector<unsigned char> GetParentAttr() const;
+    const PODVector<unsigned char>& GetParentAttr() const;
     
     /// User variables
     VariantMap vars_;
@@ -297,6 +298,8 @@ private:
     Vector<SharedPtr<Component> > components_;
     /// Node listeners
     Vector<WeakPtr<Component> > listeners_;
+    /// Parent attribute buffer for network replication
+    mutable VectorBuffer parentAttr_;
     /// Consecutive rotation count for rotation renormalization
     unsigned char rotateCount_;
     /// World transform needs update flag

+ 0 - 1
Engine/Script/ScriptInstance.cpp

@@ -34,7 +34,6 @@
 #include "Script.h"
 #include "ScriptFile.h"
 #include "ScriptInstance.h"
-#include "VectorBuffer.h"
 
 #include <angelscript.h>