From b6b7cb3394daf9618de38505deb7c7d3d2676eab Mon Sep 17 00:00:00 2001 From: samcake Date: Tue, 6 Mar 2018 12:39:28 -0800 Subject: [PATCH] Adressing warnings issue and implementing the independent intersection test per region spheres --- libraries/task/src/task/Task.h | 2 +- libraries/workload/src/workload/Engine.cpp | 27 ++++++++++++++++--- libraries/workload/src/workload/Space.cpp | 19 +++++++++---- libraries/workload/src/workload/View.cpp | 2 +- libraries/workload/src/workload/View.h | 2 +- .../developer/utilities/workload/workload.qml | 3 ++- 6 files changed, 43 insertions(+), 12 deletions(-) diff --git a/libraries/task/src/task/Task.h b/libraries/task/src/task/Task.h index 7c66cf9810..3dcb856fc0 100644 --- a/libraries/task/src/task/Task.h +++ b/libraries/task/src/task/Task.h @@ -180,7 +180,7 @@ public: const Varying getInput() const { return _concept->getInput(); } const Varying getOutput() const { return _concept->getOutput(); } - template void feedInput(const I& in) { _concept->editInput().edit() = in; } + template void feedInput(const I& in) { _concept->editInput().template edit() = in; } QConfigPointer& getConfiguration() const { return _concept->getConfiguration(); } diff --git a/libraries/workload/src/workload/Engine.cpp b/libraries/workload/src/workload/Engine.cpp index 9a73ef41f8..ce5ab6cca0 100644 --- a/libraries/workload/src/workload/Engine.cpp +++ b/libraries/workload/src/workload/Engine.cpp @@ -20,16 +20,37 @@ #include "ClassificationTracker.h" namespace workload { + class DebugCout { + public: + using Inputs = SortedChanges; + using JobModel = workload::Job::ModelI; + + DebugCout() {} + + void run(const workload::WorkloadContextPointer& renderContext, const Inputs& inputs) { + qDebug() << "Some message from " << inputs.size(); + int i = 0; + for (auto& b: inputs) { + qDebug() << " Bucket Number" << i << " size is " << b.size(); + i++; + } + } + + protected: + }; + WorkloadContext::WorkloadContext(const SpacePointer& space) : task::JobContext(trace_workload()), _space(space) {} class EngineBuilder { public: - using Input = Views; - using JobModel = Task::ModelI; + using Inputs = Views; + using JobModel = Task::ModelI; void build(JobModel& model, const Varying& in, Varying& out) { model.addJob("setupViews", in); - auto classifications = model.addJob("classificationTracker"); + const auto classifications = model.addJob("classificationTracker"); + // model.addJob("debug", classifications); + } }; diff --git a/libraries/workload/src/workload/Space.cpp b/libraries/workload/src/workload/Space.cpp index a357c623b6..41d573e0bb 100644 --- a/libraries/workload/src/workload/Space.cpp +++ b/libraries/workload/src/workload/Space.cpp @@ -73,11 +73,20 @@ void Space::categorizeAndGetChanges(std::vector& changes) { for (uint32_t j = 0; j < numViews; ++j) { auto& view = _views[j]; - float distance2 = glm::distance2(view.origin, glm::vec3(proxy.sphere)); - for (uint8_t c = 0; c < region; ++c) { - float touchDistance = view.regions[c].w + proxy.sphere.w; - if (distance2 < touchDistance * touchDistance) { - region = c; + glm::vec3 distance2(glm::distance2(proxy.sphere, view.regions[0]), glm::distance2(proxy.sphere, view.regions[1]), glm::distance2(proxy.sphere, view.regions[2])); + glm::vec3 regionRadii2(view.regions[0].w + proxy.sphere.w, view.regions[1].w + proxy.sphere.w, view.regions[2].w + proxy.sphere.w); + regionRadii2 *= regionRadii2; + auto touchTests = glm::lessThanEqual(distance2, regionRadii2); + + if (glm::any(touchTests)) { + if (touchTests.x) { + region = Region::R1; + break; + } else if (touchTests.y) { + region = Region::R2; + break; + } else { + region = Region::R3; break; } } diff --git a/libraries/workload/src/workload/View.cpp b/libraries/workload/src/workload/View.cpp index dba4ffed7c..f68e7a8436 100644 --- a/libraries/workload/src/workload/View.cpp +++ b/libraries/workload/src/workload/View.cpp @@ -32,7 +32,7 @@ View View::evalFromFrustum(const ViewFrustum& frustum) { } Sphere View::evalRegionSphere(const View& view, float originRadius, float maxDistance) { - float radius = (maxDistance + originRadius) / 2.0; + float radius = (maxDistance + originRadius) / 2.0f; float center = radius - originRadius; return Sphere(view.origin + view.direction * center, radius); } diff --git a/libraries/workload/src/workload/View.h b/libraries/workload/src/workload/View.h index 7484c46398..a237615a7a 100644 --- a/libraries/workload/src/workload/View.h +++ b/libraries/workload/src/workload/View.h @@ -38,7 +38,7 @@ public: float maxRadius{ FLT_MAX }; // Fov stores the half field of view angle, and tan/cos/sin ready to go, default is fov of 90deg - glm::vec4 fov_halfAngle_tan_cos_sin { M_PI_4, 1.0f, M_SQRT2 * 0.5f, M_SQRT2 * 0.5f }; + glm::vec4 fov_halfAngle_tan_cos_sin { (float) M_PI_4, 1.0f, (float) (M_SQRT2 * 0.5), (float) (M_SQRT2 * 0.5) }; // Origin position glm::vec3 origin{ 0.0f }; diff --git a/scripts/developer/utilities/workload/workload.qml b/scripts/developer/utilities/workload/workload.qml index 56ea12a2f1..3b7ca09496 100644 --- a/scripts/developer/utilities/workload/workload.qml +++ b/scripts/developer/utilities/workload/workload.qml @@ -21,6 +21,7 @@ Rectangle { anchors.margins: hifi.dimensions.contentMargin.x color: hifi.colors.baseGray; + property var setupViews: Workload.getConfig("setupViews") property var spaceToRender: Workload.getConfig("SpaceToRender") Column { @@ -37,7 +38,7 @@ Rectangle { boxSize: 20 text: "Freeze Views" checked: workload.spaceToRender["freezeViews"] - onCheckedChanged: { workload.spaceToRender["freezeViews"] = checked } + onCheckedChanged: { workload.spaceToRender["freezeViews"] = checked, workload.setupViews.enabled = !checked; } } Separator {} HifiControls.Label {