1dc6c8babf04fe6c19087d441896a3d49f3322cc7reed@google.com/*
2dc6c8babf04fe6c19087d441896a3d49f3322cc7reed@google.com * Copyright 2013 Google Inc.
3dc6c8babf04fe6c19087d441896a3d49f3322cc7reed@google.com *
4dc6c8babf04fe6c19087d441896a3d49f3322cc7reed@google.com * Use of this source code is governed by a BSD-style license that can be
5dc6c8babf04fe6c19087d441896a3d49f3322cc7reed@google.com * found in the LICENSE file.
6dc6c8babf04fe6c19087d441896a3d49f3322cc7reed@google.com */
7dc6c8babf04fe6c19087d441896a3d49f3322cc7reed@google.com
8eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com#ifndef SkMipMap_DEFINED
9eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com#define SkMipMap_DEFINED
10eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com
11eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com#include "SkRefCnt.h"
12eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com#include "SkScalar.h"
13eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com
14eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.comclass SkBitmap;
15eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com
16eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.comclass SkMipMap : public SkRefCnt {
17eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.compublic:
18eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com    static SkMipMap* Build(const SkBitmap& src);
19eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com
20eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com    struct Level {
21eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com        void*       fPixels;
22eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com        uint32_t    fRowBytes;
23eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com        uint32_t    fWidth, fHeight;
24d94697c21ae479df4190a1afbf08d85ce244a4efreed@google.com        float       fScale; // < 1.0
25eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com    };
26a79919883e275e7a5e00afc50be10cc721f6ba1dskia.committer@gmail.com
27eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com    bool extractLevel(SkScalar scale, Level*) const;
28eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com
29d94697c21ae479df4190a1afbf08d85ce244a4efreed@google.com    size_t getSize() const { return fSize; }
30d94697c21ae479df4190a1afbf08d85ce244a4efreed@google.com
31eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.comprivate:
32d94697c21ae479df4190a1afbf08d85ce244a4efreed@google.com    size_t  fSize;
33eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com    Level*  fLevels;
34eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com    int     fCount;
35eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com
36eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com    // we take ownership of levels, and will free it with sk_free()
37d94697c21ae479df4190a1afbf08d85ce244a4efreed@google.com    SkMipMap(Level* levels, int count, size_t size);
38d94697c21ae479df4190a1afbf08d85ce244a4efreed@google.com    virtual ~SkMipMap();
39eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com
40eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com    static Level* AllocLevels(int levelCount, size_t pixelSize);
41eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com};
42eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com
43eed6f1b76b6690796e3d40993b1504ba1eca2df5reed@google.com#endif
44