xref: /aosp_15_r20/external/skia/src/core/SkMipmapBuilder.cpp (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2023 Google LLC
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 #include "src/core/SkMipmapBuilder.h"
8 
9 #include "include/core/SkImage.h"
10 #include "include/core/SkPixmap.h"
11 #include "include/core/SkTypes.h"
12 #include "src/core/SkMipmap.h"
13 struct SkImageInfo;
14 
SkMipmapBuilder(const SkImageInfo & info)15 SkMipmapBuilder::SkMipmapBuilder(const SkImageInfo& info) {
16     fMM = sk_sp<SkMipmap>(SkMipmap::Build({info, nullptr, 0},
17                                           /* factoryProc= */ nullptr,
18                                           /* computeContents= */ false));
19 }
20 
~SkMipmapBuilder()21 SkMipmapBuilder::~SkMipmapBuilder() {}
22 
countLevels() const23 int SkMipmapBuilder::countLevels() const {
24     return fMM ? fMM->countLevels() : 0;
25 }
26 
level(int index) const27 SkPixmap SkMipmapBuilder::level(int index) const {
28     SkPixmap pm;
29 
30     SkMipmap::Level level;
31     if (fMM && fMM->getLevel(index, &level)) {
32         pm = level.fPixmap;
33     }
34     return pm;
35 }
36 
attachTo(const sk_sp<const SkImage> & src)37 sk_sp<SkImage> SkMipmapBuilder::attachTo(const sk_sp<const SkImage>& src) {
38     return src->withMipmaps(fMM);
39 }
40