diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2014-09-05 14:03:33 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2014-09-05 14:03:33 -0700 |
commit | de720f351549ca4ff846c84899082320f6d30d5a (patch) | |
tree | 196483f006e0f584b7e79dbb0af97dd0d1d0e729 /src/renderer | |
parent | 4c0b4a79017bc7c7ae864e6f961f186605be617f (diff) | |
download | qtlocation-mapboxgl-de720f351549ca4ff846c84899082320f6d30d5a.tar.gz |
FrameHistory::getFadeProperties
Diffstat (limited to 'src/renderer')
-rw-r--r-- | src/renderer/frame_history.cpp | 39 | ||||
-rw-r--r-- | src/renderer/painter_symbol.cpp | 41 |
2 files changed, 43 insertions, 37 deletions
diff --git a/src/renderer/frame_history.cpp b/src/renderer/frame_history.cpp index 6a11f0d4c6..8b69162a23 100644 --- a/src/renderer/frame_history.cpp +++ b/src/renderer/frame_history.cpp @@ -45,4 +45,41 @@ bool FrameHistory::needsAnimation(const timestamp duration) const { } return false; -}
\ No newline at end of file +} + +FadeProperties FrameHistory::getFadeProperties(timestamp duration) +{ + const timestamp currentTime = util::now(); + + // Remove frames until only one is outside the duration, or until there are only three + while (history.size() > 3 && history[1].t + duration < currentTime) { + history.pop_front(); + } + + if (history[1].t + duration < currentTime) { + history[0].z = history[1].z; + } + + // Find the range of zoom levels we want to fade between + float startingZ = history.front().z; + const FrameSnapshot lastFrame = history.back(); + float endingZ = lastFrame.z; + float lowZ = std::fmin(startingZ, endingZ); + float highZ = std::fmax(startingZ, endingZ); + + // Calculate the speed of zooming, and how far it would zoom in terms of zoom levels in one + // duration + float zoomDiff = endingZ - history[1].z, timeDiff = lastFrame.t - history[1].t; + float fadedist = zoomDiff / (timeDiff / duration); + + // At end of a zoom when the zoom stops changing continue pretending to zoom at that speed + // bump is how much farther it would have been if it had continued zooming at the same rate + float bump = (currentTime - lastFrame.t) / duration * fadedist; + + return FadeProperties { + fadedist, + lowZ, + highZ, + bump + }; +} diff --git a/src/renderer/painter_symbol.cpp b/src/renderer/painter_symbol.cpp index 7ab8edfb40..ab67e76a42 100644 --- a/src/renderer/painter_symbol.cpp +++ b/src/renderer/painter_symbol.cpp @@ -63,42 +63,11 @@ void Painter::renderSymbol(SymbolBucket &bucket, std::shared_ptr<StyleLayer> lay sdfShader->u_flip = (bucket.properties.placement == PlacementType::Line ? 1 : 0); sdfShader->u_zoom = (map.getState().getNormalizedZoom() - zoomAdjust) * 10; // current zoom level - // Label fading - const timestamp duration = 300_milliseconds; - const timestamp currentTime = util::now(); - - std::deque<FrameSnapshot> &history = frameHistory.history; - if (history.size() >= 2) { - // Remove frames until only one is outside the duration, or until there are only three - while (history.size() > 3 && history[1].t + duration < currentTime) { - history.pop_front(); - } - - if (history[1].t + duration < currentTime) { - history[0].z = history[1].z; - } - - // Find the range of zoom levels we want to fade between - float startingZ = history.front().z; - const FrameSnapshot lastFrame = history.back(); - float endingZ = lastFrame.z; - float lowZ = std::fmin(startingZ, endingZ); - float highZ = std::fmax(startingZ, endingZ); - - // Calculate the speed of zooming, and how far it would zoom in terms of zoom levels in one - // duration - float zoomDiff = endingZ - history[1].z, timeDiff = lastFrame.t - history[1].t; - float fadedist = zoomDiff / (timeDiff / duration); - - // At end of a zoom when the zoom stops changing continue pretending to zoom at that speed - // bump is how much farther it would have been if it had continued zooming at the same rate - float bump = (currentTime - lastFrame.t) / duration * fadedist; - - sdfShader->u_fadedist = fadedist * 10; - sdfShader->u_minfadezoom = std::floor(lowZ * 10); - sdfShader->u_maxfadezoom = std::floor(highZ * 10); - sdfShader->u_fadezoom = (map.getState().getNormalizedZoom() + bump) * 10; - } + FadeProperties f = frameHistory.getFadeProperties(300_milliseconds); + sdfShader->u_fadedist = f.fadedist * 10; + sdfShader->u_minfadezoom = std::floor(f.minfadezoom * 10); + sdfShader->u_maxfadezoom = std::floor(f.maxfadezoom * 10); + sdfShader->u_fadezoom = (map.getState().getNormalizedZoom() + f.bump) * 10; // This defines the gamma around the SDF cutoff value. const float sdfGamma = 1.0f / 10.0f; |