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); }