158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger/*
258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Copyright 2013 Google Inc.
358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger *
458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger * found in the LICENSE file.
658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger */
758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#ifndef SkMipMap_DEFINED
958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#define SkMipMap_DEFINED
1058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
1158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkRefCnt.h"
1258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#include "SkScalar.h"
1358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
1458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkBitmap;
1558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
1658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerclass SkMipMap : public SkRefCnt {
1758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerpublic:
1858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    static SkMipMap* Build(const SkBitmap& src);
1958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
2058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    struct Level {
2158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        void*       fPixels;
2258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        uint32_t    fRowBytes;
2358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        uint32_t    fWidth, fHeight;
2458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        float       fScale; // < 1.0
2558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    };
2658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
2758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    bool extractLevel(SkScalar scale, Level*) const;
2858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
2958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    size_t getSize() const { return fSize; }
3058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
3158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerprivate:
3258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    size_t  fSize;
3358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    Level*  fLevels;
3458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    int     fCount;
3558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
3658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    // we take ownership of levels, and will free it with sk_free()
3758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    SkMipMap(Level* levels, int count, size_t size);
3858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    virtual ~SkMipMap();
3958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
4058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    static Level* AllocLevels(int levelCount, size_t pixelSize);
4158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger};
4258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
4358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger#endif
44