From c56bb9a8554f14d6f39677615eac6d86c9f1934d Mon Sep 17 00:00:00 2001
From: Olivier Prat <olivier@zvork.fr>
Date: Mon, 6 Aug 2018 08:20:21 +0200
Subject: [PATCH] Small optimization by using squared distance and not distance
 in depth sort

---
 libraries/render/src/render/SortTask.cpp | 4 ++--
 libraries/shared/src/ViewFrustum.cpp     | 6 +++---
 libraries/shared/src/ViewFrustum.h       | 3 ++-
 3 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/libraries/render/src/render/SortTask.cpp b/libraries/render/src/render/SortTask.cpp
index 5b53b5d403..5b4061a10f 100644
--- a/libraries/render/src/render/SortTask.cpp
+++ b/libraries/render/src/render/SortTask.cpp
@@ -61,9 +61,9 @@ void render::depthSortItems(const RenderContextPointer& renderContext, bool fron
     for (auto itemDetails : inItems) {
         auto item = scene->getItem(itemDetails.id);
         auto bound = itemDetails.bound; // item.getBound();
-        float distance = args->getViewFrustum().distanceToCamera(bound.calcCenter());
+        float distanceSquared = args->getViewFrustum().distanceToCameraSquared(bound.calcCenter());
 
-        itemBoundSorts.emplace_back(ItemBoundSort(distance, distance, distance, itemDetails.id, bound));
+        itemBoundSorts.emplace_back(ItemBoundSort(distanceSquared, distanceSquared, distanceSquared, itemDetails.id, bound));
     }
 
     // sort against Z
diff --git a/libraries/shared/src/ViewFrustum.cpp b/libraries/shared/src/ViewFrustum.cpp
index 3e03c13fa4..e925ef960d 100644
--- a/libraries/shared/src/ViewFrustum.cpp
+++ b/libraries/shared/src/ViewFrustum.cpp
@@ -654,10 +654,10 @@ const ViewFrustum::Corners ViewFrustum::getCorners(const float depth) const {
     };
 }
 
-float ViewFrustum::distanceToCamera(const glm::vec3& point) const {
+float ViewFrustum::distanceToCameraSquared(const glm::vec3& point) const {
     glm::vec3 temp = getPosition() - point;
-    float distanceToPoint = sqrtf(glm::dot(temp, temp));
-    return distanceToPoint;
+    float distanceToPointSquared = glm::dot(temp, temp);
+    return distanceToPointSquared;
 }
 
 void ViewFrustum::evalProjectionMatrix(glm::mat4& proj) const {
diff --git a/libraries/shared/src/ViewFrustum.h b/libraries/shared/src/ViewFrustum.h
index eada65468d..9c80538e60 100644
--- a/libraries/shared/src/ViewFrustum.h
+++ b/libraries/shared/src/ViewFrustum.h
@@ -127,7 +127,8 @@ public:
     bool getProjectedRect(const AABox& box, glm::vec2& bottomLeft, glm::vec2& topRight) const;
     void getFurthestPointFromCamera(const AACube& box, glm::vec3& furthestPoint) const;
 
-    float distanceToCamera(const glm::vec3& point) const;
+    float distanceToCameraSquared(const glm::vec3& point) const;
+    float distanceToCamera(const glm::vec3& point) const { return sqrtf(distanceToCameraSquared(point)); }
 
     void evalProjectionMatrix(glm::mat4& proj) const;