diff --git a/src/ResourceDisplay/ImageResourceDisplay.cpp b/src/ResourceDisplay/ImageResourceDisplay.cpp index 831faa5..939d528 100644 --- a/src/ResourceDisplay/ImageResourceDisplay.cpp +++ b/src/ResourceDisplay/ImageResourceDisplay.cpp @@ -101,6 +101,8 @@ sk_sp ImageResourceDisplay::load_frame_with_codec(const std::unique_ptr if(!ogImage) throw std::runtime_error("Could not scale image."); } + if(mipmapLevel == get_smallest_mipmap_level()) + return ogImage->withDefaultMipmaps(); return ogImage; } @@ -205,7 +207,7 @@ void ImageResourceDisplay::draw(SkCanvas* canvas, const DrawData& drawData, cons if(drawData.main->takingScreenshot) { if(closestMipmapLevel == mipmapLevel) { if(closestMipmapLevel == get_smallest_mipmap_level()) - canvas->drawImageRect(frame.smallestMipmapLevel, imRect, {SkFilterMode::kLinear, SkMipmapMode::kNone}); + canvas->drawImageRect(frame.smallestMipmapLevel, imRect, {SkFilterMode::kLinear, SkMipmapMode::kLinear}); else canvas->drawImageRect(frame.mipmapLevels[closestMipmapLevel], imRect, {SkFilterMode::kLinear, SkMipmapMode::kNone}); } @@ -221,7 +223,7 @@ void ImageResourceDisplay::draw(SkCanvas* canvas, const DrawData& drawData, cons } else { if(closestMipmapLevel == get_smallest_mipmap_level()) - canvas->drawImageRect(frame.smallestMipmapLevel, imRect, {SkFilterMode::kLinear, SkMipmapMode::kNone}); + canvas->drawImageRect(frame.smallestMipmapLevel, imRect, {SkFilterMode::kLinear, SkMipmapMode::kLinear}); else canvas->drawImageRect(frame.mipmapLevels[closestMipmapLevel], imRect, {SkFilterMode::kLinear, SkMipmapMode::kNone}); } diff --git a/src/ResourceDisplay/ImageResourceDisplay.hpp b/src/ResourceDisplay/ImageResourceDisplay.hpp index dafa7de..240cf22 100644 --- a/src/ResourceDisplay/ImageResourceDisplay.hpp +++ b/src/ResourceDisplay/ImageResourceDisplay.hpp @@ -28,6 +28,7 @@ class ImageResourceDisplay : public ResourceDisplay { // Mipmap level calculation is done using the smaller dimension, not the bigger one, to ensure that the dimensions are never invalid std::vector> mipmapLevels; sk_sp smallestMipmapLevel; // Smaller dimension of this should be around SMALLEST_MIPMAP_RESOLUTION pixels. Is always allocated and used when cachedMipmapLevel is unavailable or when the image is viewed from far away + // Has auto generated mipmaps float duration = -1.0f; };