Merging with latest master and bringin low hanging fruits from Andrews pr

This commit is contained in:
samcake 2018-05-23 17:49:10 -07:00
parent 40370f860a
commit c29b93b986
2 changed files with 28 additions and 17 deletions

View file

@ -71,9 +71,9 @@ void SetupViews::run(const WorkloadContextPointer& renderContext, const Input& i
ControlViews::ControlViews() {
regionBackFronts[0] = glm::vec2(1.0f, 3.0f);
regionBackFronts[1] = glm::vec2(1.0f, 5.0f);
regionBackFronts[2] = glm::vec2(1.0f, 10.0f);
regionBackFronts[0] = DEFAULT_R1_BACK_FRONT;
regionBackFronts[1] = DEFAULT_R2_BACK_FRONT;
regionBackFronts[2] = DEFAULT_R3_BACK_FRONT;
regionRegulators[0] = Regulator(std::chrono::milliseconds(2), regionBackFronts[0], 5.0f * regionBackFronts[0], glm::vec2(0.4f, 0.2f), 0.5f * glm::vec2(0.3f, 0.2f));
regionRegulators[1] = Regulator(std::chrono::milliseconds(2), regionBackFronts[1], 8.0f * regionBackFronts[1], glm::vec2(0.4f, 0.2f), 0.5f * glm::vec2(0.3f, 0.2f));
regionRegulators[2] = Regulator(std::chrono::milliseconds(2), regionBackFronts[2], 10.0f * regionBackFronts[2], glm::vec2(0.4f, 0.2f), 0.5f * glm::vec2(0.3f, 0.2f));
@ -114,12 +114,15 @@ glm::vec2 Regulator::run(const Timing_ns& regulationDuration, const Timing_ns& m
float coef = error_ms / std::chrono::duration<float, std::milli>(regulationDuration).count();
next += coef * (error_ms < 0.0f ? _speedDown : _speedUp);
// Clamp to min max
next = glm::clamp(next, _minRange, _maxRange);
return next;
}
glm::vec2 Regulator::clamp(const glm::vec2& backFront) const {
// Clamp to min max
return glm::clamp(backFront, _minRange, _maxRange);
}
void ControlViews::regulateViews(workload::Views& outViews, const workload::Timings& timings) {
for (auto& outView : outViews) {
@ -129,9 +132,14 @@ void ControlViews::regulateViews(workload::Views& outViews, const workload::Timi
}
auto loopDuration = std::chrono::nanoseconds{ std::chrono::milliseconds(16) };
_dataExport.ranges[workload::Region::R1] = regionBackFronts[workload::Region::R1] = regionRegulators[workload::Region::R1].run(loopDuration, timings[0], regionBackFronts[workload::Region::R1]);
_dataExport.ranges[workload::Region::R2] = regionBackFronts[workload::Region::R2] = regionRegulators[workload::Region::R2].run(loopDuration, timings[0], regionBackFronts[workload::Region::R2]);
_dataExport.ranges[workload::Region::R3] = regionBackFronts[workload::Region::R3] = regionRegulators[workload::Region::R3].run(loopDuration, timings[1], regionBackFronts[workload::Region::R3]);
regionBackFronts[workload::Region::R1] = regionRegulators[workload::Region::R1].clamp(regionRegulators[workload::Region::R1].run(loopDuration, timings[0], regionBackFronts[workload::Region::R1]));
regionBackFronts[workload::Region::R2] = regionRegulators[workload::Region::R2].clamp(regionRegulators[workload::Region::R2].run(loopDuration, timings[0], regionBackFronts[workload::Region::R2]));
regionBackFronts[workload::Region::R3] = regionRegulators[workload::Region::R3].clamp(regionRegulators[workload::Region::R3].run(loopDuration, timings[1], regionBackFronts[workload::Region::R3]));
// Export data config
_dataExport.ranges[workload::Region::R1] = regionBackFronts[workload::Region::R1];
_dataExport.ranges[workload::Region::R2] = regionBackFronts[workload::Region::R2];
_dataExport.ranges[workload::Region::R3] = regionBackFronts[workload::Region::R3];
for (auto& outView : outViews) {
outView.regionBackFronts[workload::Region::R1] = regionBackFronts[workload::Region::R1];
@ -141,5 +149,3 @@ void ControlViews::regulateViews(workload::Views& outViews, const workload::Timi
workload::View::updateRegionsFromBackFronts(outView);
}
}

View file

@ -24,6 +24,10 @@ QVariantList toVariantList(const QList<T> &list)
}
namespace workload {
const glm::vec2 DEFAULT_R1_BACK_FRONT = { 50.0f, 100.0f };
const glm::vec2 DEFAULT_R2_BACK_FRONT = { 75.0f, 150.0f };
const glm::vec2 DEFAULT_R3_BACK_FRONT = { 100.0f, 250.0f };
class SetupViewsConfig : public Job::Config{
Q_OBJECT
Q_PROPERTY(float r1Front READ getR1Front WRITE setR1Front NOTIFY dirty)
@ -66,14 +70,14 @@ namespace workload {
void setSimulateSecondaryCamera(bool use) { data.simulateSecondaryCamera = use; emit dirty(); }
struct Data {
float r1Back { 2.0f };
float r1Front { 10.0f };
float r1Back { DEFAULT_R1_BACK_FRONT.x };
float r1Front { DEFAULT_R1_BACK_FRONT.y };
float r2Back{ 5.0f };
float r2Front{ 30.0f };
float r2Back{ DEFAULT_R2_BACK_FRONT.x };
float r2Front{ DEFAULT_R2_BACK_FRONT.y };
float r3Back{ 10.0f };
float r3Front{ 100.0f };
float r3Back{ DEFAULT_R3_BACK_FRONT.x };
float r3Front{ DEFAULT_R3_BACK_FRONT.y };
bool freezeViews{ false };
bool useAvatarView{ false };
@ -211,6 +215,7 @@ namespace workload {
_budget(budget_ns), _minRange(minRange), _maxRange(maxRange), _speedDown(speedDown), _speedUp(speedUp) {}
glm::vec2 run(const Timing_ns& regulationDuration, const Timing_ns& measured, const glm::vec2& current);
glm::vec2 clamp(const glm::vec2& backFront) const;
};
class ControlViews {