blob: 6717bea5f7a20f755d2dcb5d0ec4267f6fa43cee [file] [log] [blame]
krajcevski99ffe242014-06-03 13:04:35 -07001/*
2 * Copyright 2014 Google Inc.
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
8#include "SkColorPriv.h"
Hal Canary248ff022016-11-22 09:03:03 -07009#include "SkImageEncoderPriv.h"
msarett8715d472016-02-17 10:02:29 -080010#include "SkImageGenerator.h"
krajcevskic250d2e2014-06-06 06:16:28 -070011#include "SkPixelRef.h"
krajcevski99ffe242014-06-03 13:04:35 -070012#include "SkStream.h"
halcanary67ec1f82014-06-27 11:36:20 -070013#include "SkStreamPriv.h"
krajcevski99ffe242014-06-03 13:04:35 -070014#include "SkTypes.h"
15
16#include "ktx.h"
17#include "etc1.h"
18
msarett910f7ec2016-03-24 04:45:39 -070019///////////////////////////////////////////////////////////////////////////////
20
21// KTX Image Encoder
22//
msarette8597a42016-03-24 10:41:47 -070023// KTX is a general texture data storage file format ratified by the Khronos Group. As an
24// overview, a KTX file contains all of the appropriate values needed to fully specify a
25// texture in an OpenGL application, including the use of compressed data.
26//
Hal Canarye8eed322016-11-22 11:57:18 -070027// This encoder takes a best guess at how to encode the bitmap passed to it.
28// The KTX library tries to do its best to encode the appropriate
krajcevskic250d2e2014-06-06 06:16:28 -070029// data specified by the bitmap based on the config. (i.e. kAlpha8_Config will
30// be represented as a full resolution 8-bit image dump with the appropriate
31// OpenGL defines in the header).
32
33class SkKTXImageEncoder : public SkImageEncoder {
34protected:
Hal Canarye8eed322016-11-22 11:57:18 -070035 bool onEncode(SkWStream* stream, const SkBitmap& bitmap, int) override {
36 return SkKTXFile::WriteBitmapToKTX(stream, bitmap);
37 }
krajcevskic250d2e2014-06-06 06:16:28 -070038};
39
krajcevskic250d2e2014-06-06 06:16:28 -070040DEFINE_ENCODER_CREATOR(KTXImageEncoder);
krajcevski99ffe242014-06-03 13:04:35 -070041
krajcevskic250d2e2014-06-06 06:16:28 -070042SkImageEncoder* sk_libktx_efactory(SkImageEncoder::Type t) {
Hal Canary248ff022016-11-22 09:03:03 -070043 return (SkEncodedImageFormat::kKTX == (SkEncodedImageFormat)t) ? new SkKTXImageEncoder : nullptr;
krajcevskic250d2e2014-06-06 06:16:28 -070044}
45
krajcevskic250d2e2014-06-06 06:16:28 -070046static SkImageEncoder_EncodeReg gEReg(sk_libktx_efactory);