diff --git a/modules/globebrowsing/src/tileprovider/videotileprovider.cpp b/modules/globebrowsing/src/tileprovider/videotileprovider.cpp index 29c23e06a1..819d74afbd 100644 --- a/modules/globebrowsing/src/tileprovider/videotileprovider.cpp +++ b/modules/globebrowsing/src/tileprovider/videotileprovider.cpp @@ -245,8 +245,15 @@ Tile VideoTileProvider::tile(const TileIndex& tileIndex) { if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { LINFO("Framebuffer is not complete"); } - - return Tile{ _frameTexture.get(), std::nullopt, Tile::Status::OK}; + uint64_t hash = tileIndex.hashKey(); + if (_tileCache.find(hash) == _tileCache.end()) { + _tileCache[hash] = Tile{ + _frameTexture.get(), + std::nullopt, + Tile::Status::OK + }; + } + return _tileCache[hash]; } Tile::Status VideoTileProvider::tileStatus(const TileIndex& tileIndex) { diff --git a/modules/globebrowsing/src/tileprovider/videotileprovider.h b/modules/globebrowsing/src/tileprovider/videotileprovider.h index 0cb98be1c7..7725651598 100644 --- a/modules/globebrowsing/src/tileprovider/videotileprovider.h +++ b/modules/globebrowsing/src/tileprovider/videotileprovider.h @@ -132,6 +132,9 @@ private: static int _wakeup; bool _didRender = false; bool _isPaused = false; + + // Cache for rendering the same frame + std::map _tileCache; }; } // namespace openspace::globebrowsing