From 76f92964bfccf9106453d4f8771d964c1c9833ea Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Tue, 27 Mar 2018 13:22:52 +0200 Subject: [PATCH] Reduce copying in animation step. --- src/fmri/ActivityAnimation.cpp | 2 +- src/fmri/ImageInteractionAnimation.cpp | 2 +- src/fmri/PoolingLayerAnimation.cpp | 2 +- src/fmri/utils.cpp | 5 +++-- src/fmri/utils.hpp | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/fmri/ActivityAnimation.cpp b/src/fmri/ActivityAnimation.cpp index e64744e..16605e1 100644 --- a/src/fmri/ActivityAnimation.cpp +++ b/src/fmri/ActivityAnimation.cpp @@ -51,7 +51,7 @@ ActivityAnimation::ActivityAnimation( void ActivityAnimation::draw(float timeScale) { - const auto vertexBuffer = animate(startingPos, delta, timeScale); + const auto &vertexBuffer = animate(startingPos, delta, timeScale); glPointSize(5); glEnableClientState(GL_VERTEX_ARRAY); diff --git a/src/fmri/ImageInteractionAnimation.cpp b/src/fmri/ImageInteractionAnimation.cpp index d14e99e..0fba9e7 100644 --- a/src/fmri/ImageInteractionAnimation.cpp +++ b/src/fmri/ImageInteractionAnimation.cpp @@ -8,7 +8,7 @@ using namespace fmri; void ImageInteractionAnimation::draw(float step) { - auto vertexBuffer = animate(startingPositions, deltas, step); + auto &vertexBuffer = animate(startingPositions, deltas, step); drawImageTiles(vertexBuffer.size() / 3, vertexBuffer.data(), textureCoordinates.data(), texture); } diff --git a/src/fmri/PoolingLayerAnimation.cpp b/src/fmri/PoolingLayerAnimation.cpp index b26e595..4a09e01 100644 --- a/src/fmri/PoolingLayerAnimation.cpp +++ b/src/fmri/PoolingLayerAnimation.cpp @@ -30,7 +30,7 @@ PoolingLayerAnimation::PoolingLayerAnimation(const LayerData &prevData, const La void PoolingLayerAnimation::draw(float timeStep) { - auto vertexBuffer = animate(startingPositions, deltas, timeStep); + auto& vertexBuffer = animate(startingPositions, deltas, timeStep); drawImageTiles(vertexBuffer.size() / 3, vertexBuffer.data(), textureCoordinates.data(), original); } diff --git a/src/fmri/utils.cpp b/src/fmri/utils.cpp index 4b03af8..f16ce36 100644 --- a/src/fmri/utils.cpp +++ b/src/fmri/utils.cpp @@ -16,9 +16,10 @@ std::default_random_engine &fmri::rng() return rng; } -std::vector fmri::animate(const std::vector &start, const std::vector &delta, float time) +const std::vector & fmri::animate(const std::vector &start, const std::vector &delta, float time) { - auto vertexBuffer = delta; + static std::vector vertexBuffer; + vertexBuffer = delta; caffe::caffe_scal(vertexBuffer.size(), time, vertexBuffer.data()); caffe::caffe_add(start.size(), vertexBuffer.data(), start.data(), vertexBuffer.data()); diff --git a/src/fmri/utils.hpp b/src/fmri/utils.hpp index 18e87fd..95cabf3 100644 --- a/src/fmri/utils.hpp +++ b/src/fmri/utils.hpp @@ -238,5 +238,5 @@ namespace fmri * @param time 0..1 where in the animation are we? * @return Resulting list of floats. */ - std::vector animate(const std::vector& start, const std::vector& delta, float time); + const std::vector & animate(const std::vector &start, const std::vector &delta, float time); }