1ae614409e4cff083c070face78cc349153d0b932krajcevski/*
2ae614409e4cff083c070face78cc349153d0b932krajcevski * Copyright 2014 Google Inc.
3ae614409e4cff083c070face78cc349153d0b932krajcevski *
4ae614409e4cff083c070face78cc349153d0b932krajcevski * Use of this source code is governed by a BSD-style license that can be
5ae614409e4cff083c070face78cc349153d0b932krajcevski * found in the LICENSE file.
6ae614409e4cff083c070face78cc349153d0b932krajcevski */
7ae614409e4cff083c070face78cc349153d0b932krajcevski
8ae614409e4cff083c070face78cc349153d0b932krajcevski#ifndef SkTextureCompressor_DEFINED
9ae614409e4cff083c070face78cc349153d0b932krajcevski#define SkTextureCompressor_DEFINED
10ae614409e4cff083c070face78cc349153d0b932krajcevski
11eecc35f988662f4fa82693ad36e908d637a7d3c1krajcevski#include "SkImageInfo.h"
12eecc35f988662f4fa82693ad36e908d637a7d3c1krajcevski
13ae614409e4cff083c070face78cc349153d0b932krajcevskiclass SkBitmap;
14ae614409e4cff083c070face78cc349153d0b932krajcevskiclass SkData;
15ae614409e4cff083c070face78cc349153d0b932krajcevski
16ae614409e4cff083c070face78cc349153d0b932krajcevskinamespace SkTextureCompressor {
17ae614409e4cff083c070face78cc349153d0b932krajcevski    // Various texture compression formats that we support.
18ae614409e4cff083c070face78cc349153d0b932krajcevski    enum Format {
19ae614409e4cff083c070face78cc349153d0b932krajcevski        // Alpha only format.
20ae614409e4cff083c070face78cc349153d0b932krajcevski        kLATC_Format,
21ae614409e4cff083c070face78cc349153d0b932krajcevski
22ae614409e4cff083c070face78cc349153d0b932krajcevski        kLast_Format = kLATC_Format
23ae614409e4cff083c070face78cc349153d0b932krajcevski    };
24ae614409e4cff083c070face78cc349153d0b932krajcevski    static const int kFormatCnt = kLast_Format + 1;
25ae614409e4cff083c070face78cc349153d0b932krajcevski
26ae614409e4cff083c070face78cc349153d0b932krajcevski    // Returns an SkData holding a blob of compressed data that corresponds
27ae614409e4cff083c070face78cc349153d0b932krajcevski    // to the bitmap. If the bitmap colorType cannot be compressed using the
28ae614409e4cff083c070face78cc349153d0b932krajcevski    // associated format, then we return NULL. The caller is responsible for
29ae614409e4cff083c070face78cc349153d0b932krajcevski    // calling unref() on the returned data.
30ae614409e4cff083c070face78cc349153d0b932krajcevski    SkData* CompressBitmapToFormat(const SkBitmap& bitmap, Format format);
31eecc35f988662f4fa82693ad36e908d637a7d3c1krajcevski
32eecc35f988662f4fa82693ad36e908d637a7d3c1krajcevski    // Compresses the given src data into dst. The src data is assumed to be
33eecc35f988662f4fa82693ad36e908d637a7d3c1krajcevski    // large enough to hold width*height pixels. The dst data is expected to
34eecc35f988662f4fa82693ad36e908d637a7d3c1krajcevski    // be large enough to hold the compressed data according to the format.
35eecc35f988662f4fa82693ad36e908d637a7d3c1krajcevski    bool CompressBufferToFormat(uint8_t* dst, const uint8_t* src, SkColorType srcColorType,
36eecc35f988662f4fa82693ad36e908d637a7d3c1krajcevski                                int width, int height, int rowBytes, Format format);
37ae614409e4cff083c070face78cc349153d0b932krajcevski}
38ae614409e4cff083c070face78cc349153d0b932krajcevski
39ae614409e4cff083c070face78cc349153d0b932krajcevski#endif
40