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

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

Issue 440783004: Add support for all compressed formats in KTX file format (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix boolean stuff Created 6 years, 4 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
« no previous file with comments | « third_party/ktx/ktx.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "ktx.h" 9 #include "ktx.h"
10 #include "SkBitmap.h" 10 #include "SkBitmap.h"
11 #include "SkStream.h" 11 #include "SkStream.h"
12 #include "SkEndian.h" 12 #include "SkEndian.h"
13 13
14 #include "gl/GrGLDefines.h" 14 #include "gl/GrGLDefines.h"
15 #include "GrConfig.h"
15 16
16 #include "etc1.h" 17 #include "etc1.h"
17 18
19 static inline uint32_t compressed_fmt_to_gl_define(SkTextureCompressor::Format f mt) {
20 static const uint32_t kGLDefineMap[SkTextureCompressor::kFormatCnt] = {
21 GR_GL_COMPRESSED_LUMINANCE_LATC1, // kLATC_Format
22 GR_GL_COMPRESSED_R11, // kR11_EAC_Format
23 GR_GL_COMPRESSED_RGB8_ETC1, // kETC1_Format
24 GR_GL_COMPRESSED_RGBA_ASTC_12x12, // kASTC_12x12_Format
25 };
26
27 GR_STATIC_ASSERT(0 == SkTextureCompressor::kLATC_Format);
28 GR_STATIC_ASSERT(1 == SkTextureCompressor::kR11_EAC_Format);
29 GR_STATIC_ASSERT(2 == SkTextureCompressor::kETC1_Format);
30 GR_STATIC_ASSERT(3 == SkTextureCompressor::kASTC_12x12_Format);
31 GR_STATIC_ASSERT(SK_ARRAY_COUNT(kGLDefineMap) == SkTextureCompressor::kForma tCnt);
32
33 return kGLDefineMap[fmt];
34 }
35
18 #define KTX_FILE_IDENTIFIER_SIZE 12 36 #define KTX_FILE_IDENTIFIER_SIZE 12
19 static const uint8_t KTX_FILE_IDENTIFIER[KTX_FILE_IDENTIFIER_SIZE] = { 37 static const uint8_t KTX_FILE_IDENTIFIER[KTX_FILE_IDENTIFIER_SIZE] = {
20 0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A 38 0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A
21 }; 39 };
22 40
23 static const uint32_t kKTX_ENDIANNESS_CODE = 0x04030201; 41 static const uint32_t kKTX_ENDIANNESS_CODE = 0x04030201;
24 42
25 bool SkKTXFile::KeyValue::readKeyAndValue(const uint8_t* data) { 43 bool SkKTXFile::KeyValue::readKeyAndValue(const uint8_t* data) {
26 const char *key = reinterpret_cast<const char *>(data); 44 const char *key = reinterpret_cast<const char *>(data);
27 const char *value = key; 45 const char *value = key;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 const KeyValue *begin = this->fKeyValuePairs.begin(); 134 const KeyValue *begin = this->fKeyValuePairs.begin();
117 const KeyValue *end = this->fKeyValuePairs.end(); 135 const KeyValue *end = this->fKeyValuePairs.end();
118 for (const KeyValue *kv = begin; kv != end; ++kv) { 136 for (const KeyValue *kv = begin; kv != end; ++kv) {
119 if (kv->key() == key) { 137 if (kv->key() == key) {
120 return kv->value(); 138 return kv->value();
121 } 139 }
122 } 140 }
123 return SkString(); 141 return SkString();
124 } 142 }
125 143
126 bool SkKTXFile::isETC1() const { 144 bool SkKTXFile::isCompressedFormat(SkTextureCompressor::Format fmt) const {
127 return this->valid() && GR_GL_COMPRESSED_RGB8_ETC1 == fHeader.fGLInternalFor mat; 145 if (!this->valid()) {
146 return false;
147 }
148
149 // This has many aliases
150 bool isFmt = false;
151 if (fmt == SkTextureCompressor::kLATC_Format) {
152 isFmt = GR_GL_COMPRESSED_RED_RGTC1 == fHeader.fGLInternalFormat ||
153 GR_GL_COMPRESSED_3DC_X == fHeader.fGLInternalFormat;
154 }
155
156 return isFmt || compressed_fmt_to_gl_define(fmt) == fHeader.fGLInternalForma t;
128 } 157 }
129 158
130 bool SkKTXFile::isRGBA8() const { 159 bool SkKTXFile::isRGBA8() const {
131 return this->valid() && GR_GL_RGBA8 == fHeader.fGLInternalFormat; 160 return this->valid() && GR_GL_RGBA8 == fHeader.fGLInternalFormat;
132 } 161 }
133 162
134 bool SkKTXFile::isRGB8() const { 163 bool SkKTXFile::isRGB8() const {
135 return this->valid() && GR_GL_RGB8 == fHeader.fGLInternalFormat; 164 return this->valid() && GR_GL_RGB8 == fHeader.fGLInternalFormat;
136 } 165 }
137 166
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 for (int i = 0; i < height; ++i) { 519 for (int i = 0; i < height; ++i) {
491 if (!stream->write(rowPtr, bpp*width)) { 520 if (!stream->write(rowPtr, bpp*width)) {
492 return false; 521 return false;
493 } 522 }
494 rowPtr += bitmap.rowBytes(); 523 rowPtr += bitmap.rowBytes();
495 } 524 }
496 } 525 }
497 526
498 return true; 527 return true;
499 } 528 }
OLDNEW
« no previous file with comments | « third_party/ktx/ktx.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698