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