| /* | |
| * Copyright 2015 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef SkMipmapAccessor_DEFINED | |
| #define SkMipmapAccessor_DEFINED | |
| #include "include/core/SkBitmap.h" | |
| #include "include/core/SkMatrix.h" | |
| #include "include/core/SkPixmap.h" | |
| #include "include/core/SkRefCnt.h" | |
| #include "include/private/SkAssert.h" | |
| #include "include/private/SkNoncopyable.h" | |
| #include "src/core/SkMipmap.h" | |
| #include <utility> | |
| class SkArenaAlloc; | |
| class SkImage; | |
| class SkImage_Base; | |
| enum class SkMipmapMode; | |
| class SkMipmapAccessor : ::SkNoncopyable { | |
| public: | |
| // Returns null on failure | |
| static SkMipmapAccessor* Make(SkArenaAlloc*, const SkImage*, const SkMatrix& inv, SkMipmapMode); | |
| std::pair<SkPixmap, SkMatrix> level() const { | |
| SkASSERT(fUpper.addr() != nullptr); | |
| return std::make_pair(fUpper, fUpperInv); | |
| } | |
| std::pair<SkPixmap, SkMatrix> lowerLevel() const { | |
| SkASSERT(fLower.addr() != nullptr); | |
| return std::make_pair(fLower, fLowerInv); | |
| } | |
| // 0....1. Will be 0 if there is no lowerLevel | |
| float lowerWeight() const { return fLowerWeight; } | |
| private: | |
| SkPixmap fUpper, | |
| fLower; // only valid for mip_linear | |
| float fLowerWeight; // lower * weight + upper * (1 - weight) | |
| SkMatrix fUpperInv, | |
| fLowerInv; | |
| // these manage lifetime for the buffers | |
| SkBitmap fBaseStorage; | |
| sk_sp<const SkMipmap> fCurrMip; | |
| public: | |
| // Don't call publicly -- this is only public for SkArenaAlloc to access it inside Make() | |
| SkMipmapAccessor(const SkImage_Base*, const SkMatrix& inv, SkMipmapMode requestedMode); | |
| }; | |
| #endif |