Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(99)

Side by Side Diff: third_party/ktx/ktx.h

Issue 312353003: Initial KTX encoder (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Code review changes Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #ifndef SkKTXFile_DEFINED 10 #ifndef SkKTXFile_DEFINED
11 #define SkKTXFile_DEFINED 11 #define SkKTXFile_DEFINED
12 12
13 #include "SkData.h" 13 #include "SkData.h"
14 #include "SkTypes.h" 14 #include "SkTypes.h"
15 #include "SkTDArray.h" 15 #include "SkTDArray.h"
16 #include "SkString.h" 16 #include "SkString.h"
17 #include "SkRefCnt.h" 17 #include "SkRefCnt.h"
18 18
19 class SkBitmap;
19 class SkStreamRewindable; 20 class SkStreamRewindable;
21 class SkWStream;
20 22
21 // KTX Image File 23 // KTX Image File
22 // --- 24 // ---
23 // KTX is a general texture data storage file format ratified by the Khronos Gro up. As an 25 // KTX is a general texture data storage file format ratified by the Khronos Gro up. As an
24 // overview, a KTX file contains all of the appropriate values needed to fully s pecify a 26 // overview, a KTX file contains all of the appropriate values needed to fully s pecify a
25 // texture in an OpenGL application, including the use of compressed data. 27 // texture in an OpenGL application, including the use of compressed data.
26 // 28 //
27 // A full format specification can be found here: 29 // A full format specification can be found here:
28 // http://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/ 30 // http://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/
29 31
(...skipping 12 matching lines...) Expand all
42 bool valid() const { return fValid; } 44 bool valid() const { return fValid; }
43 45
44 int width() const { return static_cast<int>(fHeader.fPixelWidth); } 46 int width() const { return static_cast<int>(fHeader.fPixelWidth); }
45 int height() const { return static_cast<int>(fHeader.fPixelHeight); } 47 int height() const { return static_cast<int>(fHeader.fPixelHeight); }
46 48
47 const uint8_t *pixelData(int mipmap = 0) const { 49 const uint8_t *pixelData(int mipmap = 0) const {
48 SkASSERT(!this->valid() || mipmap < fPixelData.count()); 50 SkASSERT(!this->valid() || mipmap < fPixelData.count());
49 return this->valid() ? fPixelData[mipmap].data() : NULL; 51 return this->valid() ? fPixelData[mipmap].data() : NULL;
50 } 52 }
51 53
54 // If the decoded KTX file has the following key, then it will
55 // return the associated value. If not found, the empty string
56 // is returned.
57 SkString getValueForKey(const SkString& key) const;
58
52 int numMipmaps() const { return static_cast<int>(fHeader.fNumberOfMipmapLeve ls); } 59 int numMipmaps() const { return static_cast<int>(fHeader.fNumberOfMipmapLeve ls); }
53 60
54 bool isETC1() const; 61 bool isETC1() const;
55 bool isRGBA8() const; 62 bool isRGBA8() const;
56 bool isRGB8() const; 63 bool isRGB8() const;
57 64
58 static bool is_ktx(const uint8_t *data); 65 static bool is_ktx(const uint8_t *data);
59 static bool is_ktx(SkStreamRewindable* stream); 66 static bool is_ktx(SkStreamRewindable* stream);
60 67
68 static bool WriteETC1ToKTX(SkWStream* stream, const uint8_t *etc1Data,
69 uint32_t width, uint32_t height);
70 static bool WriteBitmapToKTX(SkWStream* stream, const SkBitmap& bitmap);
61 private: 71 private:
62 72
63 // The blob holding the file data. 73 // The blob holding the file data.
64 SkAutoTUnref<SkData> fData; 74 SkAutoTUnref<SkData> fData;
65 75
66 // This header captures all of the data that describes the format 76 // This header captures all of the data that describes the format
67 // of the image data in a KTX file. 77 // of the image data in a KTX file.
68 struct Header { 78 struct Header {
69 uint32_t fGLType; 79 uint32_t fGLType;
70 uint32_t fGLTypeSize; 80 uint32_t fGLTypeSize;
(...skipping 10 matching lines...) Expand all
81 91
82 Header() { memset(this, 0, sizeof(*this)); } 92 Header() { memset(this, 0, sizeof(*this)); }
83 } fHeader; 93 } fHeader;
84 94
85 // A Key Value pair stored in the KTX file. There may be 95 // A Key Value pair stored in the KTX file. There may be
86 // arbitrarily many of these. 96 // arbitrarily many of these.
87 class KeyValue { 97 class KeyValue {
88 public: 98 public:
89 KeyValue(size_t size) : fDataSz(size) { } 99 KeyValue(size_t size) : fDataSz(size) { }
90 bool readKeyAndValue(const uint8_t *data); 100 bool readKeyAndValue(const uint8_t *data);
91 101 size_t size() const { return fDataSz; }
102 const SkString& key() const { return fKey; }
103 const SkString& value() const { return fValue; }
104 bool writeKeyAndValueForKTX(SkWStream* strm);
92 private: 105 private:
93 const size_t fDataSz; 106 const size_t fDataSz;
94 SkString fKey; 107 SkString fKey;
95 SkString fValue; 108 SkString fValue;
96 }; 109 };
97 110
111 static KeyValue CreateKeyValue(const char *key, const char *value);
112
98 // The pixel data for a single mipmap level in an image. Based on how 113 // The pixel data for a single mipmap level in an image. Based on how
99 // the rest of the data is stored, this may be compressed, a cubemap, etc. 114 // the rest of the data is stored, this may be compressed, a cubemap, etc.
100 // The header will describe the format of this data. 115 // The header will describe the format of this data.
101 class PixelData { 116 class PixelData {
102 public: 117 public:
103 PixelData(const uint8_t *ptr, size_t sz) : fDataSz(sz), fDataPtr(ptr) { } 118 PixelData(const uint8_t *ptr, size_t sz) : fDataSz(sz), fDataPtr(ptr) { }
104 const uint8_t *data() const { return fDataPtr; } 119 const uint8_t *data() const { return fDataPtr; }
105 size_t dataSize() const { return fDataSz; } 120 size_t dataSize() const { return fDataSz; }
106 private: 121 private:
107 const size_t fDataSz; 122 const size_t fDataSz;
(...skipping 12 matching lines...) Expand all
120 // If the endianness of the platform is different than the file, 135 // If the endianness of the platform is different than the file,
121 // then we need to do proper byte swapping. 136 // then we need to do proper byte swapping.
122 bool fSwapBytes; 137 bool fSwapBytes;
123 138
124 // Read an integer from a buffer, advance the buffer, and swap 139 // Read an integer from a buffer, advance the buffer, and swap
125 // bytes if fSwapBytes is set 140 // bytes if fSwapBytes is set
126 uint32_t readInt(const uint8_t** buf, size_t* bytesLeft) const; 141 uint32_t readInt(const uint8_t** buf, size_t* bytesLeft) const;
127 }; 142 };
128 143
129 #endif // SkKTXFile_DEFINED 144 #endif // SkKTXFile_DEFINED
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698