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;