Browse Source

Avoid Component::GetWorldTransform() and related functions where possible to avoid extra indirection and function call.

Lasse Öörni 13 years ago
parent
commit
7a06dc73e5

+ 2 - 2
Engine/Graphics/AnimatedModel.cpp

@@ -195,7 +195,7 @@ void AnimatedModel::Update(const FrameInfo& frame)
     {
     {
         if (invisibleLodFactor_ == 0.0f)
         if (invisibleLodFactor_ == 0.0f)
             return;
             return;
-        float distance = frame.camera_->GetDistance(GetWorldPosition());
+        float distance = frame.camera_->GetDistance(node_->GetWorldPosition());
         // If distance is greater than draw distance, no need to update at all
         // If distance is greater than draw distance, no need to update at all
         if (drawDistance_ > 0.0f && distance > drawDistance_)
         if (drawDistance_ > 0.0f && distance > drawDistance_)
             return;
             return;
@@ -209,7 +209,7 @@ void AnimatedModel::Update(const FrameInfo& frame)
 
 
 void AnimatedModel::UpdateDistance(const FrameInfo& frame)
 void AnimatedModel::UpdateDistance(const FrameInfo& frame)
 {
 {
-    const Matrix3x4& worldTransform = GetWorldTransform();
+    const Matrix3x4& worldTransform = node_->GetWorldTransform();
     distance_ = frame.camera_->GetDistance(worldTransform.Translation());
     distance_ = frame.camera_->GetDistance(worldTransform.Translation());
     
     
     // Note: per-geometry distances do not take skinning into account
     // Note: per-geometry distances do not take skinning into account

+ 5 - 5
Engine/Graphics/BillboardSet.cpp

@@ -93,7 +93,7 @@ void BillboardSet::RegisterObject(Context* context)
 void BillboardSet::UpdateDistance(const FrameInfo& frame)
 void BillboardSet::UpdateDistance(const FrameInfo& frame)
 {
 {
     // Check if position relative to camera has changed, and re-sort in that case
     // Check if position relative to camera has changed, and re-sort in that case
-    const Vector3& worldPos = GetWorldPosition();
+    const Vector3& worldPos = node_->GetWorldPosition();
     Vector3 offset = (worldPos - frame.camera_->GetWorldPosition());
     Vector3 offset = (worldPos - frame.camera_->GetWorldPosition());
     if (offset != previousOffset_)
     if (offset != previousOffset_)
     {
     {
@@ -317,7 +317,7 @@ void BillboardSet::OnWorldBoundingBoxUpdate()
     worldBoundingBox_.defined_ = false;
     worldBoundingBox_.defined_ = false;
     
     
     unsigned enabledBillboards = 0;
     unsigned enabledBillboards = 0;
-    const Matrix3x4& worldTransform = GetWorldTransform();
+    const Matrix3x4& worldTransform = node_->GetWorldTransform();
     Matrix3x4 billboardTransform = relative_ ? worldTransform : Matrix3x4::IDENTITY;
     Matrix3x4 billboardTransform = relative_ ? worldTransform : Matrix3x4::IDENTITY;
     Vector3 billboardScale = scaled_ ? worldTransform.Scale() : Vector3::ONE;
     Vector3 billboardScale = scaled_ ? worldTransform.Scale() : Vector3::ONE;
     
     
@@ -336,7 +336,7 @@ void BillboardSet::OnWorldBoundingBoxUpdate()
     
     
     // If no billboards enabled, the bounding box is just the node's world position
     // If no billboards enabled, the bounding box is just the node's world position
     if (!enabledBillboards)
     if (!enabledBillboards)
-        worldBoundingBox_.Merge(GetWorldPosition());
+        worldBoundingBox_.Merge(node_->GetWorldPosition());
 }
 }
 
 
 void BillboardSet::UpdateBufferSize()
 void BillboardSet::UpdateBufferSize()
@@ -393,7 +393,7 @@ void BillboardSet::UpdateVertexBuffer(const FrameInfo& frame)
     
     
     unsigned numBillboards = billboards_.Size();
     unsigned numBillboards = billboards_.Size();
     unsigned enabledBillboards = 0;
     unsigned enabledBillboards = 0;
-    const Matrix3x4& worldTransform = GetWorldTransform();
+    const Matrix3x4& worldTransform = node_->GetWorldTransform();
     Matrix3x4 billboardTransform = relative_ ? worldTransform : Matrix3x4::IDENTITY;
     Matrix3x4 billboardTransform = relative_ ? worldTransform : Matrix3x4::IDENTITY;
     Vector3 billboardScale = scaled_ ? worldTransform.Scale() : Vector3::ONE;
     Vector3 billboardScale = scaled_ ? worldTransform.Scale() : Vector3::ONE;
     
     
@@ -432,7 +432,7 @@ void BillboardSet::UpdateVertexBuffer(const FrameInfo& frame)
     float* dest = (float*)vertexBuffer_->Lock(0, enabledBillboards * 4, LOCK_DISCARD);
     float* dest = (float*)vertexBuffer_->Lock(0, enabledBillboards * 4, LOCK_DISCARD);
     if (!dest)
     if (!dest)
         return;
         return;
-    const Vector3& worldScale = GetWorldTransform().Scale();
+    Vector3 worldScale = worldTransform.Scale();
     
     
     for (unsigned i = 0; i < enabledBillboards; ++i)
     for (unsigned i = 0; i < enabledBillboards; ++i)
     {
     {

+ 8 - 2
Engine/Graphics/Camera.cpp

@@ -422,7 +422,10 @@ Vector3 Camera::GetUpVector()
 float Camera::GetDistance(const Vector3& worldPos)
 float Camera::GetDistance(const Vector3& worldPos)
 {
 {
     if (!orthographic_)
     if (!orthographic_)
-        return (worldPos - GetWorldPosition()).Length();
+    {
+        const Vector3& cameraPos = node_ ? node_->GetWorldPosition() : Vector3::ZERO;
+        return (worldPos - cameraPos).Length();
+    }
     else
     else
         return fabsf((GetInverseWorldTransform() * worldPos).z_);
         return fabsf((GetInverseWorldTransform() * worldPos).z_);
 }
 }
@@ -430,7 +433,10 @@ float Camera::GetDistance(const Vector3& worldPos)
 float Camera::GetDistanceSquared(const Vector3& worldPos)
 float Camera::GetDistanceSquared(const Vector3& worldPos)
 {
 {
     if (!orthographic_)
     if (!orthographic_)
-        return (worldPos - GetWorldPosition()).LengthSquared();
+    {
+        const Vector3& cameraPos = node_ ? node_->GetWorldPosition() : Vector3::ZERO;
+        return (worldPos - cameraPos).LengthSquared();
+    }
     else
     else
     {
     {
         float distance = (GetInverseWorldTransform() * worldPos).z_;
         float distance = (GetInverseWorldTransform() * worldPos).z_;

+ 1 - 1
Engine/Graphics/Drawable.cpp

@@ -97,7 +97,7 @@ void Drawable::ProcessRayQuery(const RayOctreeQuery& query, PODVector<RayQueryRe
 
 
 void Drawable::UpdateDistance(const FrameInfo& frame)
 void Drawable::UpdateDistance(const FrameInfo& frame)
 {
 {
-    distance_ = frame.camera_->GetDistance(GetWorldPosition());
+    distance_ = frame.camera_->GetDistance(node_->GetWorldPosition());
     
     
     float scale = GetWorldBoundingBox().Size().DotProduct(DOT_SCALE);
     float scale = GetWorldBoundingBox().Size().DotProduct(DOT_SCALE);
     float newLodDistance = frame.camera_->GetLodDistance(distance_, scale, lodBias_);
     float newLodDistance = frame.camera_->GetLodDistance(distance_, scale, lodBias_);

+ 7 - 7
Engine/Graphics/Light.cpp

@@ -215,7 +215,7 @@ void Light::ProcessRayQuery(const RayOctreeQuery& query, PODVector<RayQueryResul
         }
         }
         if (lightType_ == LIGHT_POINT)
         if (lightType_ == LIGHT_POINT)
         {
         {
-            float distance = query.ray_.HitDistance(Sphere(GetWorldPosition(), range_));
+            float distance = query.ray_.HitDistance(Sphere(node_->GetWorldPosition(), range_));
             if (distance <= query.maxDistance_)
             if (distance <= query.maxDistance_)
             {
             {
                 RayQueryResult result;
                 RayQueryResult result;
@@ -240,7 +240,7 @@ void Light::UpdateDistance(const FrameInfo& frame)
         break;
         break;
         
         
     default:
     default:
-        distance_ = frame.camera_->GetDistance(GetWorldPosition());
+        distance_ = frame.camera_->GetDistance(node_->GetWorldPosition());
         break;
         break;
     }
     }
 }
 }
@@ -407,7 +407,7 @@ Matrix3x4 Light::GetDirLightTransform(Camera* camera, bool getNearQuad)
 
 
 const Matrix3x4& Light::GetVolumeTransform(Camera* camera)
 const Matrix3x4& Light::GetVolumeTransform(Camera* camera)
 {
 {
-    const Matrix3x4& transform = GetWorldTransform();
+    const Matrix3x4& transform = node_->GetWorldTransform();
     
     
     switch (lightType_)
     switch (lightType_)
     {
     {
@@ -464,7 +464,7 @@ void Light::OnWorldBoundingBoxUpdate()
         
         
     case LIGHT_POINT:
     case LIGHT_POINT:
         {
         {
-            const Vector3& center = GetWorldPosition();
+            const Vector3& center = node_->GetWorldPosition();
             Vector3 edge(range_, range_, range_);
             Vector3 edge(range_, range_, range_);
             worldBoundingBox_.Define(center - edge, center + edge);
             worldBoundingBox_.Define(center - edge, center + edge);
         }
         }
@@ -502,7 +502,7 @@ void Light::SetIntensitySortValue(const BoundingBox& box)
     case LIGHT_POINT:
     case LIGHT_POINT:
         {
         {
             Vector3 centerPos = box.Center();
             Vector3 centerPos = box.Center();
-            Vector3 lightPos = GetWorldPosition();
+            Vector3 lightPos = node_->GetWorldPosition();
             Vector3 lightDir = (centerPos - lightPos).Normalized();
             Vector3 lightDir = (centerPos - lightPos).Normalized();
             Ray lightRay(lightPos, lightDir);
             Ray lightRay(lightPos, lightDir);
             float distance = lightRay.HitDistance(box);
             float distance = lightRay.HitDistance(box);
@@ -515,8 +515,8 @@ void Light::SetIntensitySortValue(const BoundingBox& box)
     case LIGHT_SPOT:
     case LIGHT_SPOT:
         {
         {
             Vector3 centerPos = box.Center();
             Vector3 centerPos = box.Center();
-            Vector3 lightPos = GetWorldPosition();
-            Vector3 lightDir = GetWorldRotation() * Vector3::FORWARD;
+            Vector3 lightPos = node_->GetWorldPosition();
+            Vector3 lightDir = node_->GetWorldRotation() * Vector3::FORWARD;
             Ray lightRay(lightPos, lightDir);
             Ray lightRay(lightPos, lightDir);
             
             
             Vector3 centerProj = lightRay.Project(centerPos);
             Vector3 centerProj = lightRay.Project(centerPos);

+ 4 - 4
Engine/Graphics/ParticleEmitter.cpp

@@ -136,11 +136,11 @@ void ParticleEmitter::Update(const FrameInfo& frame)
     }
     }
     
     
     // Update existing particles
     // Update existing particles
-    Vector3 relativeConstantForce = GetWorldRotation().Inverse() * constanceForce_;
+    Vector3 relativeConstantForce = node_->GetWorldRotation().Inverse() * constanceForce_;
     // If billboards are not relative, apply scaling to the position update
     // If billboards are not relative, apply scaling to the position update
     Vector3 scaleVector = Vector3::ONE;
     Vector3 scaleVector = Vector3::ONE;
     if (scaled_ && !relative_)
     if (scaled_ && !relative_)
-        scaleVector = GetWorldScale();
+        scaleVector = node_->GetWorldScale();
     
     
     for (unsigned i = 0; i < particles_.Size(); ++i)
     for (unsigned i = 0; i < particles_.Size(); ++i)
     {
     {
@@ -491,8 +491,8 @@ bool ParticleEmitter::EmitNewParticle()
     
     
     if (!relative_)
     if (!relative_)
     {
     {
-        startPos = GetWorldTransform() * startPos;
-        startDir = GetWorldRotation() * startDir;
+        startPos = node_->GetWorldTransform() * startPos;
+        startDir = node_->GetWorldRotation() * startDir;
     };
     };
     
     
     particle.velocity_ = Lerp(velocityMin_, velocityMax_, Random(1.0f)) * startDir;
     particle.velocity_ = Lerp(velocityMin_, velocityMax_, Random(1.0f)) * startDir;

+ 1 - 1
Engine/Graphics/StaticModel.cpp

@@ -141,7 +141,7 @@ void StaticModel::ProcessRayQuery(const RayOctreeQuery& query, PODVector<RayQuer
 
 
 void StaticModel::UpdateDistance(const FrameInfo& frame)
 void StaticModel::UpdateDistance(const FrameInfo& frame)
 {
 {
-    const Matrix3x4& worldTransform = GetWorldTransform();
+    const Matrix3x4& worldTransform = node_->GetWorldTransform();
     distance_ = frame.camera_->GetDistance(worldTransform.Translation());
     distance_ = frame.camera_->GetDistance(worldTransform.Translation());
     
     
     for (unsigned i = 0; i < geometryCenters_.Size(); ++i)
     for (unsigned i = 0; i < geometryCenters_.Size(); ++i)